sieve C4: a signed DDC receipt of t27core and a front-end independence verdict #7699
Description
Parent: #6488 (the compiler sieve, item C4/C5). Depends on: #5980 (the self-hosted front end that would make C4 true). Related: #6508 / #6825 (t27core DDC harness, theorem T732), #7587 / #7686 (signed corpus receipts), #7601 (R3-3 independence verdict).
Problem
Sieve filter C4 (Diverse Double-Compiling) is FALSE for t27c, and the cell says why: DDC of t27core runs (#6508, T732) and every route's stage 2 equals t27c gen-c of S, but all three routes share bootstrap/src/compiler.rs's front end (T729), so the result is back-end agreement, not an independent bootstrap. The evidence behind that sentence is a set of logs copied by hand to https://t27b-lab-production.up.railway.app/ddc6508/ on 2026-10-06. Nobody can check them against a commit, they are not signed, and nothing re-runs them when S, E or the front end moves.
What this adds
- A DDC receipt, in
specs/verified/ddc_receipt.t27. A signed record of one DDC run of t27core: the commit; sha256 of S (specs/compiler/core/t27core.t27), of E (t27c gen-c S), of the harness and of the S its data packs; the compiler's FROZEN_HASH; for each route (A gen-c + cc, B t27b, C Zig) the binary that built stage 1 (sha256 andbuilt_by), the front end that parsed S, the stage-2 sha256 and the outcome; a nonce. Its own domain line,t27-ddc-receipt-v1; judged bysigned_receipt.t27's rules. - A verdict over the routes, in the same spec, computed by T732's
ddc_verdict: DDC_CANNOT_RUN (fewer than two routes ran on S), DDC_MISCOMPILE (a route's stage 2 is not E), DDC_BACKEND_AGREEMENT (all agree, one front end), DDC_INDEPENDENT (all agree, and two routes with different front ends among them). The front-end test agrees with T729'sshared()on the modelled pairs. Today's honest answer is DDC_BACKEND_AGREEMENT. - Wiring.
t27c ddc-receipt sign|verify|due(generated logic, thin glue). A t27b lab step runs the harness on the three routes and signs a receipt only when S, E or FROZEN_HASH moved since the last signed one, published as/ddc/<sha>.receipt.json. The seed handling stays as verified: a lane verdict over two corpus receipts, and lab receipts for a requested commit (Closes #7672) #7686 left it. - The sieve cites it. The t27c C4 comment in
specs/compiler/theory/sieve.t27names the receipt; the cell stays FALSE and still maps to epic: self-host t27c -- rewrite the compiler from Rust into t27 #5980.
Done when
- The spec has tests for every verdict (0 vacuous), its mutants are caught, it is sealed, and
t27c gen-rustoutput is wired intoddc-receipt. - On the t27b lab, in a private dir with a throwaway key, the branch's lab step signs a receipt of the current master commit;
verifyaccepts it, refuses a doctored copy, says DDC_BACKEND_AGREEMENT for the real run and DDC_MISCOMPILE for a signed run with a doctored stage-2 hash. - Hand-written foreign lines fit master's
check_budget()andcheck_all().
Activity
verified: the DDC receipt reuses corpus_receipt's text_is, so no body…
verified: the DDC receipt reuses corpus_receipt's text_is, so no body…
t27b lab: only a master run moves /ddc/latest.receipt.json (Closes #7955