Verifier Verdict Honesty (light) — the PASS/FAIL verdict stops grading itself

Make Anatomia's PASS/FAIL verdict mean what the product says it means. Today the headline verdict is regex-scraped from a prose `**Result:**` line the verify *model* typed — so the brand claim ("trust the bytes, not the model") is, at the verdict itself, still trust-the-model. The whole product is positioned on "Verify never grades its own homework"; the verdict is the one place that promise is currently only *hoped*.

verdict PASSscore 29 / 29findings 9 (0 risk · 4 debt · 5 obs)duration 3h 8mrejection cycles 0shipped Jun 17, 2026surface cli

Pipeline timeline

Intent to proven code in 3h 8m across Think, Plan, and 2 Build→Verify phases.

Think
22m
Plan
26m
Build 1
79m
Verify 1
8m
Build 2
28m
Verify 2
7m

Assertion ledger

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

IDSaysMatcher
A001The verifier's instructions no longer tell it to read the build reportverifiedok
A002The Codex verifier's instructions also no longer tell it to read the build reportverifiedok
A003The verifier is still told it must never read the build reportverifiedok
A004The verifier can still check untested work by inspecting the sourceverifiedok
A005The shipped and in-repo copies of the verifier definition stay identicalverifiedok
A006A clean PASS verdict stays PASSverifiedok
A007A PASS that contradicts the verifier's own unsatisfied row is overridden to FAILverifiedok
A008The override explains which unsatisfied row contradicted the PASSverifiedok

Findings 9 total

debtpackages/cli/src/utils/verdict.tsmonitor
Circular import between verdict.ts and proofSummary.ts — verdict.ts imports parseComplianceTable, proofSummary.ts imports deriveVerdict
debtpackages/cli/tests/templates/agent-proof-context.test.tsmonitor
@ana tags A001-A005 are duplicated within agent-proof-context.test.ts (prior merged contract + this contract) — tag-by-id resolution is ambiguous in this file
obspackages/cli/src/utils/proofSummary.tsmonitor
deriveVerdict coerces only on an exactly-spelled 'UNSATISFIED' status; a typo'd/garbled status cell falls back to 'UNKNOWN' (proofSummary.ts:205) and will NOT gate a PASS — consistent with the self-authored honesty boundary but fragile
obspackages/cli/src/utils/verdict.tsacknowledge
deriveVerdict never coerces a PASS on DEVIATED or UNCOVERED rows — only UNSATISFIED. By design (coverage gating is the separate verifier-intent-coverage feature), but the contradiction signal is intentionally narrow
obspackages/cli/src/utils/git-operations.tsmonitor
Pre-existing lint warning (unused eslint-disable directive) in git-operations.ts:198 — not in this build's file_changes, not a regression
+4more findings

Provenance

Who ran what, and what it cost. Recomputable estimates from the shared price table — subordinate to the verdict, never gating.

model claude-opus-4-8
sessionturnstoolsinoutcachecost
ana62317.6k33.7k1.5M$2.15
plan115498.1k61.7k4.6M$4.63
build2121039.5k64.6k10.4M$7.65
verify67307.5k27.8k1.5M$2.00
build 22381159.2k77.9k14.9M$10.52
verify 279357.6k26.2k2.1M$2.33
TOTAL 6 sessions$29.28 (table 2026-06-14)
churn 21 files · +1202/−78
completeness ✓ complete (plan 1/1 · build 2/2 · verify 2/2)

Integrity seal

scopesha256:346767c2f1746...
contractsha256:4ccdd83ffe148...
plansha256:4b3d017081a60...
spec-1sha256:c42d85bbd819f...
spec-2sha256:b769eb778aba5...
build-report-1sha256:f683c4083ee32...
build-data-1sha256:8ec74f34fbdd8...
verify-report-1sha256:4e30d37b6e81f...
verify-data-1sha256:32087fac8edf2...
build-report-2sha256:86628b364a0c1...
build-data-2sha256:a7cd69892d59c...
verify-report-2sha256:6fe13817f1507...
verify-data-2sha256:2d234f22b231f...
audit cmd$ ana proof audit verifier-verdict-honesty   → all hashes match