Proof Health V2
The health dashboard is the proof system's face. It's what a founder screenshots for their co-founder, what a developer checks before scoping work, what Learn reads at startup. Three gaps: the stats don't tell the full story (no verification effectiveness, no pipeline velocity), the timing data lies (think and plan show identical values), and nothing stops failed work from entering the proof chain. Three phases, one goal: the dashboard tells the truth and the proof chain guards its own integrity.
verdict PASSscore 31 / 31findings 14 (0 risk · 6 debt · 8 obs)duration 2h 43mrejection cycles 0shipped May 2, 2026surface cli
Pipeline timeline
Intent to proven code in 2h 43m across Think, Plan, Build, and Verify.
Think28m
Plan28m
Build128m
Verify8m
Assertion ledger
31 claims, each independently verified. Showing 8 — show all →
| ID | Says | Matcher | |
|---|---|---|---|
| A001 | Quality section replaces the old Trajectory heading | verified | ok |
| A002 | Hot Spots section replaces the old Hot Modules heading | verified | ok |
| A003 | Promote and Recurring sections are merged into Next Actions | verified | ok |
| A004 | Old Promote section heading no longer appears | verified | ok |
| A005 | Old Recurring section heading no longer appears | verified | ok |
| A006 | Verification section shows first-pass rate as a percentage | verified | ok |
| A007 | Verification section shows total issues caught before shipping | verified | ok |
| A008 | A project with zero rejections shows 100% first-pass rate | verified | ok |
Findings 14 total
debtpackages/cli/tests/commands/proof.test.ts→ closed
A014 cap test uses toBeLessThanOrEqual(5) instead of toBe(5) — passes even if cap logic is broken and returns 0 items
debtpackages/cli/src/utils/proofSummary.ts→ closed
computeFirstPassRate exported but never imported outside proofSummary.ts — only called internally by computeHealthReport
obspackages/cli/tests/commands/proof.test.ts→ closed
No direct unit tests for computeFirstPassRate or computePipelineStats — only covered through integration tests via runProof(['health'])
obspackages/cli/src/utils/proofSummary.ts→ closed
computePipelineStats maps timing.think to 'scope' display label (line 951: think ?? scope) — naming mismatch between data field and display is intentional per spec but may confuse future maintainers
obs→ closed
Spec predicted ~18 new tests but only ~11 were added (1773 vs 1762 baseline) — edge case tests for zero-entry verification, empty timing fields, and mixed promote+recurring sorting exist but inline, reducing count
+9more findings
Integrity seal
scopesha256:d2fe97db3061e...
contractsha256:793cfcd0e7a8a...
plansha256:2c2b593cab11b...
specsha256:673182936f46b...
build-reportsha256:be0c129506f80...
build-datasha256:af067af74876b...
verify-reportsha256:cf02492523f93...
verify-datasha256:6fbf2cf8ef4fe...
audit cmd$ ana proof audit proof-health-v2 → all hashes match