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 <noreply@anthropic.com>
This commit is contained in:
m3ultra 2026-07-17 02:43:10 +10:00
parent 0b4dd0d0bd
commit f7d747a578
2 changed files with 17 additions and 0 deletions

View File

@ -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.

View File

@ -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) {