02
Two questions, not one — and they’re different jobs
The deepest thing the judges caught. Keeping these two apart is the whole ballgame.
The seam rule (the constitution’s law, applied to our own new frame): nothing grades itself. Axis 1 is the projector checking its own work — so the fidelity verdict must rest on Axis 2, which is anchored to the outside world.
~90% built
Axis 1 · Projection integrity
“Did the shipped site come faithfully from the genome?” Re-project the genome, check the shipped bytes match. Proves
no tampering + needs determinism. But it’s the projector grading its own output over its own input — so it is structurally
blind to whether a transform is correct. A buggy strip corrupts bytes identically on both sides and passes.
↘ go deeper — the machinery
Claim: deploy_bytes ≡ produce(genome). Already on disk: the genome-only-write gate compares the shipped tree against a re-projection (produce() = projectPageWithFacts, produce.ts:774), per-edit via witness leaf/complement, per-unedited-file via verbatim-resource equality. Not an output-vs-source diff. Residual blind spot: corruption of un-anchored served bytes by an HTML transform (T1–T5, produce.ts:776). Determinism: sole non-identical file is witnessId (produce.ts:1273), a wall-clock build-id in a _-prefixed sidecar already excluded from the served digest by isInternalIlDeploySidecar (proof-lineage.ts:82).
↓ the fidelity verdict rests here ↓
the trust root
Axis 2 · Provenance fidelity
“Does the genome faithfully hold what the browser actually received at capture — plus edits we made on purpose?” Anchored to
external reality: the actual bytes the site served at capture. This is the only leg that isn’t self-grading. Every fact resolves to exactly one of three receipts —
capture,
attributed-edit, or
ratified-transform — or it fails closed.
↘ go deeper — the three-kind receipt
capture: atom fold.byte_ref + recorder, byte-anchored to the manifest-pinned captured page, re-hashable vs manifest.json sha256. edit: attributed (+ eventually signed) lineage entry (editId, actor, reason, before/after). transform: registered/ratified declaration or RAR id. noSelfCertification: consumers re-hash, never trust the stamp. This is why the SR7 blank-slider defect fails closed by construction — disposition:"synthesized" is none of the three kinds, so it has no receipt, so it’s red. No hand-written “check for synthesized” rule needed.
↓
keep, scoped
The world-facing eye · completeness
A genome-internal frame can’t see a fact that was never captured (the blank-slider defect: nothing tampered, something never there). So we keep one check that loads the shipped site and the still-live original and confirms we didn’t silently lose something real. Completeness, not byte-diff. This is the external judge the “nothing-grades-itself” law demands — and it’s your Call ②.
03
Why this is right — in one line
The genome is the truth; the website is one projection of it; so we certify against the truth, not against a guess at the truth reconstructed from a photograph of it. The elaborate reconstruction — which had to guess which reference to compare against and re-enumerate every legitimate strip we make — goes away. What replaces it is already ~90% built. The work is finishing the honest wiring, not inventing a new machine.
05
The build — the amendments the judges named
Six increments, deduplicated across the three judges. Most are small; several fold in work we already did or already have on disk. Sequenced so a truthful certificate can mint now (Call ④).
Phase 0 · honest cert now
A1 determinism + A2 honest labels
Kill the build-timestamp in served bytes (one line) & pin the projector’s external inputs. Relabel “signed”→“attested” until the signing chain is wired. Unblocks a truthful fairfax certificate.
Phase 1 · fidelity depth
A3 projector-correctness + A6 full enrollment + the world-facing eye
Close the “strips cancel ≠ strips correct” gap; enroll the whole genome as a truth class so the three-kind receipt guards everything; retain the completeness judge. The trust root.
Phase 2 · editing authority
A4 canonicalize facts + A5 real accessor-derivation
One canonical record per fact (cures the 842); replace the accessor grep with a Plato-backed AST derivation before resolve-by-role scales to ~919 readers. Justified by editing, not by the cert.
↘ go deeper — all six amendments with file:line
A1 Determinism + input sandbox: hash-derive/omit witnessId (produce.ts:1273); run two-run byte-equality on the servingSurface-only path the CLI probe skipped; pin HAR (produce.ts:733) + CAS-authority/url-map/genesis-config so “≡ produce(genome)” isn’t secretly “≡ produce(genome + hidden external state).”
A2 Receipt-authentication honesty: until rarSignatureChain (il-certify.ts:1479) is wired + the zero-placeholder transform signature (il-certify.ts:1628) replaced, label transform/RAR provenance attested-only. Edit-receipt editId hash-recompute is tamper-evidence, not unforgeability; residual trust root = repo-write-access + the Ed25519 cert key (external, uncommitted, il-certify.ts:2339).
A3 Projector-correctness gap: extend transform-recompute to the HTML strip chain, OR prove-complete the delegation (genesis-fidelity catches over-strip of anchored facts; Lane E zero-external catches leaks; the world-facing eye catches the middle). Resource transforms already fail closed (BLOCKED_TRANSFORM_RECOMPUTE_MISMATCH, assert-resource-byte-integrity.ts:54) but 0 fairfax rows exercise it & it doesn’t cover the 757 WP + 354 UserWay HTML strips.
A4 Fact canonicalization: one canonical record per fact; retire/subordinate the 842 duplicate twins.
A5 Real derived-accessor derivation: replace deriveAccessors’ literal-token grep (char-scanner bug + hand-list carve-out) with Plato-backed AST/reach-graph derivation before enforcing resolve-by-role across ~919 readers.
A6 Complete enrollment: enroll the whole genome (today: ajax-captured-body only, 1 of N); the three receipt kinds are the discriminator; clear the 48 unreceipted resource rows.