Validation record

Benchmarked in public. The consolidated status below is the single source of truth (outputs/validation_summary.md); every number is measured and every miss is stated as a miss.

VALIDATION SUMMARY — vib-agent

Last updated: 2026-07-23 (Blind Test A disposition)

Hand-authored and regeneration-safe. eval/runner.py rewrites cwru_results.md and field_validation_results.md wholesale, so the consolidated status lives here instead. Every number below is measured, and every miss is stated as a miss.

These numbers describe the DEPLOYED SERVICE. Uploaded data is analysed on the route profile -- the webapp reads config/webapp.json analysis_profile and the CLI defaults to route (streaming is the NCD sensor pipeline's separate, frozen profile). The detector guards below -- the synchronous-collision guard, the amplitude floor, and the two-condition imbalance gate -- are therefore active in what an analyst receives. A live regeneration of 16 reports on 2026-07-22 (grading: outputs/regen_grading.md, 16/16 PASS) confirmed it: the four reports that previously carried a suppressible false bearing call now commit nothing and demote the candidate to the differential.

BEARING DIAGNOSIS -- CWRU (Case Western Reserve University)

Committed inner/outer-race diagnosis correct
20 / 24
False bearing calls on healthy files
0 / 4 (clean)

The 4 misses are one fault condition, not a scatter: all four load cases of OR014@6 (0.014 in outer race, 6 o'clock). This is a KNOWN LIMITATION, root-caused rather than excused:

Full detail: cwru_results.md and cwru_results_notes.md.

A second KNOWN LIMITATION, on the oversized (0.028 in) defect class -- race mislocalization, not a missed fault:

Full analysis: REVIEW_PACKET_blind_test_A.md.

BEARING DIAGNOSIS -- MFPT (Machinery Failure Prevention Technology)

Rig files:

Committed inner/outer-race diagnosis correct
17 / 17
False positives on healthy baselines
0 (the last one cleared by the amplitude floor)

Real-world field bearings (3 files), scored by a two-outcome rule -- a report passes either by committing the correct fault, OR by honestly reporting uncertainty and naming the measurement that would resolve it. A confident wrong answer and a silent clean bill both fail.

PASS 1 / 3.

WIND TURBINE -- 50-day run-to-failure timeline

Trend layer (Layer 4)
MET -- the rising trend is detected and reported.
Statistical baseline (L2)
NOT EVALUABLE -- the Welford baseline never armed (weight peaked at 29.74 against a 30-reading minimum).
Bearing fault ID (Layer 5)
BLOCKED -- see below.
Chronological reports
4 regenerated on the live path (RUN v5).

Bearing fault identification is blocked on a data gap, not a code gap: the roller count of the SKF 32222 J2 bearing is not obtainable from a citable source. SKF publishes the envelope (110 x 200 x 56 mm) and contact angle (15.6 deg) but not the roller complement; the primary literature is paywalled. Roller count drives BPFI by roughly 18% across plausible values -- six times the frequency match tolerance -- so inventing it would produce a confident meaningless answer. The item stays blocked and the reports say "no significant findings" rather than guess.

IMBALANCE AND MISALIGNMENT -- MAFAULDA

Healthy files:

Clean (no fault of any kind reported)
6 / 10 (was 1 / 10)

That improvement is the guard story. Three successive guards removed false bearing calls without costing a single true positive:

Imbalance detection rate
0 / 21
Misalignment detection rate
9 / 30

KNOWN LIMITATION -- imbalance requires phase verification. Committed imbalance on acceleration-only data with axial cross-talk requires phase verification; such cases report at differential rather than as a committed diagnosis. The gate constants above are derived from fixtures with known ground truth, and on this dataset they are more conservative than the imbalance signal present, so imbalance is not committed here. The 1x amplitude does rise monotonically with added mass on these files -- the signal is real; the gate deliberately will not commit to it from a single acceleration channel without phase.

SEVERITY REPORTING -- ISO 20816

ISO 20816 severity is a velocity judgement. When a reading is acceleration-only, the reports state severity as "unrated", carry an explicit Severity & Coverage boundary naming what was and was not assessed, and recommend the broadband velocity measurement that would establish it. They do NOT name a severity zone.

Verified on the live product path, not just in tests: of 16 reports regenerated on 2026-07-22, every acceleration-only report carried "unrated"/"not assessable" plus the velocity follow-up, with ZERO ISO-zone claims (grading: outputs/regen_grading.md, 16/16 PASS). The consistency gate also now checks the published PROSE, not just the model's structured echo block: a fault named as the diagnosis must be a finding the analysis actually committed, at the tier the prose claims, and a confidence word next to a fault must equal its computed confidence. A no-findings reading gets an explicit report shape ("Committed diagnosis: none -- parameters within normal range" plus what was screened), so a clean machine is reported as a positive result rather than pressuring the draft to invent one.

RESOLVED (Session D): a healthy-baseline report that had asserted a committed fault the analysis did not produce -- the echo block was honest while the prose was not -- is now caught by the prose-level fault check, retried, and (if it recurs) degraded. Reproduced as a regression test against the fake client.

MFPT cross-rig + real-world field validation (per-file detail) · Sample drafted report (synthetic test set)