Proof Health V1
The developer wants to see quality trajectory across pipeline runs. `ana proof health` computes severity-weighted metrics, identifies hot modules, surfaces promotion candidates, and reports on promotion effectiveness. The `work complete` output gains a change-driven fourth line that surfaces health insights when something shifted since the last run. Health is the measurement layer that validates the severity taxonomy, informs promotion decisions, and provides the north star metric (risks/run trending down).
verdict PASSscore 40 / 40findings 5 (0 risk · 2 debt · 3 obs)duration 51mrejection cycles 1shipped Apr 30, 2026surface cli
Pipeline timeline
Intent to proven code in 51m across Think, Plan, Build, and Verify.
Think8m
Plan8m
Build36m
Verify6m
Assertion ledger
40 claims, each independently verified. Showing 8 — show all →
| ID | Says | Matcher | |
|---|---|---|---|
| A001 | Running proof health shows the number of pipeline runs | verified | ok |
| A002 | Trajectory section shows risks per run for the recent window | verified | ok |
| A003 | Trajectory section shows the lifetime average | verified | ok |
| A004 | Trajectory section shows the trend direction | verified | ok |
| A005 | Hot modules section appears in the health dashboard | verified | ok |
| A006 | Promotion candidates section appears in the health dashboard | verified | ok |
| A007 | Health JSON uses the standard four-key envelope | verified | ok |
| A008 | Health JSON results include trajectory data | verified | ok |
Findings 5 total
debtpackages/cli/src/commands/proof.ts→ closed
Hardcoded 10 in trend display instead of using MIN_ENTRIES_FOR_TREND constant. Template literal uses ${10} rather than importing and using the named constant, creating drift risk if threshold changes.
debtpackages/cli/tests/utils/proofSummary.test.ts→ closed
detectHealthChange 'detects trend improvement' unit test uses conditional assertion (if change.changed) — if change.changed is false, the expect on triggers never executes. This masks a potential false pass.
obspackages/cli/src/commands/proof.ts→ closed
Promotion candidate display has no summary truncation. Long summaries from findings (up to 1000 chars) render untruncated in terminal output. Not a crash risk but degrades terminal readability.
obspackages/cli/tests/utils/proofSummary.test.ts→ closed
Promotion effectiveness test covers only the extremes (0% reduction, 100% reduction, tracking). No test for intermediate reduction (e.g., 40%) or negative reduction (more matches than baseline).
obspackages/cli/src/utils/proofSummary.ts→ closed
Trajectory 'worsening' label can be counterintuitive with sparse classification — reports worsening on 0.1 risks/run when most findings lack severity. Algorithm is correct but label may mislead operators.
Integrity seal
scopesha256:688e88624bb63...
contractsha256:f5b7031c643f1...
plansha256:cbea6b107e7c0...
specsha256:2c0df117a47a0...
build-reportsha256:dcc05d1d53d6d...
build-datasha256:ac9d846db8704...
verify-reportsha256:4dea1ea171bda...
verify-datasha256:d1a466dcaf6da...
audit cmd$ ana proof audit proof-health-v1 → all hashes match