Attested Context — L0 conformance fixtures

Twelve assertions across three fixtures, mapping the extension's L0 section one-to-one:

Fixture Requirements Assertions
AC-L0-001.json AC-1 negotiation · AC-6 the vouch AC1-01, AC6-01..03
AC-L0-002.json AC-2 provenance · AC-3 absent-not-masked AC2-01..02, AC3-01..02
AC-L0-003.json AC-4 audience scoping · AC-7 freshness planes AC4-01..03, AC7-01

AC-5 (mediated assembly) deliberately has no fixture assertion: whether the server queried its substrate under its own identity is not observable from the wire. It is verified by architecture review, not by transcript.

How to run

python3 runner.py --self-test              # validate the suite itself (do this first)
python3 runner.py --transcripts DIR        # evaluate a captured server transcript
python3 runner.py --list                   # print the 12 assertions

The runner is stdlib-only and never touches the network: capture a transcript first, evaluate second, so every verdict is reproducible from artifacts. A transcript directory holds the seven captured documents laid out as in golden/transcript-pass/ (a server/discover result, the public- and admin-audience tools/list results, a full and a denied tools/call result, the rejected admin call, and the issuer's published key).

A check that can fail — the controls

Golden transcripts are regenerated deterministically by golden/regenerate.py. ⚠ Its signing key is a test key derived from a public string — reproducibility is the point; it must never be used as a real issuer key.

Canonicalization (the decision of record, 2026-07-30)

bundle_hash = sha256: over the RFC 8785 (JCS) canonical form of structuredContent; the signing input is the JCS form of {bundle_hash, issued_at, issuer} — exactly those three fields. At L0 the runner implements the JCS subset for integer numbers, ASCII object keys, strings, bools, null, arrays, and objects, and refuses anything outside it (non-integer numbers, integers past 2^53−1, non-ASCII keys) rather than approximate — a wrong canonical form manufactures false hash verdicts in both directions. Full ECMAScript number formatting arrives with a vetted JCS library at L1+.

What a pass means — and what it does not

The golden pass validates the fixtures, not any server. Conformance is claimed only when a real implementation's captured transcript passes 12/12, and the claim names the transcript, the date, and the implementation version.

First passing implementation (2026-07-30, live): the reference implementation serving the public origin passes 12/12 on live-captured transcripts. An author-operated pass advances the use-alone step and is not a second-implementer signal — the suite below is the invitation.