dalek-ed25519-verified/verification
mrwulf e2c5cf1d4b P2-c: classify and pin the extraction boundary
Aeneas emits a *_Template.lean naming everything the extracted code needs
from outside itself — the extraction's own statement of its boundary.
extract.sh has always said, in prose, "after regenerating, diff the template
against the hand-written file". Prose is not a gate, and the diff cannot be
one: the two files legitimately differ in almost every line, holes and
Aeneas comments against real definitions and modeling policy.

MEASURING FIRST CHANGED WHAT THIS ITEM SHOULD BE. The TODO offered two
options — enforce the diff, or pin both files — and the answer turned out to
be neither. Both files were ALREADY byte-pinned by Phase 0b. And two further
things stand here: the generated Funs.lean imports the model and CALLS these
externals, so the Lean compiler enforces their TYPES wherever the extracted
code uses them; and the per-certificate exact cones catch any external that
becomes, or stops being, an assumption anything depends on.

What none of those three sees is the CLASSIFICATION: for each name the
extraction asks for, whether this repository answers with an ASSUMPTION or
with a PROOF. That is the tier-A/B claim the documents make in prose — the
curve calls and the three curve types resolve to proven definitions rather
than axioms, because gen/CurveField/Funs.lean opens `namespace
curve25519_dalek` and so defines the very names Aeneas asks for. Nothing
checked it. A regeneration that renamed one, or a model that quietly
answered one with an axiom instead, would have left the documents claiming a
proof where the repository had an assumption.

Phase 0d recomputes the classification with model-correspondence.py
(namespace-aware, so a definition inside a namespace counts under its full
name) and requires equality with the committed MODEL-CORRESPONDENCE.txt.
UNRESOLVED — the extraction asking for something nothing here provides — is
a hard failure.

  dalek     43 MODEL   8 PROVEN   3 EXTRA
  anza      38 MODEL   0 PROVEN   4 EXTRA   (no CurveSig crate)
  risc0     36 MODEL   8 PROVEN   4 EXTRA
  betrusted 35 MODEL   8 PROVEN   4 EXTRA

selftest-correspondence.sh, five cases, negative-tested by disabling the
comparison. The case that matters is 2: a PROVEN external answered by an
axiom instead. No name changes anywhere, every byte pin still matches, and
it compiles, because the signature is unchanged — before Phase 0d nothing in
the button could tell.

Trap recorded for whoever extends it: case 3 first deleted the PROVEN rows,
which was VACUOUS on anza, since anza has none — it removed nothing, the
table still matched, and the case passed while testing nothing. It now
deletes the first row whatever its verdict AND asserts the file changed.

extract.sh now points at the gate instead of asking a human to look.

Certified by a full sweep: both buttons, all four forks, purged trees,
machine otherwise idle. 8/8 green.
2026-07-31 17:53:31 +02:00
..
gen Coherence pass 4 (the closing pass): 4-tier apex documentation + hygiene 2026-07-06 04:01:15 +02:00
Proofs verification: close the two-button seam and level up the scalar button (P0-b) 2026-07-30 12:30:26 +02:00
AUDIT-MANIFEST.txt verification: bind the statements, the specifications, and the model (P1-a) 2026-07-29 00:38:17 +02:00
check-scalar.sh verification: close the two-button seam and level up the scalar button (P0-b) 2026-07-30 12:30:26 +02:00
check.sh P2-c: classify and pin the extraction boundary 2026-07-31 17:53:31 +02:00
CurveField.llbc Phase 2, brick 3 opened: decompress extracted for real (gen green) 2026-07-05 18:04:04 +02:00
CurveSig.llbc Phase 2, brick 3 opened: decompress extracted for real (gen green) 2026-07-05 18:04:04 +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:17 +02:00
HARNESS.sha256 P2-c: classify and pin the extraction boundary 2026-07-31 17:53:31 +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:26 +02:00
inventory-allowlist.txt verification: pin the whole declaration surface (P1-b) 2026-07-30 01:20:15 +02:00
inventory_gate.sh verification: pin the whole declaration surface (P1-b) 2026-07-30 01:20:15 +02:00
lean-guard Coherence pass 3: post-apex accuracy sweep, hygiene, guard ladder 2026-07-05 11:48:17 +02:00
model-correspondence.py P2-c: classify and pin the extraction boundary 2026-07-31 17:53:31 +02:00
MODEL-CORRESPONDENCE.txt P2-c: classify and pin the extraction boundary 2026-07-31 17:53:31 +02:00
selftest-auditonly.sh verification: --audit-only mode, and the guard that keeps it from becoming evidence (T1) 2026-07-30 19:16:17 +02:00
selftest-axgate.sh verification: --audit-only mode, and the guard that keeps it from becoming evidence (T1) 2026-07-30 19:16:17 +02:00
selftest-correspondence.sh P2-c: classify and pin the extraction boundary 2026-07-31 17:53:31 +02:00
selftest-harness.sh verification: pin the harness, the audit drivers and the policy files (P1-c) 2026-07-29 20:12:57 +02:00
selftest-inventory.sh verification: pin the whole declaration surface (P1-b) 2026-07-30 01:20:15 +02:00
selftest-shapes.sh P2-a': can a declaration hide from the inventory walker? 2026-07-31 11:56:04 +02:00
selftest-statements.sh verification: --audit-only mode, and the guard that keeps it from becoming evidence (T1) 2026-07-30 19:16:17 +02:00
selftest-tiers.sh P2-a: attack the arithmetic/apex tier boundary itself 2026-07-31 02:39:34 +02:00