Upstream Finding Resolution

When Verify runs `ana proof context` and sees active findings for files it's reviewing, it can note that a finding has been resolved by the current build. These observations enter the proof chain as upstream findings with `status: 'lesson'`. But the original finding stays active because nothing connects the upstream claim to the original. Learn must manually read the upstream finding's prose, identify which original it references, verify the claim, and close it with `ana proof close`.

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

Pipeline timeline

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

Think
17m
Plan
10m
Build
22m
Verify
4m

Assertion ledger

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

IDSaysMatcher
A001Proof context output includes the finding ID for each findingverifiedok
A002Finding ID appears between category tag and anchor textverifiedok
A003Upstream findings with valid resolves arrays pass validationverifiedok
A004Findings without resolves still pass validationverifiedok
A005Non-array resolves values are rejectedverifiedok
A006Non-string elements in resolves are rejectedverifiedok
A007Invalid finding ID format in resolves produces a warningverifiedok
A008Resolves on non-upstream findings produces a warning about category mismatchverifiedok

Findings 5 total

debtpackages/cli/src/commands/work.tsclosed
work.ts duplicates resolves counting logic — JSON and console branches have identical loops
obspackages/cli/src/commands/artifact.tsclosed
artifact.ts resolves format warning iterates resolves array twice — once for type check, once for format check
obspackages/cli/tests/utils/proofSummary.test.tsclosed
A014 test uses toBeDefined() before toBe() — the toBeDefined assertion is redundant
obspackages/cli/src/utils/proofSummary.tsclosed
computeResolutionClaims findingIndex overwrites entries when same finding ID appears in multiple chain entries — last write wins, which could mask status transitions
debtclosed
proofSummary.ts continues to grow — now ~1620 lines with computeResolutionClaims addition

Integrity seal

scopesha256:2be18bf1d3b64...
contractsha256:2722c76c7160b...
plansha256:06c1ed4fce917...
specsha256:156b4281c14db...
build-reportsha256:d1f768e2e77c8...
build-datasha256:2c7f1c44b48ab...
verify-reportsha256:cb1cec784a2e3...
verify-datasha256:61bac8152e352...
audit cmd$ ana proof audit upstream-finding-resolution   → all hashes match