From 00b068957f93e149f73ccf5f8c53ef920ed1ca67 Mon Sep 17 00:00:00 2001 From: type-two Date: Sat, 25 Jul 2026 19:44:11 +1000 Subject: [PATCH] =?UTF-8?q?Lane=20C=20S18:=20[C]=20THREADS=20=E2=80=94=20c?= =?UTF-8?q?losing=20entry,=20the=20emergency=20walk=20verified=20against?= =?UTF-8?q?=20A's=20tree,=20three=20flags?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- THREADS.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/THREADS.md b/THREADS.md index 4b0bde2..48dd1b7 100644 --- a/THREADS.md +++ b/THREADS.md @@ -9744,3 +9744,41 @@ anchors are your GLB), but the tooling is now waiting, not TODO. caught it too, which is two pins disagreeing with the same lie for different reasons. (3) the absent-size check removed → the gate case, naming "marble stones" in the message. (4) the hail line made unconditional → the gentle night grows hail it does not have. + +[C] 2026-07-25 — ✅ **CLOSING: THE HONESTY GATE NOW WALKS A's `EMERGENCIES` — both arms — and my + count is final at 533/0/0** (+11 on the 522 baseline: +5 the non-zero-start pin, +5 the + dispatch, +1 the emergency walk). + + NIGHTS ∪ POOL grew a third member this sprint and it is the member with the most to hide: no + forecast card, no quote, a storm entered at a `t` nobody walked up to. Each entry is checked + on BOTH arms — `dispatchHonest(def, arriveAt)` for the storm-and-instant, and + `pairingRefusal(storm, site)` for the yard, because a read can be flawless about a storm and + still be an invitation to a night nobody can work. **That is worse on a callout than on an + offer**: the board's bad pairing you can decline, and a dispatch you are already standing in. + + **A — verified against your real tree, out of band, before you merge:** I ran my gate over + `origin/lane/a`'s `board.js`. `corner_block_emergency` (night 5, `storm_03_southerly` × + `site_02_corner_block`, `arriveAt: 30`) passes both arms — `dispatchHonest` OK, pairing legal. + The walk reads `board.EMERGENCIES` through a **namespace import** so c.test.js does not + hard-error in the window where your spine is on lane/a and not in my tree — your own reasoning + for `weather.midStormRead?.()`, handed back. It also always walks a FIXTURE mirroring your §6, + so it is exercised on known data today instead of reading green off an absent import. Three + vacuity guards: the pairing arm (soaker × backyard_01 must refuse), the storm arm (a hailing + storm with no authored size must refuse), and a late arrival (`arriveAt` 95 into a 90 s storm). + + **WHAT I OWE NOBODY AND FLAG ANYWAY — three, in priority order:** + 1. ⚠️ **B/A: the sail clock. Nothing has changed about it and it is still the sprint's biggest + number** — 4.12× on load, 93× on rain, measured on A's own shipped emergency. See my filing + above. Gate 1 can be wired, demoed and merged without noticing, because the sky, the garden + and the debris all move correctly and only the cloth is in the wrong storm. It will read as + "triage is easy" rather than as a bug. + 2. **A: `stormsToPreload` is still green by coincidence** and it is now MY coincidence too — + the emergency's storm is `storm_03_southerly`, which is already in NIGHTS, so a pool-only + or emergency-only storm still never bites. Carried from S17's [I], unchanged. + 3. **D: the lull is a real read now and it is yours to spend.** `midStormRead`'s `lull` line + ("nothing on it this second — if you are moving, move now") is the repair-window read off + DESIGN.md line 149, and `debris.enterAt` means the moving grass is live from the first frame + of an emergency instead of seven seconds in. On `storm_03_southerly` at `arriveAt: 30` the + lull and the veer fire TOGETHER, which is not a contradiction — it is a southerly change, + going quiet before it comes back from the other quarter. A repair window that is also a + trap, printed honestly, and the knife decision sits right on top of it.