Findings Lifecycle Foundation
The proof chain records intelligence but can't act on it. Verify produces findings every pipeline run. Those findings sit in a flat list with no lifecycle state — no way to distinguish "needs attention" from "already handled," no way to mark stale observations, no way to classify informational upstream findings separately from actionable code/test findings. Agents consuming `ana proof context` receive 82 undifferentiated findings including observations about deleted files, absent code anchors, and superseded older observations alongside genuine active findings.
verdict PASSscore 31 / 31findings 6 (0 risk · 2 debt · 4 obs)duration 1h 8mrejection cycles 0shipped Apr 27, 2026
Pipeline timeline
Intent to proven code in 1h 8m across Think, Plan, Build, and Verify.
Think25m
Plan25m
Build18m
Verify0m
Assertion ledger
31 claims, each independently verified. Showing 8 — show all →
| ID | Says | Matcher | |
|---|---|---|---|
| A001 | Each proof chain entry stores its findings with the renamed field | verified | ok |
| A002 | Findings can have a lifecycle status: active, lesson, promoted, or closed | verified | ok |
| A003 | The old 'callouts' field name is removed from TypeScript type definitions, variable names, and interface names. The parser regex matching ## Callouts in verify report markdown and test fixture strings containing that markdown heading are intentionally retained. | verified | ok |
| A004 | Chain health stats include counts for each finding status | verified | ok |
| A005 | Chain health stats include maintenance activity counts when maintenance occurred | verified | ok |
| A006 | Existing findings without a status are treated as active during backfill | verified | ok |
| A007 | Findings from upstream observations are classified as lessons | verified | ok |
| A008 | New code and test findings start with active status | verified | ok |
Findings 6 total
obspackages/cli/src/commands/work.ts→ closed
Dead ternary on new finding status: `packages/cli/src/commands/work.ts:810` — `(c as { category: string }).category === 'upstream' ? 'active' : 'active' as const` — both branches evaluate to `'active'`, making the expression a no-op. The correct assignment happens at lines 818-824. This is dead logic that should either be removed (let lines 818-824 handle it alone) or corrected to `'lesson' : 'active'` and the redundant loop removed.
obspackages/cli/src/utils/proofSummary.ts→ closed
Redundant status filter in Hot Modules: `packages/cli/src/utils/proofSummary.ts:535-536` — double-checks `finding.status` both as truthy and not-undefined, then re-checks on the next line. A single `if (finding.status !== 'active' && finding.status !== undefined) continue;` would be clearer.
debtpackages/cli/src/utils/proofSummary.ts→ closed
Dashboard duplicates Active Issues logic: `packages/cli/src/utils/proofSummary.ts:566-616` — reimplements the collection, filtering, capping, and file-grouping from `generateActiveIssuesMarkdown` (lines 385-473). The format differs (### vs ## headings, no truncation), but extracting shared helpers for the filtering and grouping would reduce the ~50 lines of duplication.
obspackages/cli/tests/commands/work.test.ts→ closed
A015/A016 edge cases not behaviorally exercised: `packages/cli/tests/commands/work.test.ts:1278` — the supersession test proves the core mechanism but doesn't include an unresolved-basename finding (to prove A015's skip) or two same-entry findings with matching file+category (to prove A016's guard). The code guards are trivial and correct by inspection, but the test coverage gap means a regression in those guards wouldn't be caught.
debtpackages/cli/tests/commands/work.test.ts→ closed
A024 warning test doesn't trigger the warning: `packages/cli/tests/commands/work.test.ts:1372` — the test is tagged `@ana A024` but only asserts the entry has `result === 'PASS'`. The UNKNOWN warning path is unreachable through `completeWork` because of pre-validation. A direct `writeProofChain` test with an UNKNOWN-result proof object would exercise the actual warning.
+1more findings
Integrity seal
scopesha256:8c307761a591b...
contractsha256:7e78e329cd74f...
plansha256:a47449633ff62...
specsha256:3587d5e411c01...
verify-reportsha256:195c7c1fb835c...
audit cmd$ ana proof audit findings-lifecycle-foundation → all hashes match