Proof System Near-Term — Learn Infrastructure Foundation

Fix the infrastructure that makes Learn sessions slow, error-prone, and wasteful. Six changes that each address a verified problem from 3 Learn sessions. The proof commands have push error handling that confuses Learn, a pre-commit hook that wastes 30s per close on JSON files, severity counts that lie, duplicated search loops, an audit command without filters, and a template missing critical guidance.

verdict PASSscore 27 / 27findings 8 (1 risk · 2 debt · 5 obs)duration 1h 22mrejection cycles 0shipped May 5, 2026surface cli

Pipeline timeline

Intent to proven code in 1h 22m across Think, Plan, Build, and Verify.

Think
18m
Plan
12m
Build
45m
Verify
7m

Assertion ledger

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

IDSaysMatcher
A001Push failure triggers a pull-then-retry before giving upverifiedok
A002Commit failure clearly tells the user changes were not savedverifiedok
A003Lesson command retries push the same way close doesverifiedok
A004Promote command retries push the same way close doesverifiedok
A005Strengthen command retries push the same way close doesverifiedok
A006Commits touching only proof chain files skip the full build checkverifiedok
A007Commits touching source code still run the full build checkverifiedok
A008Health severity counts exclude closed and promoted findingsverifiedok

Findings 8 total

obspackages/cli/tests/commands/proof.test.tsclosed
A001 test verifies retry success path, not the failure message — contract matcher/value ('Push failed after retry') never asserted
debtpackages/cli/tests/commands/proof.test.tspromoted
A018 uses toBeGreaterThan(0) — weak assertion; the fixture has exactly 1 unclassified finding, test should use toBe(1)
riskpackages/cli/src/commands/proof.tsclosed
pullBeforeRead calls process.exit(1) on rebase conflict without running git rebase --abort first — leaves dirty rebase state
debtpackages/cli/src/commands/proof.tsclosed
Audit severity filter uses reverse-index splice loop — O(n²) on large finding sets; Array.filter() would be clearer and faster
obs.husky/pre-commitclosed
Pre-commit filter also skips for .claude/-only commits — broader than contract A006 specifies (only mentions .ana/). Pragmatic but unspecified.
+3more findings

Integrity seal

scopesha256:48cc19bdccc32...
contractsha256:94a2f43a41e4c...
plansha256:04359a4747725...
specsha256:41709e44d2a28...
build-reportsha256:20d1b8232c6cb...
build-datasha256:5fda30a79c825...
verify-reportsha256:e64dfcbc5e724...
verify-datasha256:3df6bca87b6bc...
audit cmd$ ana proof audit proof-system-near-term   → all hashes match