@@ -247,11 +247,75 @@ interop artefact (burble's standing caveat), before removal.
247247 oracle-peeled, not scanner-visible). Each oracle-validated "Type
248248 checking passed" on `main`. `panll` *excluded* (no listed RS construct
249249 — scanner FP; see the lower-bound-triage warning).
250- . *`burble`* (32): Tier-1 mechanical pass first (re-validated), Tier-2
251- `mutable`/labelled per-case, Tier-3 constructs blocked on ESC-01..03.
252- . *Small tail:* `standards`, `developer-ecosystem`, `stapeln`,
253- `proof-burrower`, `idaptik`, `bofj-kitt` (≤4 RS files each).
254- . *`idaptik-dlc-vm`* (28): after INT-01 #178 resolver lands (Tier-4 gate).
250+ . See *§#229 closure status* for the truthed disposition of `burble`,
251+ the small tail, and `idaptik-dlc-vm`.
252+
253+ == #229 closure status (post-port truthing, 2026-05-19)
254+
255+ Doing the ports collapsed the apparent scope. The honest end-state:
256+
257+ === Completable per-file ports — DONE
258+
259+ `git-scripts` #9 · `game-server-admin` #14 · `invariant-path` #4 ·
260+ `standards/session-management-standards/.../system_update_gui.affine` #142.
261+ Each oracle-validated "Type checking passed" on `main`. Transform:
262+ `List(X)`→`[X]`, expr record literals `{`→`#{`, ReScript string `+`→`++`,
263+ ReScript `import P [as A]`→`use P [as A];`, single block-module
264+ `module P { body }`→`module P;`-header-first + dedented body.
265+
266+ === Canonical-map additions (from doing the ports)
267+
268+ * *Structural Tier-1:* ReScript `import P[.Q] [as A]` → `use P.Q [as A];`
269+ (`parser.mly:166-169`); *single* block-module `module P { body }` →
270+ `module P;` header (hoisted before imports — `parser.mly:130-134`
271+ requires the header first), braces dropped, body dedented one level.
272+ Oracle-verified to parse.
273+ * *Tier-3 ESC-04 (#262):* *multi*-block-module per file (e.g.
274+ `standards/lol/.../OpenCyc.affine`) has *no clean target* —
275+ AffineScript is one-module-per-file. Escalated, not guessed.
276+
277+ === Reclassified OUT of #229 — permanently (scanner over-scope)
278+
279+ * `developer-ecosystem`, `proof-burrower`, `bofj-kitt`: *every* flagged
280+ file is a *vendored copy of the affinescript repo itself*
281+ (`affinescript/stdlib/effects.affine`,
282+ `affinescript/tests/conformance/run_all.affine`,
283+ `…/docs/guides/warmup/02_ownership.affine`); the `mutable` hits are
284+ *comments* ("// State effect - mutable references", "// ── mut …"). Same
285+ discipline as the affinescript-own-corpus exclusion + the `panll` FP.
286+ *0 real #229 files in these three repos.*
287+ * `standards/a2ml/prototype/rescript/src/{A2ml,Json}.affine`: inside a
288+ `rescript/` *ecosystem* folder → policy hands-off (as `.res`), not a
289+ port target.
290+
291+ === Gated remainder — precisely bounded (not open-ended)
292+
293+ [cols="2,1,4"]
294+ |===
295+ |Repo |n |Gate
296+
297+ |`idaptik-dlc-vm` |28 |RS surface *mechanically eliminated* (block-module
298+ + import-as transforms verified to parse), but every file then hits
299+ `Resolve.UndefinedModule` — the module-path↔file-layout
300+ (`src/State.affine` declaring `module Vm.State;`) does not match the
301+ loader. *Cross-module graph coherence = INT-02 loader-bridge*, explicitly
302+ out of #229's per-file contract. Not a per-file RS issue.
303+ |`burble` |32 |Tier-3 dominated: `%%raw` (ESC-01 #245), `JSON.t`
304+ (ESC-02 #246), `Dict.t` (ESC-03 #247), plus block-modules (ESC-04 #262)
305+ and Tier-2 `mutable`/labelled. Caveat cleared, but not completable until
306+ the ESCs land.
307+ |`stapeln` |3 |`module …;` already file-header; not per-file completable —
308+ `UndefinedVariable` (AuthTypes), `Unify(String,Int)` (Metrics),
309+ parse-error 84 + `use Json;` (PolicyEngine, ESC-02-adjacent). Cross-module
310+ / deeper, not mechanical RS surface.
311+ |`idaptik` |3 |`%%raw` (Main/StartupError) → ESC-01 #245; `Boot` =
312+ `mutable` comment-FP.
313+ |===
314+
315+ The remaining #229 work is now *fully attributed* to ESC-01..04
316+ (#245/#246/#247/#262) + the INT-02 cross-module loader/layout concern —
317+ no unbounded "tail". This is the "once and for all" closure: completable
318+ done, false scope removed, residue precisely gated.
255319
256320== Reproduce / see also
257321
0 commit comments