Docs / Proof Chain / web-proof-provenance-attestation 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 timelineIntent to proven code in 2h 12m across Think, Plan, Build, and Verify.
# Assertion ledger28 claims, each independently verified. Showing 8 — show all →
ID Says Matcher A001 The provenance view lists one row for every pipeline session verified ok A002 Each session's cache figure combines cache-create and cache-read tokens verified ok A003 The total cost is the sum of the priced sessions verified ok A004 The totals row reports how many sessions the run had verified ok A005 Code churn adds up the lines changed across all touched files verified ok A006 The completeness check reports whether every expected session was captured verified ok A007 Session attestation counts how many claims were unverifiable per agent verified ok A008 Session attestation shows how many of an agent's claims were actually checked verified ok
# Findings 6 total debt website/lib/__tests__/docs-data/provenance.test.ts → scope
Markdown helpers asserted only by length, not content — format regressions (n/a total, churn line, separators) would pass unnoticed
debt website/lib/docs-data/provenance.ts → monitor
The all-unpriced TOTAL='n/a' branch is never exercised — unpricedProcess() keeps session 0 priced, so totals.costUsd is never 0 while unpriced>0
obs website/components/docs/proof/ProvenanceTable.tsx → monitor
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
obs website/components/docs/proof/SessionAttestation.tsx → monitor
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
obs website/components/docs/proof/SessionAttestation.tsx → acknowledge
JSDoc comment contains an ' HTML entity inside a plain JS block comment (ledger's) — unnecessary escaping, renders literally in source
# ProvenanceWho ran what, and what it cost. Recomputable estimates from the shared price table — subordinate to the verdict, never gating.
model claude-opus-4-8
session turns tools in out cache cost ana 44 24 7.1k 20.2k 787.3k $1.36 plan 82 37 7.4k 47.4k 3.2M $3.71 build 157 72 8.4k 60.5k 6.5M $5.60 verify 69 32 7.4k 26.4k 1.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 attestationHow 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 sealscope sha256:d08f2a3b464f6...
contract sha256:05c3fdedae3f4...
plan sha256:393294f8b33a2...
spec sha256:2499a11f3d0c2...
build-report sha256:e9a219348c522...
build-data sha256:48321b03bf7dc...
verify-report sha256:9449fb582c74d...
verify-data sha256:7caa3544a6d01...
audit cmd $ ana proof audit web-proof-provenance-attestation → all hashes match