From 7dd77775da61ba436d3f850ce2925df29a6015a2 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Fri, 17 Jul 2026 03:20:04 +1000 Subject: [PATCH] Log hail landing, decision-13 proof, and the router forward for A Hail is the garden-score engine (4.4x no-sail vs covered in storm_02), plus notes for A (garden-drain wiring, the two router lines I added) and E (juice hooks). Co-Authored-By: Claude Opus 4.8 --- THREADS.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/THREADS.md b/THREADS.md index 5aae740..60d3473 100644 --- a/THREADS.md +++ b/THREADS.md @@ -1542,3 +1542,47 @@ Format: `[lane letter] YYYY-MM-DD — note` 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. + +[C] 2026-07-17 — **HAIL LANDED — decision 13's engine. Selftest 216/0/0.** Storm hail carries the garden + score, and it works because hail falls STEEP where rain doesn't: a raindrop's terminal velocity is + ~9 m/s (a 30 m/s gale blows it in at ~73° off vertical, which is why it walks under a sail and a + perfect rig tied with no rig), a hailstone's is ~22 m/s and it couples weakly to the crosswind, so + even a gale leans it ≤20°. Overhead cloth blocks steep ice. No faked physics. + · **weather.core:** `hail` block in the storm JSON — authored `bursts` (envelopes) plus one synced + to every gust ≥ `withGustsAbove`, so the biggest gusts arrive WITH ice. `hailAt(t)` (max over live + bursts, 0..1), `hailSize`, validator. Gust-synced bursts draw ZERO randomness (key off the gust + timeline), so tuning hail can't re-time the storm — same guarantee as the downdraft, asserted. + · **storms:** storm_02 bursts ON the southerly change (peak 1.0 at t=56.5, 11.4 hail-seconds, size + 1.3) and adds ice to its late big gusts; storm_03 one mild 0.5 burst (size 0.7); storm_01 none. + · **skyfx:** `gardenHailExposure(bed, t)` in the gardenExposure mold (the feed A wires), a steep + second RainShadow, instanced falling stones (hidden under the cloth so you SEE the sail work), and + hail audio — ground clatter that fades as the sail intercepts, plus the cloth DRUM that rises as + the sail catches hail (the "my sail is earning its money" sound). Also `sky.hailAmount` getter. + +[C] 2026-07-17 — **DECISION 13 / GATE 2 PROVEN: no-sail garden takes 4.4× the hail of a well-covered bed** + over a full storm_02 (bar is ≥2×), through the real `gardenHailExposure` + B's SailRig. Asserted in + c.test.js. Verified live too: at the burst a bed-covering rig cuts hail exposure roughly in half, and + the stones fall visibly steeper than the rain beside them (screenshot for DESIGN.md). **A — your garden + score will now separate a good rig from no rig.** Wiring, per SPRINT5 §A-1: + `gardenDrain = sky.gardenHailExposure(bed, t) * HAIL_DAMAGE + sky.gardenExposure(bed, t) * SMALL_RAIN`. + Hail is the headline (aftermath "hail blocked" line reads off `sky.hailShadowOver(bed)` × how much hail + fell); rain stays the small honest drain that walks under the sail. `sky.hailAmount` (0..1) is your + "HAIL" banner trigger; the drum audio already tells the player when the sail is catching it. + +[C] 2026-07-17 — **A — I edited main.js's router (two lines): `hailAt`/`hailSize`. Flagging since it's your + file.** Your tripwire ('wind router forwards EVERYTHING') went red the instant weather.js grew hailAt — + which is the tripwire earning its keep; it even names hail as the case it's guarding. Your comment on + createWindRouter is the standing instruction ("Anything new on the wind contract must be added here + too"), so I followed it rather than leaving main red for you to find. Same pattern as the existing + forwards, tripwire green again, hail verified reaching skyfx in-game with no console patch. Thank you + for building it — it turned last sprint's silent-swallow into a red test that told me exactly what to + add. Revert my two lines only if you'd rather own them; the forward itself has to stay or decision 13 + is inert in the game. + +[C] 2026-07-17 — **E — hail juice hooks, when you're ready (SPRINT5 §E).** The stones are cheap instanced + cubes right now — deliberately minimal so your pips/decals are the detail layer. If you ship impact + pips-on-cloth + a ground decal ring, I'll spawn them where a stone meets the sail ceiling or the + ground (I already keep a hail-shadow grid that knows the ceiling height per cell, so a cloth-impact + point is cheap). Plant-shred puff wants a trigger: fire it when `gardenHailExposure(bed,t)` crosses a + threshold — that's the frame the bed actually takes a hit. Tell me the hook shape and I'll match it; + `sky.hailAmount` and `hailSize` are live for scaling pip rate/size.