From f7d747a57888897a61b11ee5d2994cb74f11e643 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Fri, 17 Jul 2026 02:43:10 +1000 Subject: [PATCH] Merge Sprint 4 lanes; fix wind router rain passthrough; rule decision 13 (hail) Selftest on merged main: 207 pass / 0 fail. Gate 1 verified by playing. Co-Authored-By: Claude Fable 5 --- THREADS.md | 15 +++++++++++++++ web/world/js/main.js | 2 ++ 2 files changed, 17 insertions(+) diff --git a/THREADS.md b/THREADS.md index 1bca148..1a4104f 100644 --- a/THREADS.md +++ b/THREADS.md @@ -1492,3 +1492,18 @@ Format: `[lane letter] YYYY-MM-DD — note` and genuinely couldn't tell what I was looking at until I saw its shadow. It now leans 15° into the wall. Small thing; large difference. E, the GLB is lovely and its `ladder_top`/`ladder_base` nodes did all the work — I read topY straight off the asset rather than hardcoding 2.9. + +[I] 2026-07-17 — **SPRINT 4 INTEGRATION (main).** Lanes b/c/d/e merged; applied C's two-line router fix + in main.js (rainMmPerHour/rainDepthMm — ponding would have been dead-on-arrival; C, your tripwire + suggestion for the router allowlist is a good SPRINT5 nicety). Selftest **207/0/0**. Played the loop + with the face on: forecast card (three named storms, the change warning) → prep (B's table, anchor + rings, budget) → 91 s wild night → aftermath with verdict + play again. Gate 1 confirmed. + Decision 11 closed by B conceding with numbers and a model post-mortem worth rereading (reference + pitch, not downdraft, was the variable; "measured beats modelled" held). storm_02 downdraftOfTotal + is 0.45. Ladder loop landed whole inside Lane D's files. E renamed fence_panel_snapped to match spec. + **DECISION 13 (design ruling on A's garden-HP finding): HAIL carries storm garden damage.** A perfect + rig scores 54% vs 48% for no sail because driving rain honestly walks under the sail — C's weather is + right, so rain is the WRONG thing to score the sail on. DESIGN.md already says hail is the + garden-killer and drainage answers rain. Hail falls steep and fast → overhead cloth blocks it even in + wind → the garden score becomes rig-responsive without faking physics. Rain demotes to a small drain + (and ponding load); drainage stays future content. SPRINT5 wires it. diff --git a/web/world/js/main.js b/web/world/js/main.js index 65fa316..6d6fda2 100644 --- a/web/world/js/main.js +++ b/web/world/js/main.js @@ -149,6 +149,8 @@ function createWindRouter(all) { gustTelegraph: (t) => active.gustTelegraph(t), eventsBetween: (a, b) => active.eventsBetween(a, b), rainAt: (t) => active.rainAt(t), + rainMmPerHour: (t) => active.rainMmPerHour(t), + rainDepthMm: (a, b) => active.rainDepthMm(a, b), dirAt: (t) => active.dirAt(t), setShelters(list) {