risc0-ed25519-verified/verification
mrwulf 4fafaab608 Round-7 F1: make model/template correspondence SEMANTIC, and fail closed
THE DEFECT, as found. GPT-5.6 showed the textual classifier could report
PROVEN for a name Lean resolves to an axiom: a definition appearing only
inside a `/- -/` comment was read as real. Repairing that exposed something
larger and already live. Aeneas wraps long declarations:

    axiom
      curve25519_dalek.edwards.EdwardsPoint.Insts.CoreOpsArithNegEdwardsPoint.neg

The old scanner required keyword and name on one physical line, so it matched
nothing there and SILENTLY DROPPED the declaration — no MODEL row, no PROVEN
row, no failure. Nine to ten externals per fork had no row at all, and the
tier-A/B `neg` was missing from every committed table while the trust
documents claimed that class was machine-checked. Four pinned tables were
wrong, in four repositories, with the buttons green over them. No attacker
was required; Aeneas's own formatting did it.

The lesson is not "write a better regex". The scanner was FAIL-OPEN: input it
could not parse produced silence instead of a stop. A gate that drops what it
cannot read is worse than no gate, because the green covers a gap that is
invisible in the diff.

THE REPAIR, in three layers that each do only what they honestly can.

  · DISCOVERY stays textual, because the template cannot be imported — it
    declares the same names as the model and they would clash. It now strips
    NESTED `/- -/` blocks, reads a name that wraps to a later line, tracks
    namespace/section/end, and FAILS CLOSED: an unparseable keyword exits 2
    naming file and line.
  · Phase 0d keeps the cheap pre-compile comparison against the table.
  · Phase 2d is new and authoritative. After compilation it generates a temp
    Lean driver (the Phase 2b idiom, so no permanent module and no manifest
    churn), imports every non-template gen module, and asks env.find? what
    each external IS: kind and originating module. Model module -> MODEL;
    non-axiom in a generated module -> PROVEN; an axiom outside the model, or
    a name that does not resolve, is a failure. Lean's verdict must equal the
    committed table's, and the answer count must equal the question count so
    a truncated resolver cannot pass.

THE TABLES were regenerated and verified three ways before being committed:
an independently written second scanner agreed on 228/228 rows across the
four forks; all 47 changed rows carry file:line evidence; and the PROVEN row
was put to Lean directly — kind = def, module = CurveField.Funs.

  dalek 54 -> 64 rows   anza 42 -> 51   risc0 48 -> 57   betrusted 47 -> 56

Also corrected: `from_residual` was recorded EXTRA in every fork; the
template does demand it, so it is MODEL. anza carried a spurious `hash|EXTRA`
row from a mis-parse.

NEGATIVE-TESTED. With Phase 0d neutered so Phase 2d was the gate under test,
a PROVEN row edited to MODEL produces:

    SEMANTIC DRIFT: ...neg — table says MODEL, Lean says PROVEN

selftest-correspondence.sh grew 4 cases -> 7: GPT's comment counterexample,
the wrapped declaration that was actually live, and a fail-closed check.

WHAT THIS DOES NOT CLOSE. Phase 2d resolves names in the environment built
from gen/. It establishes what a name IS — assumption or proof, and where —
not that the extraction faithfully represents the Rust. That remains the
Charon/Aeneas trust assumption and no gate here can close it.

Certified: both buttons, all four forks, purged trees. 8/8 green, with
62/48/53/52 externals resolved by Lean and every verdict matching.
2026-08-02 02:24:15 +02:00
..
gen Coherence pass 4 (the closing pass): 4-tier apex documentation + hygiene 2026-07-06 04:01:18 +02:00
Proofs Account for every constant the kernel sees, by set containment 2026-08-01 16:10:59 +02:00
AUDIT-MANIFEST.txt verification: bind the statements, the specifications, and the model (P1-a) 2026-07-29 00:38:20 +02:00
check-scalar.sh verification: close the two-button seam and level up the scalar button (P0-b) 2026-07-30 12:30:29 +02:00
check.sh Round-7 F1: make model/template correspondence SEMANTIC, and fail closed 2026-08-02 02:24:15 +02:00
CurveField.llbc PHASE 2 COMPLETE ON RISC0: THE FULL POINT-LEVEL LIFT 2026-07-06 01:29:22 +02:00
CurveSig.llbc PHASE 2 COMPLETE ON RISC0: THE FULL POINT-LEVEL LIFT 2026-07-06 01:29:22 +02:00
extract.sh P2-c: classify and pin the extraction boundary 2026-07-31 17:53:31 +02:00
GEN-MODEL.sha256 verification: bind the statements, the specifications, and the model (P1-a) 2026-07-29 00:38:20 +02:00
HARNESS.sha256 Round-7 F1: make model/template correspondence SEMANTIC, and fail closed 2026-08-02 02:24:15 +02:00
inventory-allowlist-scalar.txt verification: close the two-button seam and level up the scalar button (P0-b) 2026-07-30 12:30:29 +02:00
inventory-allowlist.txt verification: pin the whole declaration surface (P1-b) 2026-07-30 01:20:19 +02:00
inventory_gate.sh verification: pin the whole declaration surface (P1-b) 2026-07-30 01:20:19 +02:00
lean-guard Coherence pass 3: post-apex accuracy sweep, hygiene, guard ladder 2026-07-05 11:48:19 +02:00
model-correspondence.py Round-7 F1: make model/template correspondence SEMANTIC, and fail closed 2026-08-02 02:24:15 +02:00
MODEL-CORRESPONDENCE.txt Round-7 F1: make model/template correspondence SEMANTIC, and fail closed 2026-08-02 02:24:15 +02:00
selftest-auditonly.sh verification: --audit-only mode, and the guard that keeps it from becoming evidence (T1) 2026-07-30 19:16:20 +02:00
selftest-axgate.sh verification: --audit-only mode, and the guard that keeps it from becoming evidence (T1) 2026-07-30 19:16:20 +02:00
selftest-correspondence.sh Round-7 F1: make model/template correspondence SEMANTIC, and fail closed 2026-08-02 02:24:15 +02:00
selftest-harness.sh verification: pin the harness, the audit drivers and the policy files (P1-c) 2026-07-29 20:13:00 +02:00
selftest-inventory.sh verification: pin the whole declaration surface (P1-b) 2026-07-30 01:20:19 +02:00
selftest-shapes.sh P2-a': can a declaration hide from the inventory walker? 2026-07-31 11:56:05 +02:00
selftest-statements.sh verification: --audit-only mode, and the guard that keeps it from becoming evidence (T1) 2026-07-30 19:16:20 +02:00
selftest-tiers.sh P2-a: attack the arithmetic/apex tier boundary itself 2026-07-31 02:39:34 +02:00