betrusted-ed25519-verified/verification
mrwulf 3910e7c35b lift-guard: eleven more classes, two of them regressions I introduced
Round-9 review (Claude, N1). The brief said "assume there are more"; there
were eleven, and two were introduced by the round-8 fix itself.

INTRODUCED BY THE ARITHMETIC TOKENISATION — the round-8 fix for a false
NEGATIVE created two false POSITIVES. The interior of `$(( ))` was tokenised
with `[A-Za-z_][A-Za-z0-9_]*`, which starts matching at the letter-bearing tail
of a numeric literal:

    echo $((0x1F))   ->  FATAL: reads x1F
    echo $((1e3))    ->  FATAL: reads e3

Now anchored so a match cannot begin after a digit or word character.

INTRODUCED BY THE INDIRECT-EXPANSION REFUSAL, and this is the one that matters.
`${!...}` has three meanings and `re.search(r'\$\{!')` cannot tell them apart:

    ${!name}                indirect expansion    — genuinely unanalysable
    ${!arr[@]} ${!arr[*]}   array KEY expansion   — ordinary
    ${!prefix*} ${!prefix@} variable-NAME listing — ordinary

A refusal is the most expensive verdict this tool has — it hard-fails the lift
— and it was firing on two ordinary constructs with a diagnostic naming a
feature they do not use. The reviewer found it LIVE: ltl-accumulator
check.sh:274 is `for cert in "${!CONES[@]}"`, so the day lift-guard is ported
there, any lift covering that line would have refused. The four forks carry
five arrays each, so it was one ordinary edit away from firing there too.
Now matched only for genuine `${!name}`.

SEVEN MORE BINDING FORMS the driver uses and the guard demanded anyway:

    let FOO=1 · (( FOO = 1 )) · BAR+=b · FOO[0]=x
    for (( i=0; i<3; i++ )) · select FOO in · getopts "o" FOO

Arithmetic contexts bind as well as read, so `(( i++ ))` and the C-style `for`
now contribute to assigns — without that, the reads-extraction added by the
round-8 fix demanded the very names those expressions assign.

Verified: all eleven silent, genuine `${!n}` still refuses, `$((X+1))` and
`((Y>0))` still caught by name, the whole round-8 matrix unchanged, a genuine
missing variable still fails, and the four lifting self-tests green in all four
forks.

The reviewer also discarded one candidate rather than report it — `i=0;
(( i++ ))` looks like a demand but is silent under driver ⊇ payload, which is
how the self-tests invoke it. That restraint is worth recording: a guard edited
twice for false alarms should not be handed a false alarm by its reviewer.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-03 21:03:35 +02:00
..
gen correspondence: a named section is not a namespace; an extra axiom is a failure 2026-08-02 21:29:54 +02:00
Proofs audit: bind the scalar statements, and make the accounting identity mean audit 2026-08-03 12:15:26 +02:00
AUDIT-MANIFEST.txt verification: bind the statements, the specifications, and the model (P1-a) 2026-07-29 00:38:22 +02:00
check-scalar.sh audit: bind the scalar statements, and make the accounting identity mean audit 2026-08-03 12:15:26 +02:00
check.sh audit: bind the scalar statements, and make the accounting identity mean audit 2026-08-03 12:15:26 +02:00
CurveField.llbc PHASE 2 COMPLETE ON BETRUSTED: THE FULL POINT-LEVEL LIFT 2026-07-06 01:53:39 +02:00
CurveSig.llbc PHASE 2 COMPLETE ON BETRUSTED: THE FULL POINT-LEVEL LIFT 2026-07-06 01:53:39 +02:00
driver-allowlist.txt audit: bind the scalar statements, and make the accounting identity mean audit 2026-08-03 12:15:26 +02:00
extract.sh P2-c: classify and pin the extraction boundary 2026-07-31 17:53:31 +02:00
GEN-MODEL.sha256 correspondence: a named section is not a namespace; an extra axiom is a failure 2026-08-02 21:29:54 +02:00
HARNESS.sha256 lift-guard: eleven more classes, two of them regressions I introduced 2026-08-03 21:03:35 +02:00
inventory-allowlist-scalar.txt audit: bind the scalar statements, and make the accounting identity mean audit 2026-08-03 12:15:26 +02:00
inventory-allowlist.txt verification: pin the whole declaration surface (P1-b) 2026-07-30 01:20:20 +02:00
inventory_gate.sh audit: bind the scalar statements, and make the accounting identity mean audit 2026-08-03 12:15:26 +02:00
lean-guard Coherence pass 3: post-apex accuracy sweep, hygiene, guard ladder 2026-07-05 11:48:20 +02:00
lift-guard.sh lift-guard: eleven more classes, two of them regressions I introduced 2026-08-03 21:03:35 +02:00
model-correspondence.py correspondence: a named section is not a namespace; an extra axiom is a failure 2026-08-02 21:29:54 +02:00
MODEL-CORRESPONDENCE.txt correspondence: a named section is not a namespace; an extra axiom is a failure 2026-08-02 21:29:54 +02:00
SCALAR-AUDIT-MANIFEST.txt audit: bind the scalar statements, and make the accounting identity mean audit 2026-08-03 12:15:26 +02:00
selftest-auditonly.sh verification: --audit-only mode, and the guard that keeps it from becoming evidence (T1) 2026-07-30 19:16:21 +02:00
selftest-axgate.sh verification: derive lift dependencies instead of hand-keeping them 2026-08-02 13:07:28 +02:00
selftest-correspondence.sh verification: derive lift dependencies instead of hand-keeping them 2026-08-02 13:07:28 +02:00
selftest-harness.sh verification: derive lift dependencies instead of hand-keeping them 2026-08-02 13:07:28 +02:00
selftest-inventory.sh verification: pin the whole declaration surface (P1-b) 2026-07-30 01:20:20 +02:00
selftest-scalar-statements.sh audit: bind the scalar statements, and make the accounting identity mean audit 2026-08-03 12:15:26 +02:00
selftest-shapes.sh verification: derive lift dependencies instead of hand-keeping them 2026-08-02 13:07:28 +02:00
selftest-statements.sh verification: derive lift dependencies instead of hand-keeping them 2026-08-02 13:07:28 +02:00
selftest-tiers.sh verification: derive lift dependencies instead of hand-keeping them 2026-08-02 13:07:28 +02:00