Proof chain active issues index

Surface callouts from the proof chain in a file-organized index at the top of PROOF_CHAIN.md so agents can immediately find relevant issues when scoping work on specific files. Currently callouts are captured but buried in chronological entries — finding issues for `scan-engine.ts` requires reading through all history hoping to spot mentions.

verdict PASSscore 16 / 16findings 6 (0 risk · 1 debt · 5 obs)duration 1h 1mrejection cycles 0shipped Apr 17, 2026

Pipeline timeline

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

Think
8m
Plan
8m
Build
45m
Verify
0m

Assertion ledger

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

IDSaysMatcher
A001File references with line numbers are extracted from callout textverifiedok
A002File references with line ranges are extractedverifiedok
A003Filenames without line numbers are extractedverifiedok
A004Multiple file references in one callout are all extractedverifiedok
A005Callouts without file references return an empty arrayverifiedok
A006Various file extensions are recognizedverifiedok
A007Callouts are grouped under file headingsverifiedok
A008Callouts without file refs appear under Generalverifiedok

Findings 6 total

obspackages/cli/src/utils/proofSummary.tsclosed
Hard truncation at 100 characters without ellipsis — proofSummary.ts:361 uses `substring(0, 100)` which can cut mid-word. Adding `+ '…'` when truncated would improve readability. Minor — the active issues index is a developer tool, not user-facing output.
obspackages/cli/src/utils/proofSummary.tsclosed
File path segments lost in extractFileRefs — proofSummary.ts:253 regex uses `\b` word boundary which won't match after `/`. Callouts mentioning `src/utils/index.ts` will group under `index.ts`, potentially merging unrelated files from different directories. In practice, callout text from verify reports typically uses bare filenames (e.g., "Dead logic in projectKind.ts:105"), so this is dormant but worth knowing if callout format evolves.
obspackages/cli/src/commands/work.tsclosed
ProofChain interface duplicated in three locations — work.ts:661, proof.ts:29, and now proofSummary.ts has `ProofChainEntryForIndex`. The gotcha explicitly warned about this. The builder chose a narrow projection interface rather than importing the full type — defensible, but the duplication count is growing. Consider consolidating in a future cycle.
debtpackages/cli/tests/utils/proofSummary.test.tsclosed
A009 cap test doesn't verify WHICH callouts were dropped — proofSummary.test.ts:550-564 creates 25 identical-structure callouts and asserts count is 20, but doesn't verify the 5 dropped are the oldest. The separate "takes most recent callouts when capping at 20" test (line 691) does verify this. Together they provide full coverage, but A009 alone would pass even if the implementation kept the oldest instead of the newest.
obspackages/cli/tests/utils/proofSummary.test.tsclosed
A012 heading position test is fragile — proofSummary.test.ts:606 asserts `output.indexOf('# Active Issues') === 0`. If the function ever adds a leading newline or BOM, this breaks. The contract says "contains", but the test asserts position. Stricter than required — not wrong, but fragile.
+1more findings

Integrity seal

scopesha256:6b683abb02438...
contractsha256:d6596f99bfa98...
plansha256:52dc312de7336...
specsha256:86dfda47c216e...
build-reportsha256:05aecb3851068...
audit cmd$ ana proof audit proof-chain-active-issues   → all hashes match