diff --git a/.claude/maps/auth.map.md b/.claude/maps/auth.map.md index cb1370af3..244929b6f 100644 --- a/.claude/maps/auth.map.md +++ b/.claude/maps/auth.map.md @@ -1,15 +1,26 @@ # auth.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · diff --git a/.claude/maps/build.map.md b/.claude/maps/build.map.md index 2a35e64b0..60b440af3 100644 --- a/.claude/maps/build.map.md +++ b/.claude/maps/build.map.md @@ -1,15 +1,26 @@ # build.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · diff --git a/.claude/maps/config.map.md b/.claude/maps/config.map.md index ef7ef7c1a..bcb632930 100644 --- a/.claude/maps/config.map.md +++ b/.claude/maps/config.map.md @@ -1,15 +1,26 @@ # config.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · diff --git a/.claude/maps/dependencies.map.md b/.claude/maps/dependencies.map.md index 4ef419935..6ac2910bf 100644 --- a/.claude/maps/dependencies.map.md +++ b/.claude/maps/dependencies.map.md @@ -1,15 +1,26 @@ # dependencies.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · @@ -81,7 +92,7 @@ parsing, cell-accessor-rename), so this widens the internal consumer set, not th | Stage | Module(s) | Feeds | |---|---|---| -| **⛑ §17.1.1 `if-chain` CHILD SHAPE — ONE LEAF, 14 IMPORTERS, 35 CALL SITES, AND *ONE* REMAINING DELIBERATE NON-EDGE (created #805, widened #811, closed onto route inference #818)** | `compiler/src/ast-if-chain.js` — ⚠ **`src/` ROOT, NOT `codegen/`**; `compiler/src/codegen/ast-if-chain.js` does not exist, and consumers import it as `"../ast-if-chain.js"` from `codegen/` and `"./ast-if-chain.js"` from `src/`. **Re-derived at `2d8dd8cb`: 14 importing modules, 35 call sites** (`grep -rl 'from "\.\{1,2\}/ast-if-chain.js"' compiler/src/` -> 14; `ifChainChildNodes(` minus the definition -> 35) — up from 13/32, the delta being **#818's NEW `route-inference.ts:92` edge** plus three call sites (`collect.ts:215`, `route-inference.ts:1137`, `route-inference.ts:1199`). ⛑ **THE NEW EDGE IS SECURITY-BEARING AND ITS DIRECTION MATTERS:** route inference must claim a branch-declared `server fn` BEFORE `codegen/collect.ts` hands the function list to the CLIENT emitter, or the `server fn` BODY ships into `client.js` with no `server.js` — see invariant 86 in primary.map.md. ⚠ **ONE DELIBERATE NON-EDGE REMAINS: `symbol-table.ts:10642`** is a TOTAL `Object.keys` walk that already reaches `branches[].element`; routing it through this enumerator of KNOWN fields would NARROW it. | +| **⛑ §17.1.1 `if-chain` CHILD SHAPE — ONE LEAF, 14 IMPORTERS, 35 CALL SITES, AND *ONE* REMAINING DELIBERATE NON-EDGE (created #805, widened #811, closed onto route inference #818)** | `compiler/src/ast-if-chain.js` — ⚠ **`src/` ROOT, NOT `codegen/`**; `compiler/src/codegen/ast-if-chain.js` does not exist, and consumers import it as `"../ast-if-chain.js"` from `codegen/` and `"./ast-if-chain.js"` from `src/`. **Re-derived at `8e278c73`: 14 importing modules, 35 call sites** (`grep -rl 'from "\.\{1,2\}/ast-if-chain.js"' compiler/src/` -> 14; `ifChainChildNodes(` minus the definition -> 35) — up from 13/32, the delta being **#818's NEW `route-inference.ts:92` edge** plus three call sites (`collect.ts:215`, `route-inference.ts:1137`, `route-inference.ts:1199`). ⛑ **THE NEW EDGE IS SECURITY-BEARING AND ITS DIRECTION MATTERS:** route inference must claim a branch-declared `server fn` BEFORE `codegen/collect.ts` hands the function list to the CLIENT emitter, or the `server fn` BODY ships into `client.js` with no `server.js` — see invariant 86 in primary.map.md. ⚠ **ONE DELIBERATE NON-EDGE REMAINS: `symbol-table.ts:10642`** is a TOTAL `Object.keys` walk that already reaches `branches[].element`; routing it through this enumerator of KNOWN fields would NARROW it. | | CLI dispatch | cli.js | commands/{compile,dev,build,serve,migrate,db-migrate,promote,generate,init,introspect,semdiff}.js — **11 verbs** | | Split | block-splitter.js | ast-builder.js, native-parser/parse-file.js | | **BS-LINT (Stage 2.5 / 2.5b / 2.5c) — three passes that read BLOCK-SPLITTER output, before the AST exists** | `lint-w-interp-in-raw-content.js` (2.5) · `lint-w-input-state-markup-nonreactive.js` (2.5b) · **`lint-e-state-block-statement-form.js` (2.5c, NEW #718)** | `collectErrors("BS-LINT", …)` → `result.warnings` for 2.5/2.5b, **`result.errors` for 2.5c** (`E-` prefix + `severity:"error"`; CLI exit 1). ⚑ **THE NEW NODE IMPORTS NOTHING — it is a leaf by necessity, since anything it pulled from a later stage would invert pipeline order.** Cost: its `STATE_BLOCK_NAMES` / `STATE_BLOCK_ON_LIFECYCLE_RE` are COPIES of `ast-builder.js:1169` (⛑ S383 +9) / `:756-757`, unenforced. ⚠ **2.5 and 2.5b wrap their call in `try`/`catch`; 2.5c deliberately does NOT** — a swallowed throw in an error gate is fail-OPEN. error.map.md. | diff --git a/.claude/maps/domain.map.md b/.claude/maps/domain.map.md index e6b0e61dd..70f09d39c 100644 --- a/.claude/maps/domain.map.md +++ b/.claude/maps/domain.map.md @@ -1,15 +1,26 @@ # domain.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · @@ -2309,7 +2320,7 @@ limb it would skip the short-circuit and push a spurious failure. **Corpus-zero the authoring gate that would forbid the shape outright — is DEFERRED, so nothing prevents it being written.** -**CORPUS FIGURES, RE-PARSED AT `2d8dd8cb` (not grepped — a raw `"count": 0` grep returns 64 and +**CORPUS FIGURES, RE-PARSED AT `8e278c73` (not grepped — a raw `"count": 0` grep returns 64 and over-counts by reaching non-assertion text):** **455** `domAnchored` assertions across **193** cases; **62** are `count: 0` and **all 62 are count-only**; **18** are MIXED (count + a first-match check) and **all 18 are `count: 1`** — those 18 are exactly what this fix un-blinded. diff --git a/.claude/maps/error.map.md b/.claude/maps/error.map.md index 21f298f94..791973215 100644 --- a/.claude/maps/error.map.md +++ b/.claude/maps/error.map.md @@ -1,15 +1,26 @@ # error.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · diff --git a/.claude/maps/infra.map.md b/.claude/maps/infra.map.md index 13a6dc8eb..8070cfdd0 100644 --- a/.claude/maps/infra.map.md +++ b/.claude/maps/infra.map.md @@ -1,15 +1,26 @@ # infra.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · @@ -44,13 +55,13 @@ None. No Dockerfile / docker-compose.yml anywhere in the repo. ## CI/CD Provider: GitHub Actions. Workflows — **THREE, all on `main`; only `ci.yml` changed this window** (⛑ **S391: #781-era — ONE NEW BLOCKING `gate` step, the compile-floor gate at `ci.yml:159`. No job, secret, runner or required-check NAME moved.** The prior window's change was #665 — a `tracking` step + a header correction): -- `.github/workflows/ci.yml` — 3 jobs: `gate` blocking (**14 TOTAL steps = 12 `- name:` + 2 `- uses:`; re-counted by parse at `2d8dd8cb`, and stated both ways because a bare "14" invited an ambiguity this pass had to re-derive — ⛑ S391 `13 -> 14`, the added step is `bun scripts/corpus-compile-floor.ts --check`; the prior window's +1 was `bun scripts/delta-lint.ts` (#652)**: the browser failure-NAME-SET gate and the SPEC §34.0 row-provenance gate; checkout `fetch-depth: 0` because the latter needs merge-base), `tracking` + `windows` non-blocking. **Triggers NOW: push `branches: [main]` (NEW #532 — see header), `pull_request`, and `workflow_dispatch: {}` (#454)** — `gh workflow run CI --ref `. It is now the ONLY recovery path when GitHub drops a webhook (it never re-delivers one; an outage left five PRs with zero checks and unmergeable, and force-push / close-reopen / new-commit / new-PR are all just another webhook into the same throttled pipe). **TWO measured constraints:** the dispatch reads the workflow definition FROM THE TARGET REF, so it returns `HTTP 422` on any branch cut before #454 — **prospective, not retroactive**, rebase or use `--ref main`; and a dispatched run's §34.0 provenance check falls back from `pull_request.base.sha` to `HEAD~1`, so rows added in earlier commits of the same branch are not seen as NEW. **It weakens no gate** — `gate` must still go green on the head SHA, `enforce_admins=true` untouched. `tracking`'s permanently-red raw browser run was replaced by the same NAME-SET check — which also **un-skipped the step behind it**, verified `skipped` on run `30742472551` and therefore never once executed. +- `.github/workflows/ci.yml` — 3 jobs: `gate` blocking (**14 TOTAL steps = 12 `- name:` + 2 `- uses:`; re-counted by parse at `8e278c73`, and stated both ways because a bare "14" invited an ambiguity this pass had to re-derive — ⛑ S391 `13 -> 14`, the added step is `bun scripts/corpus-compile-floor.ts --check`; the prior window's +1 was `bun scripts/delta-lint.ts` (#652)**: the browser failure-NAME-SET gate and the SPEC §34.0 row-provenance gate; checkout `fetch-depth: 0` because the latter needs merge-base), `tracking` + `windows` non-blocking. **Triggers NOW: push `branches: [main]` (NEW #532 — see header), `pull_request`, and `workflow_dispatch: {}` (#454)** — `gh workflow run CI --ref `. It is now the ONLY recovery path when GitHub drops a webhook (it never re-delivers one; an outage left five PRs with zero checks and unmergeable, and force-push / close-reopen / new-commit / new-PR are all just another webhook into the same throttled pipe). **TWO measured constraints:** the dispatch reads the workflow definition FROM THE TARGET REF, so it returns `HTTP 422` on any branch cut before #454 — **prospective, not retroactive**, rebase or use `--ref main`; and a dispatched run's §34.0 provenance check falls back from `pull_request.base.sha` to `HEAD~1`, so rows added in earlier commits of the same branch are not seen as NEW. **It weakens no gate** — `gate` must still go green on the head SHA, `enforce_admins=true` untouched. `tracking`'s permanently-red raw browser run was replaced by the same NAME-SET check — which also **un-skipped the step behind it**, verified `skipped` on run `30742472551` and therefore never once executed. - `.github/workflows/advisory-review.yml` — 1 job: `ai-review`. **DISABLED — `workflow_dispatch` only**, with a required `pr` input. The `pull_request:` trigger is gone. - `.github/workflows/cloud-maps.yml` — 1 job: `regen`, still scheduled daily 09:17 UTC + `workflow_dispatch`. **Stage 2 (the project-mapper agent) was DELETED**; Stages 1 / 1b / 3 (deterministic, free) remain. `id-token: write` was dropped with it. **Both removals are a COST decision by bryan, not a broken credential.** A permanently-red check is the `pa-base` §8 cry-wolf shape — it gets ignored, and then a real failure gets ignored with it. The prior generation of this map (and build.map.md) diagnosed the red as a probable credential/entitlement condition on `ANTHROPIC_API_KEY`; **that analysis is MOOT and has been deleted rather than carried.** -⛑ **WHAT EACH JOB ACTUALLY RUNS — RE-READ AT `2d8dd8cb`, BECAUSE TWO CONCLUSIONS WERE DRAWN WRONG +⛑ **WHAT EACH JOB ACTUALLY RUNS — RE-READ AT `8e278c73`, BECAUSE TWO CONCLUSIONS WERE DRAWN WRONG FROM GREPS THIS SESSION AND THEY POINT IN OPPOSITE DIRECTIONS.** | job | blocking? | test tiers it runs | diff --git a/.claude/maps/migrations.map.md b/.claude/maps/migrations.map.md index 7501df1b2..fff6ab65a 100644 --- a/.claude/maps/migrations.map.md +++ b/.claude/maps/migrations.map.md @@ -1,15 +1,26 @@ # migrations.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · diff --git a/.claude/maps/non-compliance.report.md b/.claude/maps/non-compliance.report.md index 97715f76f..3ad2e1612 100644 --- a/.claude/maps/non-compliance.report.md +++ b/.claude/maps/non-compliance.report.md @@ -1,15 +1,17 @@ # non-compliance.report.md # project: scrml -# generated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb +# generated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 # scan mode: FULL_COLD_START (doc-population scan) — run as part of the S396 wrap-6c map refresh # -# MAP-STAMP RULE run at WRITE time: `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; -# source diff `BASE..HEAD` -> EMPTY; `git merge-base --is-ancestor 2d8dd8cb origin/main` -> exit 0. -# Inbound: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# MAP-STAMP RULE run at WRITE time: `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; +# source diff `BASE..HEAD` -> EMPTY; `git merge-base --is-ancestor 8e278c73 origin/main` -> exit 0. +# Inbound: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. +# ⚠ `HEAD` is `a97766fc` (local, unpushed, `maps/s395-tail`) and is deliberately NOT the watermark. # # ⛑ **THE TWO STANDING ITEMS WERE RE-EXECUTED, NOT RESTATED — and one of them came back SHARPER -# rather than merely "still true".** Both verdicts below were produced by running commands at -# `2d8dd8cb`, and where the prior wording would have over-claimed, it is corrected here. +# rather than merely "still true".** Both verdicts below were produced by running commands against +# the working tree at this watermark (source is byte-identical from `2d8dd8cb` through `8e278c73`), +# and where the prior wording would have over-claimed, it is corrected here. ## Summary — S396 pass (this pass) @@ -25,7 +27,7 @@ ⚑ **THE HEADLINE THIS PASS IS THAT THREE OF THE FOUR FACTUAL ERRORS FOUND WERE IN THE MAPS, NOT IN THE DOCS.** A non-compliance scan that only ever points outward is not measuring itself. See M1-M3. -## STANDING ITEMS — RE-EXECUTED AT `2d8dd8cb` (verdicts below are commands, not carry-forward) +## STANDING ITEMS — RE-EXECUTED AT `8e278c73` (verdicts below are commands, not carry-forward) ### N12. `docs/audits/` — 20 documents, 2.0 MB — **STILL OUTSIDE THE SCAN POPULATION. 14th consecutive pass.** @@ -94,7 +96,7 @@ available evidence that this report's own output does not close the loop.** **Verdict: STILL LIVE, and the "wrong at its own watermark" half is now airtight.** -Re-executed at `2d8dd8cb`: +Re-executed at `8e278c73`: | check | result | |---|---| @@ -123,7 +125,7 @@ worse than two wrong ones, because it buys the reader's confidence. total of **1,424** `.test.js` — which is **correct** — but four category cells did not sum to it and were stale independently of this window: -| cell | map read | actual at `2d8dd8cb` | actual at `ad7b65dc` | +| cell | map read | actual at `8e278c73` | actual at `ad7b65dc` | |---|---|---|---| | Unit | 909 | **925** | **925** | | Integration | 213 | **216** | **216** | @@ -197,7 +199,20 @@ located, and each describes work that LANDED (verified against `c4c55c50`, `ae27 `bun scripts/state.ts --check` **BEFORE** this pass: `maps: 7 commits behind HEAD (watermark ad7b65dc, HEAD 2d8dd8cb) [WARN-only — not gated; -project-mapper seam]`. **AFTER:** `MAPS_AFTER_PLACEHOLDER`. +project-mapper seam]`. **AFTER:** maps: 1 commits behind HEAD (watermark 8e278c73, HEAD a97766fc) [WARN-only — not gated; +project-mapper seam]` — and **that reading is the CORRECT terminal state, not a failed advance.** +⛑ **THE WATERMARK IS `8e278c73`, WHICH IS EXACTLY `origin/main` AND EXACTLY `merge-base HEAD +origin/main`.** The single commit "behind" is `a97766fc`, a LOCAL, UNPUSHED commit on branch +`maps/s395-tail` carrying this pass's own map tail. ⚠ **`maps: current` is NOT achievable here +without violating the MAP-STAMP RULE**, because `mapsStaleness()` compares the watermark to local +`HEAD` (`scripts/state.ts:620`), and reaching it would mean stamping an unpushed BRANCH TIP — the +precise S326/S328/S331 hazard the rule exists to close, since a branch tip is squash-merged onto +`main` under a DIFFERENT SHA and the stamp is then orphaned. **Three of five stamps a prior pass +inherited were exactly that.** The stamp was therefore advanced to the furthest commit that +satisfies all three checks (`is-ancestor 8e278c73 origin/main` -> exit 0) and no further. +⚠ **HEAD MOVED THREE TIMES DURING THIS PASS** — `2d8dd8cb` -> `add3a479` -> `8e278c73`/`a97766fc`, +because the session wrap committed while the mapper was still writing. Every advance was re-verified +against `origin/main` rather than chased. ⚠ **The instrument exits 0 either way — nothing in the toolchain fails on stale maps.** It parses **line 3 only** (`scripts/state.ts:615`), which is why every map in this set carries the same SHA on line 3 and line 4. diff --git a/.claude/maps/primary.map.md b/.claude/maps/primary.map.md index 6fb910490..bc972a9b7 100644 --- a/.claude/maps/primary.map.md +++ b/.claude/maps/primary.map.md @@ -1,15 +1,26 @@ # primary.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · @@ -150,7 +161,7 @@ Language: TypeScript / JavaScript (mixed) + scrml itself (self-hosting stdlib Framework: Custom compiler pipeline (no web framework) — Bun-native Runtime: Bun >=1.3.13 (no Node support; Bun-specific APIs throughout — `Bun.serve`, `bun:sqlite`, `Bun.$`, `Bun.SQL`, `Bun.hash`) Type: CLI compiler + language toolchain (single-file full-stack web-language compiler, with LSP + editor-tooling + MCP surfaces) -Size: ⛑ **S396 — ALL FIGURES RE-EXECUTED AT `2d8dd8cb`.** `compiler/src/` **194 files** (FLAT this window — #818/#823 changed existing files, added none). Tests: **1,424** `*.test.js` (FLAT — 3 CHANGED, 0 added). Conformance: **893 cases across 54 category dirs** (+2: `control-flow/if-chain-branch-declared-function-pos` and `server-fn/branch-declared-server-fn-routes-to-server`, both #818). `docs/changes/` is **716** dirs. ⚠ Counts are re-executed each pass, never carried — a flat count still needs the command run, because "flat" and "unmeasured" are indistinguishable in a map. +Size: ⛑ **S396 — ALL FIGURES RE-EXECUTED AT `8e278c73`.** `compiler/src/` **194 files** (FLAT this window — #818/#823 changed existing files, added none). Tests: **1,424** `*.test.js` (FLAT — 3 CHANGED, 0 added). Conformance: **893 cases across 54 category dirs** (+2: `control-flow/if-chain-branch-declared-function-pos` and `server-fn/branch-declared-server-fn-routes-to-server`, both #818). `docs/changes/` is **716** dirs. ⚠ Counts are re-executed each pass, never carried — a flat count still needs the command run, because "flat" and "unmeasured" are indistinguishable in a map. Version: v0.7.1 (root package.json — the SOLE manifest; not a workspace monorepo, `files`-allowlisted, publishable). **`package.json` / `bun.lock` are `--name-only` EMPTY over `ad7b65dc..2d8dd8cb`** — no runtime or dev dependency added, removed or version-bumped; third consecutive window. CI: GitHub Actions — three workflows on `main` (`ci.yml`, `advisory-review.yml`, `cloud-maps.yml`), count unchanged; `.github/` is `--name-only` EMPTY over this window so all three are byte-identical. ⛑ **`gate` is the ONLY blocking job: 14 total steps (12 `- name:` + 2 `- uses:`)** — stated both ways because a bare "14" invited an ambiguity this pass had to re-derive. `tracking` (8 steps) and `windows` (4) are BOTH `continue-on-error: true`. ⚠ **`gate` runs `unit` + `conformance` + root-level `*.test.js` — NOT `integration`, NOT `lsp`, NOT `commands`** (invariant 87). ⛑ **The top-level `conformance/` corpus IS gated even though no workflow names it** — via `compiler/tests/conformance/corpus-bridge.test.js` (invariant 88). @@ -163,7 +174,20 @@ RE-RUN AFTER THIS PASS'S WRITE — THAT RE-RUN, NOT THE FILE CONTENT, IS THE CHE because this step has crashed post-write before and left the stamp stale.** `bun scripts/state.ts --check` printed, BEFORE this pass: `maps: 7 commits behind HEAD (watermark ad7b65dc, HEAD 2d8dd8cb) [WARN-only — not gated; -project-mapper seam]`, and AFTER: `MAPS_AFTER_PLACEHOLDER`. +project-mapper seam]`, and AFTER: maps: 1 commits behind HEAD (watermark 8e278c73, HEAD a97766fc) [WARN-only — not gated; +project-mapper seam]` — and **that reading is the CORRECT terminal state, not a failed advance.** +⛑ **THE WATERMARK IS `8e278c73`, WHICH IS EXACTLY `origin/main` AND EXACTLY `merge-base HEAD +origin/main`.** The single commit "behind" is `a97766fc`, a LOCAL, UNPUSHED commit on branch +`maps/s395-tail` carrying this pass's own map tail. ⚠ **`maps: current` is NOT achievable here +without violating the MAP-STAMP RULE**, because `mapsStaleness()` compares the watermark to local +`HEAD` (`scripts/state.ts:620`), and reaching it would mean stamping an unpushed BRANCH TIP — the +precise S326/S328/S331 hazard the rule exists to close, since a branch tip is squash-merged onto +`main` under a DIFFERENT SHA and the stamp is then orphaned. **Three of five stamps a prior pass +inherited were exactly that.** The stamp was therefore advanced to the furthest commit that +satisfies all three checks (`is-ancestor 8e278c73 origin/main` -> exit 0) and no further. +⚠ **HEAD MOVED THREE TIMES DURING THIS PASS** — `2d8dd8cb` -> `add3a479` -> `8e278c73`/`a97766fc`, +because the session wrap committed while the mapper was still writing. Every advance was re-verified +against `origin/main` rather than chased. ⚠ **It exits 0 either way. Verified again this pass, not assumed:** the command was executed and its exit status read. Nothing in the toolchain fails on stale maps. # @@ -266,7 +290,7 @@ Language: TypeScript / JavaScript (mixed) + scrml itself (self-hosting stdlib Framework: Custom compiler pipeline (no web framework) — Bun-native Runtime: Bun >=1.3.13 (no Node support; Bun-specific APIs throughout — `Bun.serve`, `bun:sqlite`, `Bun.$`, `Bun.SQL`, `Bun.hash`) Type: CLI compiler + language toolchain (single-file full-stack web-language compiler, with LSP + editor-tooling + MCP surfaces) -Size: ⛑ **S396 — ALL FIGURES RE-EXECUTED AT `2d8dd8cb`.** `compiler/src/` **194 files** (FLAT this window — #818/#823 changed existing files, added none). Tests: **1,424** `*.test.js` (FLAT — 3 CHANGED, 0 added). Conformance: **893 cases across 54 category dirs** (+2: `control-flow/if-chain-branch-declared-function-pos` and `server-fn/branch-declared-server-fn-routes-to-server`, both #818). `docs/changes/` is **716** dirs. ⚠ Counts are re-executed each pass, never carried — a flat count still needs the command run, because "flat" and "unmeasured" are indistinguishable in a map. +Size: ⛑ **S396 — ALL FIGURES RE-EXECUTED AT `8e278c73`.** `compiler/src/` **194 files** (FLAT this window — #818/#823 changed existing files, added none). Tests: **1,424** `*.test.js` (FLAT — 3 CHANGED, 0 added). Conformance: **893 cases across 54 category dirs** (+2: `control-flow/if-chain-branch-declared-function-pos` and `server-fn/branch-declared-server-fn-routes-to-server`, both #818). `docs/changes/` is **716** dirs. ⚠ Counts are re-executed each pass, never carried — a flat count still needs the command run, because "flat" and "unmeasured" are indistinguishable in a map. Version: v0.7.1 (root package.json — the SOLE manifest; not a workspace monorepo, `files`-allowlisted, publishable). **`package.json` / `bun.lock` are `--name-only` EMPTY over `ad7b65dc..2d8dd8cb`** — no runtime or dev dependency added, removed or version-bumped; third consecutive window. CI: GitHub Actions — three workflows on `main` (`ci.yml`, `advisory-review.yml`, `cloud-maps.yml`), count unchanged; `.github/` is `--name-only` EMPTY over this window so all three are byte-identical. ⛑ **`gate` is the ONLY blocking job: 14 total steps (12 `- name:` + 2 `- uses:`)** — stated both ways because a bare "14" invited an ambiguity this pass had to re-derive. `tracking` (8 steps) and `windows` (4) are BOTH `continue-on-error: true`. ⚠ **`gate` runs `unit` + `conformance` + root-level `*.test.js` — NOT `integration`, NOT `lsp`, NOT `commands`** (invariant 87). ⛑ **The top-level `conformance/` corpus IS gated even though no workflow names it** — via `compiler/tests/conformance/corpus-bridge.test.js` (invariant 88). @@ -480,7 +504,7 @@ reader who checks only the `^| E-` grep will read a different delta than the cat ## Map Index -**EVERY STAMP BELOW IS `2d8dd8cb` — the `merge-base HEAD origin/main` at WRITE time, with the source +**EVERY STAMP BELOW IS `8e278c73` — the `merge-base HEAD origin/main` at WRITE time, with the source diff against it EMPTY and `merge-base --is-ancestor 2d8dd8cb origin/main` exit 0.** At this watermark the merge-base IS `origin/main` AND IS `HEAD` — all three are the same commit, so there is no working tip to record separately. Line 3 is the CURRENCY ANCHOR `scripts/state.ts` parses (and it @@ -551,19 +575,19 @@ ZERO occurrences across all thirteen maps.** A newly-added *gate* is easier to m | Map | Stamp | Ancestor of `origin/main`? | Contents | |---|---|---|---| -| **primary.map.md** | **`2d8dd8cb`** | yes (merge-base; == `origin/main` here) | **⛑ S396 wrap-6c FULL-DELTA INCREMENTAL — STAMP ADVANCED `ad7b65dc` -> `2d8dd8cb` (7 commits).** All FOUR changed source files walked. **Invariant 82 CHANGED STATUS** (its `collect.ts` prohibition retired by #818, which closed both halves together) and **rows 86-88 are NEW**: the RI-before-collector ORDER, `commands/` as advisory-only, and the corpus-bridge gate. One briefed premise corrected by execution — see the header. | -| **structure.map.md** | **`2d8dd8cb`** | yes | **⛑ S396: `commands/dev.js` GAINED THREE FUNCTIONS AND LOST A SERVING BRANCH** — `gateProtectedDoc` `:979`, `rootFallbackCandidates` `:1003`, `staticCandidates` `:1029` are new; the ungated root-only `pathname === "/"` branch is DELETED (#823). `compiler/src` re-counted at **194 files**; `conformance/` at **893 cases / 54 category dirs** (+2). | -| **dependencies.map.md** | **`2d8dd8cb`** | yes | **⛑ S396: ONE NEW INTERNAL EDGE, AND IT IS SECURITY-BEARING** — `route-inference.ts:92` now imports `ifChainChildNodes` from `./ast-if-chain.js` (#818), taking the helper to **14 importing modules / 35 call sites** (was 13/32). **MANIFEST STILL ZERO-DIFF**: `package.json`/`bun.lock` `--name-only` EMPTY over `ad7b65dc..2d8dd8cb` — third consecutive window with no dependency added, removed or bumped. | -| **schema.map.md** | **`2d8dd8cb`** | yes | **⛑ S396: STAMP-ADVANCED ON RE-MEASURED ZERO-DIFF.** `compiler/src/types/`, `stdlib/`, `*.d.ts`/`*.proto`/`*.graphql` are all `--name-only` EMPTY over `ad7b65dc..2d8dd8cb`. The 2 new conformance cases reuse the existing `expect` shape, so the corpus SCHEMA is unchanged. A zero-diff surface is an UNCHANGED map, not a verified-correct one. | -| **domain.map.md** | **`2d8dd8cb`** | yes | **⛑ S396: THREE SECTIONS TOUCHED** — §17.1.1 gains its SERVER-BOUNDARY limb (the first member of the if-chain class that is a security boundary, #818); §52.13 gains a ONE-DECIDER rule for `scrml dev` (#823); §62.2 gains the corpus-honesty limb (an assertion carrying both a count and a first-match check now evaluates BOTH, #822). | -| **error.map.md** | **`2d8dd8cb`** | yes | **⛑ S396: NO NEW E-CODE.** The window's error-surface fact is a NEAR-MISS worth carrying: closing `collectFileFunctions`'s descent without the matching `collectWorkerBodyFunctionIds` suppression descent would have made **`E-ROUTE-001` false-fire** on a `server fn` inside a `` worker-body branch. Both landed in #818 for that reason. | -| **test.map.md** | **`2d8dd8cb`** | yes | **⛑ S396: `1,424` .test.js, FLAT** (3 files CHANGED, none added). **The gating rows are what moved:** `commands/` (17 files) restated as advisory-only WITH its mechanism (invariant 87), and the top-level corpus documented as gated VIA `corpus-bridge.test.js` (invariant 88). Corpus assertions RE-PARSED, not grepped: **455 `domAnchored` across 193 cases · 62 `count: 0`, all count-only · 18 MIXED, all `count: 1`**. | -| **build.map.md** | **`2d8dd8cb`** | yes | **⛑ S396 — STAMP-ADVANCED ON RE-MEASURED ZERO-DIFF:** `.github/` and `package.json` are both `--name-only` EMPTY over the window, so every command and CI stage is carried VERIFIED-UNCHANGED. **NEW CONTENT ANYWAY:** the corpus-bridge gating fact (invariant 88), which the map had never stated and which a workflow grep actively contradicts. | -| **infra.map.md** | **`2d8dd8cb`** | yes | **⛑ S396 — STAMP-ADVANCED ON RE-MEASURED ZERO-DIFF.** `.github/workflows/` `--name-only` EMPTY; all three workflows byte-identical. Job shapes RE-COUNTED BY PARSE: `gate` **14 total steps (12 `- name:` + 2 `- uses:`)**, `tracking` 8 (6+2, `continue-on-error`), `windows` 4 (2+2, `continue-on-error`). | -| **config.map.md** | **`2d8dd8cb`** | yes | **⛑ S396: STAMP-ADVANCED ON RE-MEASURED ZERO-DIFF.** `.env*`, `bunfig.toml`, `package.json`, `tsconfig.json` all `--name-only` EMPTY over `ad7b65dc..2d8dd8cb`. No key added, renamed or removed. | -| **auth.map.md** | **`2d8dd8cb`** | yes | **⛑ S396 — NOT ZERO-DIFF THIS TIME, AND THE OLD ANCHOR WAS DEAD.** #823 rewrote the §52.13 DEV mirror: the inline gate the map cited as "`devDispatch`'s static-file branch `:1046-1048`" no longer exists. Dev now decides protection at **exactly one site** — `gateProtectedDoc` (`dev.js:979`), called at `:1141` on the RESOLVED file. Closed `g-dev-root-path-fallback-serves-a-protected-document-unauthenticated`. | -| **migrations.map.md** | **`2d8dd8cb`** | yes | **⛑ S396: STAMP-ADVANCED ON RE-MEASURED ZERO-DIFF.** `commands/db-migrate.js`, `commands/migrate.js` and `schema-differ` are all `--name-only` EMPTY over the window. | -| **non-compliance.report.md** | **`2d8dd8cb`** | yes | **⛑ S396 — BOTH STANDING ITEMS RE-VERIFIED BY EXECUTION, NOT RESTATED.** `docs/audits/` (20 entries, 2.0 MB) is STILL outside every scan population — 14 passes now; **exactly two** docs self-declare superseded in a top-of-file `**Status:**` line (re-checked individually, not by a bare `superseded` grep, which over-counts to 9). **N14 STILL WRONG at this SHA** and `ast-builder.js` is byte-identical since the watermark, so it was wrong at its own. | +| **primary.map.md** | **`8e278c73`** | yes (merge-base; == `origin/main` here) | **⛑ S396 wrap-6c FULL-DELTA INCREMENTAL — STAMP ADVANCED `ad7b65dc` -> `2d8dd8cb` (7 commits).** All FOUR changed source files walked. **Invariant 82 CHANGED STATUS** (its `collect.ts` prohibition retired by #818, which closed both halves together) and **rows 86-88 are NEW**: the RI-before-collector ORDER, `commands/` as advisory-only, and the corpus-bridge gate. One briefed premise corrected by execution — see the header. | +| **structure.map.md** | **`8e278c73`** | yes | **⛑ S396: `commands/dev.js` GAINED THREE FUNCTIONS AND LOST A SERVING BRANCH** — `gateProtectedDoc` `:979`, `rootFallbackCandidates` `:1003`, `staticCandidates` `:1029` are new; the ungated root-only `pathname === "/"` branch is DELETED (#823). `compiler/src` re-counted at **194 files**; `conformance/` at **893 cases / 54 category dirs** (+2). | +| **dependencies.map.md** | **`8e278c73`** | yes | **⛑ S396: ONE NEW INTERNAL EDGE, AND IT IS SECURITY-BEARING** — `route-inference.ts:92` now imports `ifChainChildNodes` from `./ast-if-chain.js` (#818), taking the helper to **14 importing modules / 35 call sites** (was 13/32). **MANIFEST STILL ZERO-DIFF**: `package.json`/`bun.lock` `--name-only` EMPTY over `ad7b65dc..2d8dd8cb` — third consecutive window with no dependency added, removed or bumped. | +| **schema.map.md** | **`8e278c73`** | yes | **⛑ S396: STAMP-ADVANCED ON RE-MEASURED ZERO-DIFF.** `compiler/src/types/`, `stdlib/`, `*.d.ts`/`*.proto`/`*.graphql` are all `--name-only` EMPTY over `ad7b65dc..2d8dd8cb`. The 2 new conformance cases reuse the existing `expect` shape, so the corpus SCHEMA is unchanged. A zero-diff surface is an UNCHANGED map, not a verified-correct one. | +| **domain.map.md** | **`8e278c73`** | yes | **⛑ S396: THREE SECTIONS TOUCHED** — §17.1.1 gains its SERVER-BOUNDARY limb (the first member of the if-chain class that is a security boundary, #818); §52.13 gains a ONE-DECIDER rule for `scrml dev` (#823); §62.2 gains the corpus-honesty limb (an assertion carrying both a count and a first-match check now evaluates BOTH, #822). | +| **error.map.md** | **`8e278c73`** | yes | **⛑ S396: NO NEW E-CODE.** The window's error-surface fact is a NEAR-MISS worth carrying: closing `collectFileFunctions`'s descent without the matching `collectWorkerBodyFunctionIds` suppression descent would have made **`E-ROUTE-001` false-fire** on a `server fn` inside a `` worker-body branch. Both landed in #818 for that reason. | +| **test.map.md** | **`8e278c73`** | yes | **⛑ S396: `1,424` .test.js, FLAT** (3 files CHANGED, none added). **The gating rows are what moved:** `commands/` (17 files) restated as advisory-only WITH its mechanism (invariant 87), and the top-level corpus documented as gated VIA `corpus-bridge.test.js` (invariant 88). Corpus assertions RE-PARSED, not grepped: **455 `domAnchored` across 193 cases · 62 `count: 0`, all count-only · 18 MIXED, all `count: 1`**. | +| **build.map.md** | **`8e278c73`** | yes | **⛑ S396 — STAMP-ADVANCED ON RE-MEASURED ZERO-DIFF:** `.github/` and `package.json` are both `--name-only` EMPTY over the window, so every command and CI stage is carried VERIFIED-UNCHANGED. **NEW CONTENT ANYWAY:** the corpus-bridge gating fact (invariant 88), which the map had never stated and which a workflow grep actively contradicts. | +| **infra.map.md** | **`8e278c73`** | yes | **⛑ S396 — STAMP-ADVANCED ON RE-MEASURED ZERO-DIFF.** `.github/workflows/` `--name-only` EMPTY; all three workflows byte-identical. Job shapes RE-COUNTED BY PARSE: `gate` **14 total steps (12 `- name:` + 2 `- uses:`)**, `tracking` 8 (6+2, `continue-on-error`), `windows` 4 (2+2, `continue-on-error`). | +| **config.map.md** | **`8e278c73`** | yes | **⛑ S396: STAMP-ADVANCED ON RE-MEASURED ZERO-DIFF.** `.env*`, `bunfig.toml`, `package.json`, `tsconfig.json` all `--name-only` EMPTY over `ad7b65dc..2d8dd8cb`. No key added, renamed or removed. | +| **auth.map.md** | **`8e278c73`** | yes | **⛑ S396 — NOT ZERO-DIFF THIS TIME, AND THE OLD ANCHOR WAS DEAD.** #823 rewrote the §52.13 DEV mirror: the inline gate the map cited as "`devDispatch`'s static-file branch `:1046-1048`" no longer exists. Dev now decides protection at **exactly one site** — `gateProtectedDoc` (`dev.js:979`), called at `:1141` on the RESOLVED file. Closed `g-dev-root-path-fallback-serves-a-protected-document-unauthenticated`. | +| **migrations.map.md** | **`8e278c73`** | yes | **⛑ S396: STAMP-ADVANCED ON RE-MEASURED ZERO-DIFF.** `commands/db-migrate.js`, `commands/migrate.js` and `schema-differ` are all `--name-only` EMPTY over the window. | +| **non-compliance.report.md** | **`8e278c73`** | yes | **⛑ S396 — BOTH STANDING ITEMS RE-VERIFIED BY EXECUTION, NOT RESTATED.** `docs/audits/` (20 entries, 2.0 MB) is STILL outside every scan population — 14 passes now; **exactly two** docs self-declare superseded in a top-of-file `**Status:**` line (re-checked individually, not by a bare `superseded` grep, which over-counts to 9). **N14 STILL WRONG at this SHA** and `ast-builder.js` is byte-identical since the watermark, so it was wrong at its own. | ⚠ **`.claude/maps/*.generated.md` (`structure`, `dependencies`, `error`, `test`) ARE NOT PART OF THIS MAP SET AND ARE NOT IN GIT.** `git ls-files .claude/` returns exactly 16 paths — the **13** maps diff --git a/.claude/maps/schema.map.md b/.claude/maps/schema.map.md index 9d40ca515..38f88077d 100644 --- a/.claude/maps/schema.map.md +++ b/.claude/maps/schema.map.md @@ -1,15 +1,26 @@ # schema.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · diff --git a/.claude/maps/structure.map.md b/.claude/maps/structure.map.md index 5ee74a1be..accc0c52e 100644 --- a/.claude/maps/structure.map.md +++ b/.claude/maps/structure.map.md @@ -1,15 +1,26 @@ # structure.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · diff --git a/.claude/maps/test.map.md b/.claude/maps/test.map.md index e83a795a8..d00e639db 100644 --- a/.claude/maps/test.map.md +++ b/.claude/maps/test.map.md @@ -1,15 +1,26 @@ # test.map.md # project: scrml -# updated: 2026-09-03T06:16:21-06:00 commit: 2d8dd8cb -# generated-at: 2d8dd8cb — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark -# `merge-base HEAD origin/main` == `origin/main` == `HEAD` == `2d8dd8cb`, so there is no second SHA to -# record and none is invented. MAP-STAMP RULE run at WRITE time, all three commands: -# `BASE=$(git merge-base HEAD origin/main)` -> `2d8dd8cb`; `git diff --name-only BASE..HEAD -- +# updated: 2026-09-03T06:16:21-06:00 commit: 8e278c73 +# generated-at: 8e278c73 — **THE SAME SHA AS LINE 3, BY CONSTRUCTION.** At this watermark +# `merge-base HEAD origin/main` == `origin/main` == `8e278c73`. ⚠ **`HEAD` is NOT equal to it this +# pass** — it is `a97766fc`, a LOCAL, UNPUSHED commit on branch `maps/s395-tail` carrying this pass's +# own map tail, with a `--name-only` EMPTY source delta. The watermark deliberately tracks the +# merge-base, NOT `HEAD`: stamping an unpushed branch tip is the S326/S328/S331 orphaned-stamp hazard. +# MAP-STAMP RULE run at WRITE time, all three commands: +# `BASE=$(git merge-base HEAD origin/main)` -> `8e278c73`; `git diff --name-only BASE..HEAD -- # compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json` -> **EMPTY**; -# `git merge-base --is-ancestor 2d8dd8cb origin/main` -> **exit 0**. Inbound check (invariant 48) also -# run: `git merge-base --is-ancestor ad7b65dc 2d8dd8cb` -> exit 0. +# `git merge-base --is-ancestor 8e278c73 origin/main` -> **exit 0**. Inbound check (invariant 48) also +# run: `git merge-base --is-ancestor ad7b65dc 8e278c73` -> exit 0. # -# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `2d8dd8cb`, 7 COMMITS.** ━━━━━━━ +# ━━━━━━━ S396 wrap-6c — **STAMP ADVANCED. `ad7b65dc` -> `8e278c73`.** ━━━━━━━ +# +# ⚠ **TWO SHAs, AND THE DISTINCTION IS LOAD-BEARING — DO NOT COLLAPSE THEM.** The **SOURCE DELTA** +# this pass walked is `ad7b65dc..2d8dd8cb` (7 commits, 4 changed source files). The **WATERMARK** is +# `8e278c73`, which is further along: `2d8dd8cb..8e278c73` is the wrap commit (#824) and is +# `--name-only` **EMPTY** over `compiler/ scripts/ conformance/ stdlib/ lsp/ .github/ package.json`. +# Every measurement below therefore holds at the watermark unchanged — the stamp is advanced to the +# CURRENT `origin/main` rather than left on the last source-bearing commit, because the MAP-STAMP +# RULE takes the merge-base, not the last interesting commit. # # **THE COMPLETE SOURCE DELTA WAS WALKED, SO THE PARTIAL-PASS RULE IS SATISFIED RATHER THAN WAIVED.** # `git diff --name-only ad7b65dc..2d8dd8cb` over `compiler/src` · `compiler/native-parser` · `stdlib` · diff --git a/master-list.md b/master-list.md index 2db9d7e73..d81a19663 100644 --- a/master-list.md +++ b/master-list.md @@ -105,7 +105,7 @@ All 20 sub-steps (rev 6 decomposition: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11.0a- > `bun scripts/state.ts --write` regenerates it; `--check` gates it. -- `5e1d40ff` — maps(S395): wrap-6c refresh 2ec2ce3a -> ad7b65dc — and three premises in my own brief were wrong (#817) — **pushed** +- `8e278c73` — wrap(s395): five rulings, four arcs, and nine instruments that read green while wrong (#824) — **pushed** - `0dc4d014` — wrap(s393): verification kept changing the answer — four premises died on contact with execution, two of them mine (#812) — **pushed** - `76f97a59` — wrap(s391): six instruments were wrong and every one read as fine — twelve PRs, six rulings owed, and a concurrent sibling the board could not see (#804) — **pushed** - `b0457906` — wrap(s390): both S385 arcs landed, main unblocked, and three gates caught what the others could not (#790) — **pushed**