Proof Command UX

The proof system computes quality intelligence — severity classifications, suggested actions, promotion candidates, trend trajectories. The CLI commands that surface this data (`ana proof audit`, `work complete`) show the data but don't tell developers what to do with it. "71 active findings across 23 files" is a number. "5 risk, 4 promote, 9 closeable" is a decision surface. "Health: trend worsened" is a fact. "Health: trend worsened → ana proof audit" is a nudge. Two display additions (~25 lines of production code) that transform proof output from data dumps into action surfaces.

verdict PASSscore 20 / 20findings 5 (0 risk · 1 debt · 4 obs)duration 2h 30mrejection cycles 0shipped Apr 30, 2026surface cli

Pipeline timeline

Intent to proven code in 2h 30m across Think, Plan, Build, and Verify.

Think
25m
Plan
25m
Build
117m
Verify
7m

Assertion ledger

20 claims, each independently verified. Showing 8 — show all →

IDSaysMatcher
A001Audit shows a severity breakdown of active findingsverifiedok
A002Audit severity counts only come from active findingsverifiedok
A003Severity summary shows zero-count buckets as absent, not zeroverifiedok
A004Audit shows an action breakdown of active findingsverifiedok
A005Action summary uses the correct label format with closeable hintverifiedok
A006Findings with unknown severity show as unclassified in the summaryverifiedok
A007When all findings are unclassified, the summary lines are hiddenverifiedok
A008Skipping summary lines does not break the rest of the audit outputverifiedok

Findings 5 total

debtpackages/cli/tests/commands/work.test.tsclosed
A013 conditional assertion passes vacuously when health line absent — if (output.includes('Health:')) guard means zero assertions fire when improving trend doesn't produce a health line
obspackages/cli/tests/commands/proof.test.tsclosed
A002 lacks negative proof of active-only counting — fixture has only active findings, no closed finding to prove exclusion
obspackages/cli/src/commands/proof.tsclosed
Unknown severity values get own bucket instead of 'unclassified' as spec says — only '—' maps to unclassified, other unknowns display raw
obspackages/cli/src/commands/proof.tsclosed
SEVERITY_ORDER duplication still present — sevOrder inline array at line 1026 is correct local choice but broader duplication across audit/findings blocks remains
obsclosed
Contract A013 assertion weaker than intent — not_contains '→' on stdout is trivially true when health line absent, doesn't prove nudge suppression on informational triggers

Integrity seal

scopesha256:d4141207162a0...
contractsha256:fcb0a19b6b913...
plansha256:d0813a350687b...
specsha256:892e2f0df23f6...
build-reportsha256:caec4d9cf7b47...
build-datasha256:f50136efe30de...
verify-reportsha256:fac04d46aef11...
verify-datasha256:16b0aafda8579...
audit cmd$ ana proof audit proof-command-ux   → all hashes match