Web proof page — Provenance & Session Attestation

The web proof page (`website/app/docs/proof/[slug]/page.tsx`) is the product's signature public artifact — the data nobody else can produce. It renders Hero → Timeline → Assertion Ledger → Findings → Integrity Seal, but renders **none** of the process/behavioral data the 1.3.0 proof schema started producing: Provenance, Session Attestation, or the verdict-veto state. The CLI (`ana proof <slug>`) renders all of it, and the shipped prose (`website/content/docs/guides/reading-a-proof.mdx`) describes all of it — including the literal claim that "the proof page on the docs site shows the same data with more detail." That sentence is currently an over-claim. The web page must catch up to the prose and the CLI.

verdict PASSscore 28 / 28findings 6 (0 risk · 2 debt · 4 obs)duration 2h 12mrejection cycles 0shipped Jul 1, 2026surface website

Pipeline timeline

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

Think
7m
Plan
12m
Build
13m
Verify
7m

Assertion ledger

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

IDSaysMatcher
A001The provenance view lists one row for every pipeline sessionverifiedok
A002Each session's cache figure combines cache-create and cache-read tokensverifiedok
A003The total cost is the sum of the priced sessionsverifiedok
A004The totals row reports how many sessions the run hadverifiedok
A005Code churn adds up the lines changed across all touched filesverifiedok
A006The completeness check reports whether every expected session was capturedverifiedok
A007Session attestation counts how many claims were unverifiable per agentverifiedok
A008Session attestation shows how many of an agent's claims were actually checkedverifiedok

Findings 6 total

debtwebsite/lib/__tests__/docs-data/provenance.test.tsscope
Markdown helpers asserted only by length, not content — format regressions (n/a total, churn line, separators) would pass unnoticed
debtwebsite/lib/docs-data/provenance.tsmonitor
The all-unpriced TOTAL='n/a' branch is never exercised — unpricedProcess() keeps session 0 priced, so totals.costUsd is never 0 while unpriced>0
obswebsite/components/docs/proof/ProvenanceTable.tsxmonitor
Honest-unpriced path (n/a cost cell + n/a total) is dormant in the entire 210-entry corpus — 0 unpriced sessions, so the feature is correct and unit-tested at session level but unexercised end-to-end
obswebsite/components/docs/proof/SessionAttestation.tsxmonitor
JSX components (ProvenanceTable, SessionAttestation) have no automated tests for palette/positioning (AC4/AC5/AC6 visual dimension) — env limitation acknowledged in spec; verified by build success + code read only
obswebsite/components/docs/proof/SessionAttestation.tsxacknowledge
JSDoc comment contains an &apos; HTML entity inside a plain JS block comment (ledger&apos;s) — unnecessary escaping, renders literally in source
+1more 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
ana44247.1k20.2k787.3k$1.36
plan82377.4k47.4k3.2M$3.71
build157728.4k60.5k6.5M$5.60
verify69327.4k26.4k1.6M$2.06
TOTAL 4 sessions$12.73 (table 2026-06-14)
churn 10 files · +1281/−3
completeness ✓ complete (plan 1/1 · build 1/1 · verify 1/1)

Session attestation

How each agent session behaved, coverage-aware. Evidence, not a gate — unverifiable is honest abstention, not a failure.

core v0.4.0 · framework anatomia
plan · 39 claims
1 satisfied · 0 violated · 38 unverifiable
coverage 1/39 checked · 38 unverifiable
ana-plan:skill:testing-standards unverifiable (absent-signal)
contract:file-scope:website/lib/docs-data/types.ts unverifiable (channel-coverage-incomplete)
contract:file-scope:website/lib/docs-data/provenance.ts unverifiable (channel-coverage-incomplete)
mandate sha256:001351b68c… · transcript sha256:45f628334a…
⚠ incomplete coverage
build · 39 claims
1 satisfied · 9 violated · 29 unverifiable
coverage 10/39 checked · 29 unverifiable
ana-build:verify-independence unverifiable (channel-coverage-incomplete)
contract:file-scope:website/lib/docs-data/types.ts violated (predicate-not-matched)
contract:file-scope:website/lib/docs-data/provenance.ts violated (predicate-not-matched)
mandate sha256:014bee31df… · transcript sha256:a8909afcf2…
⚠ incomplete coverage
verify · 42 claims
2 satisfied · 0 violated · 40 unverifiable
coverage 2/42 checked · 40 unverifiable
ana-verify:verify-independence unverifiable (channel-coverage-incomplete)
ana-verify:no-code-branch-mutation:git-rebase unverifiable (command-unresolvable)
ana-verify:no-code-branch-mutation:git-push---force unverifiable (command-unresolvable)
mandate sha256:1ce03dbac5… · transcript sha256:169e66e418…
⚠ incomplete coverage
verdict veto: not applied — verify did not read build_report.md
veto is forward-only; pre-veto verdicts were self-reported.

Integrity seal

scopesha256:d08f2a3b464f6...
contractsha256:05c3fdedae3f4...
plansha256:393294f8b33a2...
specsha256:2499a11f3d0c2...
build-reportsha256:e9a219348c522...
build-datasha256:48321b03bf7dc...
verify-reportsha256:9449fb582c74d...
verify-datasha256:7caa3544a6d01...
audit cmd$ ana proof audit web-proof-provenance-attestation   → all hashes match