Skip to content

continuity(S395): the if-chain security gap resolved, three filings, and two instruments that failed their own tests - #819

Merged
bryanmaclee merged 1 commit into
mainfrom
continuity/s395-if-chain-filings
Sep 2, 2026
Merged

continuity(S395): the if-chain security gap resolved, three filings, and two instruments that failed their own tests#819
bryanmaclee merged 1 commit into
mainfrom
continuity/s395-if-chain-filings

Conversation

@bryanmaclee

Copy link
Copy Markdown
Owner

Continuity-only — no compiler source touched.

Gaps

g-collect-functions-branch-decl-vs-server-boundary-routingRESOLVED via #818 (c4c55c50), PA-verified two-sided on merged main: body-in-client 0 with server.js produced and the body inside it; the plain-fn symptom goes 0 definitions / 2 bare calls → 1 definition / 0 bare calls.

Three new entries. Two were verified pre-existing before filing — neither is introduced by #818, and saying so is what stops the next reader "fixing" a regression that isn't one.

id sev note
g-same-named-branch-declarations-bind-to-the-last-definition MED PA-verified pre-existing on the lone-if= oracle
g-call-expression-interpolation-in-if-chain-branch-renders-empty MED PA-verified with a top-level fn — outside the fix's surface
g-types-check-baseline-never-refreshed-for-ast-if-chain LOW relayed, not PA-measured, and labelled so

Review floor

Markers for #817 and #818.

⛑ The arc's durable finding — three instruments tested rather than trusted, two failed

  1. The dev agent's first corpus differential reported 1021 files differing and it invalidated its own run: the base tree had been built by deleting .git, one of chunk-namespace.ts's PROJECT_ROOT_MARKERS, so every chunk token hashed an absolute path. Re-run: 0 of 7408.
  2. Its security overlap sweep did not bite on this bug — the leak shape is body-in-client AND no server.js, so there is nothing to overlap. Found by pointing it at a deliberately-leaking build, getting "clean", and writing a second source-anchored checker.
  3. The leak guard was absence-only: the base column satisfied it by making the function vanish, so "absent from the client" meant nothing until a positive limb required the body present on the server.

All three found by adversarial construction, none by inspection.

master-list.md carries only the @generated recent-sessions regen. Minor drift noted, not chased: that block's own header says it is derived from the wrap(s…) commits, and it has just indexed a maps(...) one.

🤖 Generated with Claude Code

https://claude.ai/code/session_019eHiNS6uvnGPFz55fzinNJ

…and two instruments that failed their own tests

GAPS. g-collect-functions-branch-decl-vs-server-boundary-routing -> RESOLVED via #818
(c4c55c5), PA-verified two-sided on MERGED main: body-in-client 0 with server.js
produced and the body inside it; the plain-fn symptom goes 0 definitions / 2 bare calls
-> 1 definition / 0 bare calls.

THREE NEW ENTRIES. Two were verified PRE-EXISTING before filing, which is the point —
neither is introduced by #818, and saying so is what keeps the next reader from
"fixing" a regression that is not one:

  - g-same-named-branch-declarations-bind-to-the-last-definition (MED). Sibling branches
    declaring one name emit BOTH definitions and bind EVERY call to the last, silently.
    PA-verified pre-existing on the lone-if= oracle, so #818 brings the chain to parity
    with an already-defective oracle. Direction AT THIS SHAPE is loud->silent (base threw
    ReferenceError), which is why it is filed rather than shrugged at. No server body
    leaked in any duplicate-name shape tested. The scoping question underneath is the
    SAME one g-if-chain-all-arms-run-at-module-init asks — rule once, not twice.
  - g-call-expression-interpolation-in-if-chain-branch-renders-empty (MED). PA-verified
    on merged main with a TOP-LEVEL fn, i.e. outside the fix's surface. _scrml_boot does
    querySelector + _scrml_render_value BEFORE _scrml_nav_rewire(document) inserts the
    branch, so el is null and the render is a silent no-op. A CELL interpolation in the
    same position works — which is why the #811/#818 class sweeps missed it. It is an
    ORDERING defect, not a collection one.
  - g-types-check-baseline-never-refreshed-for-ast-if-chain (LOW). RELAYED, NOT
    PA-MEASURED, and the entry says so. Two independent agents concur on 9->10 TS7016,
    but tsc is absent from this checkout and types-gate.ts correctly refuses to fall back
    or skip — "a gate that passes without running is worse than no gate", its own words.
    So no unverified .d.ts was landed on someone else's number. Re-measure before acting.

REVIEW FLOOR: markers for #817 and #818.

⛑ THE ARC'S DURABLE FINDING — three instruments were tested rather than trusted, and two
FAILED. (1) The dev agent's first corpus differential reported 1021 files differing and
it invalidated its own run: the base tree had been built by deleting `.git`, one of
chunk-namespace.ts's PROJECT_ROOT_MARKERS, so every chunk token hashed an absolute path;
re-run gives 0 of 7408. (2) Its security overlap sweep did NOT bite on this bug — the
leak shape is body-in-client AND no server.js, so there is nothing to overlap — found by
pointing it at a deliberately-leaking build, getting "clean", and writing a second
source-anchored checker. (3) The leak guard was ABSENCE-ONLY: the base column satisfied
it by making the function vanish, so "absent from the client" meant nothing until a
POSITIVE limb required the body present on the SERVER. All three found by adversarial
construction, none by inspection.

master-list.md carries only the @generated recent-sessions regen. Minor drift noted, not
chased: that block's own header says it is derived from the `wrap(s…)` commits, and it
has just indexed a `maps(...)` one.
@bryanmaclee
bryanmaclee merged commit 8f3c5b7 into main Sep 2, 2026
2 of 3 checks passed
@bryanmaclee
bryanmaclee deleted the continuity/s395-if-chain-filings branch September 2, 2026 14:40
bryanmaclee added a commit that referenced this pull request Sep 3, 2026
…reen while wrong (#824)

Ran concurrently with S396-peter throughout. Five rulings given, four code arcs landed, the
review floor drained twice to zero, maps refreshed. ONE ARC HELD on a ruling, worktree retained.

⚑ THE SESSION'S REAL OUTPUT IS NOT THE LANDINGS. Nine separate checks read green or
authoritative while being wrong, and every one was caught by RUNNING something rather than
by remembering. Three were my own claims. TWO WERE CAUGHT BY GATES I DID NOT WRITE. Three
were agents' own instruments, found by those agents.

RULINGS
  · the trailing-`else` question — direction stands, and the reported "inverted ruling" was
    MY OWN mis-description: §17.6.4 has always said a missing `else` is valid. I relayed a
    hand-off's framing into the boot report without opening the section.
  · the `~` arm-body question — limb (a) ratified, limb (c) BANKED as dpa-040, not closed.
  · 2a / 2b / 2c — the runAnchored fix (sequenced), the dev-root auth gate (limb b), and the
    tracking-job sequence with its first step folded in.
  · SPLIT the dev-auth arc when its §52.13 half turned out to require a second decider.

LANDED
  #815 the §17.6.2 value-form sugar binds its result at a binding site — it bound null forever.
  #818 a branch-declared function is ROUTED before it is COLLECTED; closing the client half
       alone put a `server fn` BODY into client.js.
  #822 18 conformance assertions read as coverage and checked nothing. ⚑ MY BRIEF WAS WRONG —
       a naive `continue` deletion would have reddened 62 count:0 ABSENCE assertions — and the
       agent deviated with a stated reason. Only 2 of the 18 were covered elsewhere; 16 were
       entirely unguarded.
  #823 `scrml dev` served a protected document unauthenticated at `/`. The fix is a DELETION:
       two serving paths become one.
  #816 #819 #820 continuity + filings; #817 the overdue wrap-6c maps refresh, which corrected
       three premises in my own concurrently-dispatched brief.

⚑ HELD, NOT LANDED — the `~` build, worktree RETAINED at agent-ac264a1015c0da19d @ c2ad6f49.
Four fix rounds, four adversarial passes, 7 SPEC loci reconciled. Blocked on bryan's
revert-vs-press-on for the READ half, whose widening PA-verifiably DELETES A DOM LIFT (base
emits _scrml_lift/createTextNode, the branch pushes into a dead array, exit 0). Resume the
agent; do not re-dispatch.

FINDINGS WORTH CARRYING
  · SUPPRESSING A SIGNAL SUPPRESSES WHATEVER RODE ON IT — three instances, one of them my own
    instruction. The `tracking` job's routine red concealed a REAL §52.13 assertion failing on
    Linux (compiler/tests/commands/ runs in NO blocking job on any platform). A knowingly-red
    assertion placed FIRST in a test turned the four after it into dead code that still read as
    coverage. And I instructed `test.failing` on that test — which passes when the body fails
    for ANY reason, so it would have MASKED A LEAK. The agent's formulation is the keeper:
    a mechanism that makes a red acceptable also makes a red invisible.
  · A FIX THAT NEEDS A SECOND DECIDER IS THE FORK RULE SAYING NO. Three rounds found three
    distinct divergences between the dev pre-gate and the resolution loop; the split then
    CLOSED a dev/prod divergence rather than opening one.
  · A REVIEW FINDING WAS FALSIFIED RATHER THAN FILED — the first time this session verification
    prevented a FABRICATED finding instead of catching a missed one. The corpus IS gated;
    corpus-bridge.test.js reaches it from inside the gated root.
  · TWO SHARED-DOC CONCURRENCY HAZARDS, both caught by machinery: conflicting @generated gap
    counts (resolved by regenerating from the merged population — the union, not a pick), and
    duplicate delta-log sequence numbers with peter (caught by the cloud gate's step 14; a
    duplicate makes the flogence bridge DROP the second entry from the digest).
  · BASE-DRIFT nearly reverted landed work FOUR times.
  · EVERY ONE of the five agent deviations from my instructions this session was correct.

WRAP STEPS: hand-off rewritten (S396-peter's rotated to handOffs/hand-off-282.md, his live items
carried) · changelog block · delta-log [2040]-[2045], sequence gate PASS · review floor 6 OWED
-> 0 · inbox: TWO items deliberately left unarchived because both await bryan (the E-ROUTE-004
fork and the ~11-day-old FSP Initialize deliberation), both summarised in the hand-off · suite
30945 pass / 54 fail — ONE FEWER than base, the §52.13 assertion · worktrees: four landed swept,
one retained · maps refreshed to 2d8dd8c, watermark verified via state.ts not by reading the
file · @generated + facts gates PASS.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant