From b6df11dfd6600d1fcfd63d3b79179c5fe2161b7d Mon Sep 17 00:00:00 2001 From: m3ultra Date: Mon, 3 Aug 2026 17:42:08 +1000 Subject: [PATCH] =?UTF-8?q?Lane=20F=20R37=20(v8=20wave=200,=20CLOSE):=20th?= =?UTF-8?q?e=20round=20gate=20=E2=80=94=20QA=20GREEN=207/0/0/0,=20flags=20?= =?UTF-8?q?harness=200=20fails=20/=200=20warns,=20MATRIX=20GREEN=2010=20to?= =?UTF-8?q?wns=20x=207=20gates?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit qa.sh --strict --matrix on the true final tree (Lane A e4d7762 + Lane B 47db478/79177bc + Fable 7bd96e5/4a7c0f1 + F 2396885/6afd1ed/f522021), port-isolated on :8975. SUMMARY 7 passed · 0 failed · 0 warn · 0 skipped — QA GREEN selfcheck ALL GREEN 157,407/157,407 (was 156,352 — Lane A's +1,055 poster-clearance assertions, three arms, all green on the ruled street) manifest 0 errors / 0 warnings; atlas-QA 15 atlases, 15 licence lines shown; depot live flags 0 fails / 0 WARNS classic fp 0x5f76e76 · dig INERT at the bin · gig layer wholly absent · 162 draws / 16,642 tris · fetch surface CLEAN against v2.1 (125 requests: 68 code, 52 same-origin v2.1 assets, 4 depot, 1 NAMED EXCEPTION printed) · allow-list control fired (2 injected -> 2 named violations) default four flags on · 14 gigs / 14 posters / venue geo / tram · gig golden 0xec7a2d39 · 131 draws / 23,382 tris @ venue block · dig REACHABLE naked kerb all six arms green, control at EXACTLY 14 under ?verge=0 tram all arms + BOTH controls green R11-R36 audio, gigs, continuity, glance, the R30-35 game gates, djdance, real crate, tier-2 kill-the-server: all re-green on the ruled street fig-scale 29 figs across 6 shops in [1.4,2.0] m incl. the R36 DJ-body leg matrix GREEN, 10 towns x 7 gates; every town byte-equal on re-boot; 0 fetches under ?noassets across all ten; tram verdicts unchanged (fenced on bendigo, fremantle, katoomba_real — the same three the rebuilt smoke_tram uses for its absence arm) One caveat kept in the notes rather than buried, so this round's central finding is not undone by its own suite: the matrix's budget column (69-161 draws) is DBG.shot('venue_night') CLEAN-LOAD BOOKMARK numbers, and 37.1 is the proof that a bookmark under-reports a walked-and-turned frame by ~120 draws. That column is a regression signal, not the budget of record. Making the matrix walk-and-turn every town is a real improvement and a real cost — FILED TO THE v8 DEBT LEDGER, not smuggled into a floor round. NO TAG. Wave 0 levels the floor; it does not ship a version. Co-Authored-By: Claude Opus 5 --- F-progress.md | 45 ++++++++++++-- docs/LANES/LANE_F_NOTES.md | 118 +++++++++++++++++++++++++++++++++++-- 2 files changed, 153 insertions(+), 10 deletions(-) diff --git a/F-progress.md b/F-progress.md index 4a1e0ef..729c6f4 100644 --- a/F-progress.md +++ b/F-progress.md @@ -45,17 +45,52 @@ fenced katoomba_real (0 stops, **0 group children**, 0 m moved) · OFF under `?t **Both controls demonstrated every run** — the run-predicate pointed at the fenced town and the absence-predicate pointed at the running tram must each go red. -**0.5 — `classic_regression` GETS A NETWORK ALLOW-LIST**, derived from the **v2.0 tag at gate time** +**0.1 (F half) — THE KERB GATE: the ruling is in the paint, and the control fires at EXACTLY 14.** +New STRICT `smoke_kerb`. A's corrected selfcheck asks the plan-side question; F's asks the runtime +one, of the paint — **raycast straight down at every rendered poster and classify the topmost ground +hit by MATERIAL IDENTITY** (`skins.groundMat()` is cached, so the road mesh's material *is* the +object the factory returns — no mesh names, no strings, nothing that drifts when B edits). Topmost, +not first, because B put the carriageway on top at junctions. Six arms, all green: **14 posters +rendered == 14 in `plan.posters`, every one within 0 m** (nobody had ever asserted the poster you see +is the poster A placed) · **detector control A** — a main centreline classifies ROAD at y 0.04 · +**detector control B** — 13 m off it classifies FOOTPATH at y 0.02 · **THE RULING: 0 of 14 posters on +road paint**, tally `{footpath: 14}` · **THE CONTROL: the same leg fails under `?verge=0` at EXACTLY +14**, tally `{road: 14}` · **CLASSIC KEEPS ITS PAINT** — 13 m off the centreline is still ROAD under +`?classic=1`, 0 posters. **Two lanes, two wholly independent methods, the same number 14**: A counted +plan-side by offset in node; F counted paint-side by raycast in the browser off B's geometry. + +**0.5 — `classic_regression` GETS A NETWORK ALLOW-LIST**, derived from the **v2 tag at gate time** (`git ls-tree` + v2.0's own manifest), never a deny-list. **The brief's shape would have missed the breach it was written for**: the R36 widening was `models/peds/woman_dj_01.glb` — *same-origin* — so "four depot GLBs + same-origin" is green straight through it. `/models/peds` is enumerated by the v2.0 tree (exactly the covenanted 21 files; today's dir holds 32). The nine depot fetches are **baseline, not a breach** — proven by booting the actual v2.0 tree and capturing its wire. **Control every run**: injecting the R36 breach itself plus a never-existed asset turns the clean -verdict into exactly 2 named violations. 🟠 **Carried for Fable:** classic's fetch surface is -**+6 files** vs the real v2.0 tree — 5 audio (R11 `f7dd44f`) + `assets/towns/index.json` (R20/R21). -Allowed on the list, printed every run, **UNRATIFIED**; F did not improvise a verdict on a -six-epoch-old fact. Full record: LANE_F_NOTES §37. +verdict into exactly 2 named violations. F measured classic's surface as **+6 files** vs the real +v2.0 tree and **held rather than ruling**; **Fable ruled** (`4a7c0f1`): the 5 audio files are +**RATIFIED BASELINE** (v2.1 was v2's final tagged state, so audio shipped inside v2 as the furniture +GLBs did) and `assets/towns/index.json` is **NOT baseline** but a **named, printed exception**. Landed +in the mechanism by moving the authority tag **v2.0 → v2.1** — surgical, not generous: +`git diff v2.0 v2.1 -- web/` is the audio pack + `audio.js` + four wiring edits, **zero other assets, +zero deletions**, so the tag change admits precisely the ratified audio. Gate output confirms: +same-origin baseline **47 → 52**, exceptions **2 → 1**, control still discriminating. "Should +`?classic=1` show the town selector at all?" → v8 debt ledger, R38+. + +**THE CLOSE — `qa.sh --strict --matrix` on the true final tree (A + B + Fable + F all landed, +port-isolated :8975): 7 passed · 0 failed · 0 warn · 0 skipped — QA GREEN.** Selfcheck +**157,407/157,407** (A's +1,055 poster assertions, green on the ruled street) · manifest 0 err/0 warn · +**flags harness 0 fails / 0 warns** (classic fp `0x5f76e76`, 162 draws/16,642 tris, fetch surface +clean vs **v2.1** with 1 named exception and the injection control firing · default boot gig golden +`0xec7a2d39`, 131 draws/23,382 tris, dig reachable naked · the new kerb gate and the rebuilt tram +gate both green with every control) · figure-scale 29 figs/6 shops · **MATRIX GREEN 10 towns × 7 +gates**, tram verdicts unchanged (fenced on bendigo/fremantle/katoomba_real — the same three the +rebuilt smoke uses for its absence arm). **No tag: wave 0 levels the floor, it does not ship a +version.** *Caveat kept honest in the notes: the matrix's own budget column is clean-load bookmark +numbers (69–161 draws) — a regression signal, not the budget of record, which this very round proved +under-reports a walked-and-turned frame by ~120 draws. Making the matrix walk-and-turn is filed to +the debt ledger, not smuggled into a floor round.* + +Full record: LANE_F_NOTES §37. --- diff --git a/docs/LANES/LANE_F_NOTES.md b/docs/LANES/LANE_F_NOTES.md index c24958a..6af6f7a 100644 --- a/docs/LANES/LANE_F_NOTES.md +++ b/docs/LANES/LANE_F_NOTES.md @@ -2318,6 +2318,68 @@ needed: either they are part of what the covenant preserves (say so, and the lis right), or classic should not be fetching them (and they get gated like the DJ bodies were). **F did not improvise a verdict on a six-epoch-old fact.** +### §37.4a Fable's ruling on the +6 delta, landed in the mechanism (`4a7c0f1`) + +**The audio is RATIFIED BASELINE and git makes that exact rather than generous.** Fable ruled the +covenant preserves "the exact v2 town" and **`v2.1` was v2's final tagged state**, so the audio pack +shipped *inside* v2 exactly as the furniture GLBs did. So the allow-list's authority moved +**`v2.0` → `v2.1`** — and that is a surgical widening, not a shrug: `git diff v2.0 v2.1 -- web/` is +the audio pack, `js/world/audio.js` and four wiring edits. **Zero other assets. Zero deletions.** The +tag change therefore admits precisely the five ratified audio files and nothing else, and the depot +GLB names survive unchanged in v2.1's manifest. Verified in the gate output: same-origin baseline +assets **47 → 52**, carried exceptions **2 → 1**, control still discriminating. + +**`assets/towns/index.json` is NOT baseline** and is now labelled so it can never read as if it were. +It prints every run as `EXCEPTION (NOT v2.1 baseline)` with its provenance (v4 selector machinery, +`078245f` R20 / `4b01449` R21) and Fable's reasoning (no geometry, no identity, no seeded draw — not +the R36 species, not gettable in a floor round). The open question — *should `?classic=1` show the +town selector at all?* — is on the v8 debt ledger for R38+. + +*Also recorded by Fable: the allow-list mechanism (derive from `git ls-tree ` at gate time) is +the correct one and the brief's "four depot GLBs + same-origin" shape was wrong; and the "viewport is +the variable" hypothesis was Fable's, disproven by F's measurement, and is noted as Fable's.* + +### §37.6 THE KERB GATE (item 0.1, F half) — **the ruling is in the paint, and the control fires at exactly 14** + +`smoke_kerb`, STRICT, wired into the harness after `smoke_tram`. Lane A's corrected selfcheck asks +the **plan-side** question (is the poster's offset inside `vergeBand(e)[0]`?). That is right for A's +file — but it still never reads a number that came from B, which is the precise failure that made the +old gate vacuous ("the gate and its subject were the same function agreeing with itself"). So F's +gate asks the **runtime** question, of the paint: + +> **raycast straight down at every rendered poster and classify the topmost ground hit.** + +Classification is by **material identity** — `skins.groundMat()` is a cached factory, so the road +mesh's material *is* the object `groundMat('djsim-road')` returns. No mesh names, no string matching, +nothing that drifts when B edits the file. **Topmost, not first**, deliberately: B put the carriageway +*on top* at junctions (`ROAD_Y` 0 → 0.04) so roads run through intersections, and what the player sees +under a poster is the top surface. + +**All six arms green on the final tree:** + +| arm | result | +|---|---| +| **subject** | **14 posters rendered == 14 in `plan.posters`**, every one within **0 m** of its planned position — read off the real `venue-posters` `InstancedMesh` matrices. *Nobody had ever asserted that the poster you see is the poster A placed.* Zero posters ⇒ FAIL, never a skip. | +| **detector control A** | the centreline of the longest main (`main@28 m`, 137.5 m) classifies **ROAD at y = 0.04** — the detector can see bitumen | +| **detector control B** | **13 m** off that centreline (1 m inboard of the corridor edge) classifies **FOOTPATH at y = 0.02** — the ruling is in the geometry | +| **THE RULING** | **0 of 14** posters stand on road paint on the default boot. Surface tally: `{djsim-footpath: 14}` | +| **THE CONTROL** | the same leg under **`?verge=0` fails at EXACTLY 14** — tally `{djsim-road: 14}`. Keyed to B's flag, not to a line number, matching A's discipline | +| **classic keeps its paint** | 13 m off the centreline is **still ROAD** under `?classic=1`, and classic renders **0 posters** — Fable's mid-round ruling holds; the covenanted render did not move on a render-side ruling | + +**The two detector controls are the load-bearing part.** "0 posters on road" is a sentence about +nothing unless the classifier can be shown to say *road* and to say *footpath* on the same boot. Both +are asserted every run, so the green cannot come from a detector that is silent. + +**A cross-lane agreement worth recording: two lanes, two entirely independent methods, the same +number.** Lane A counted 14 plan-side, by offset against `vergeBand(e)[0]`, in node, over the plan. +F counted 14 paint-side, by raycast against merged mesh materials, in the browser, over Lane B's +geometry. The default boot flips both to 0/clear. That is the kerb ruling proven from both ends. + +*Honest note on the semantics:* a poster clear of *its own* edge's carriageway could still stand on a +**crossing** street's carriageway at a junction, where B's `ROAD_Y` fix puts road on top. F's gate +would call that on-road and A's would not. **Measured: it does not happen on the default boot** (0 of +14). If it ever does, the two gates disagreeing is the finding, not a bug in either. + ### §37.5 Housekeeping - **`flags_check.py --only `** for single-gate development runs. It prints a @@ -2325,8 +2387,54 @@ right), or classic should not be fetching them (and they get gated like the DJ b be mistaken for a suite pass in a log. `qa.sh` invokes `flags_check.py` with no arguments; unaffected. - **README flags table** gains `?verge=0` (Lane B's R37 falsifiability control — B flagged that the table is F's file) and a row for `?r=N` / `?shadows=0|1` naming the `?r=3` breach measured above. -- Regression check on the post-Lane-B tree (`7bd96e5`), the three gates this session touched or that - B's ground change could move: `classic_regression` · `default_boot_gate` · `smoke_tram` — - **0 fails / 0 warns.** Classic fp `0x5f76e76` holds at **162 draws / 16,642 tris**; the default - boot pins to gig golden `0xec7a2d39` at 131 draws / 23,382 tris; dig REACHABLE naked. The full - `qa.sh --strict --matrix` belongs to the later F session with the kerb gate, per the round order. + The `?verge=0` row states A's corrected band figures, not the charter's headline: **9 m is the + synthetic town's 28 m main only**; a real main is 24 m ⇒ 7 m, and `side`@12 — **72% of the whole + corpus** — is 3 m. +- **Lane B's three tram discontinuities** (the 6.4 m end-of-line lane swap, the 2.5 m `EPS` stop + snap, the ≤0.68 m bend kink) arrived as measurements and are now *asserted* by the rebuilt + `smoke_tram`: every discontinuity must be **bounded by 2·LANE**, with **≥1** at exactly 2·LANE + (proving it reached the end and turned). No action beyond keeping them here; a new one goes red. +- Interim regression on `7bd96e5`: `classic_regression` · `default_boot_gate` · `smoke_tram` — + 0 fails / 0 warns. Superseded by the full suite below. + +### §37.7 THE ROUND CLOSE — `qa.sh --strict --matrix` on the true final tree + +Tree: Lane A `e4d7762` + Lane B `47db478`/`79177bc` + Fable `7bd96e5`/`4a7c0f1` + F `2396885`, +`6afd1ed`, `f522021`. Port-isolated on `:8975`. + +> **SUMMARY: 7 passed · 0 failed · 0 warn · 0 skipped — QA GREEN.** + +- **scaffold + consistency + citygen selfcheck: ALL GREEN, `157,407/157,407`** (was 156,352 — Lane A's + +1,055 new poster-clearance assertions, three arms, all landing green on the ruled street). +- **manifest validator**: OK — 0 errors, 0 warnings (48 facades · 85 skin groups · 33 GLBs · 28 audio; + atlas-QA 15 per-shop atlases valid, 15 licence lines SHOWN; depot live). +- **flags harness: 0 fails / 0 WARNS.** + - **classic covenant**: fp `0x5f76e76` · dig INERT at the bin · gig layer wholly absent · + **162 draws / 16,642 tris** · 0 errors · **fetch surface CLEAN against `v2.1`** — 125 requests, + 68 code modules / 52 same-origin v2.1 assets / 4 depot assets in v2.1's manifest / **1 named + exception** (`towns/index.json`, printed) · **the allow-list control fired** (2 injected → 2 named + violations). + - **default boot**: all four flags ON · 14 gigs / 14 posters / venue geo / tram · gig golden + `0xec7a2d39` · 131 draws / 23,382 tris @ venue block · dig REACHABLE naked. + - **`smoke_kerb` (new)**: all six arms green — §37.6. Control at exactly 14 under `?verge=0`. + - **`smoke_tram` (rebuilt)**: all arms + **both** controls green — §37.3. + - R11 audio · R12/13 gigs · R15 continuity · R29 glance · R30–R35 game gates · R36 djdance · + R24 real crate · R27 tier-2 kill-the-server: all re-green on the ruled street. `?classic=1` still + fetches zero `look.glb` and zero dance clips. +- **figure-scale gate**: 29 interior figs across 6 shops all in [1.4, 2.0] m, incl. the R36 DJ-body leg + (0.984–0.989 u → 1.64–1.89 m). +- **MATRIX GREEN — 10 towns × 7 gates** (boot · determ · budget · district · roads · tram · noassets): + 2 synthetic + 3 fixtures + 5 real caches, every town byte-equal on re-boot, 0 fetches under + `?noassets` across all ten, tram verdicts unchanged (runs on synthetic/fixtures/castlemaine/newtown; + **fenced on bendigo, fremantle, katoomba_real** — the same three the rebuilt `smoke_tram` uses for + its absence arm). + +**One honest caveat on the matrix's own budget column**, so this round's central finding is not +undone by its own suite: the matrix budgets (**69–161 draws**) are `DBG.shot('venue_night')` **clean-load +bookmark** numbers. §37.1 is the proof that a bookmark under-reports a walked-and-turned frame by +~120 draws. The matrix column is a *regression* signal (has this town's cost moved?), **not** the +budget of record. The budget of record is §37.1's 292 / 124,793, and nothing else in the repo +measures it. Making the matrix walk-and-turn every town is a real improvement and a real cost — +**filed to the v8 debt ledger, not smuggled into a floor round.** + +**No tag.** Wave 0 levels the floor; it does not ship a version.