From 135b3dcda5891a30cfc10ae2aee476588104045c Mon Sep 17 00:00:00 2001 From: m3ultra Date: Fri, 17 Jul 2026 01:43:49 +1000 Subject: [PATCH] =?UTF-8?q?Log=20the=20on-record=20=C2=A77=20hand-run,=20t?= =?UTF-8?q?he=20failure-envelope=20finding,=20and=20the=20ladder=20deferra?= =?UTF-8?q?l?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The §7 loop is closed by hand on the merged game: pick up a spare at the shed, carry it across the storm, the carabiner weak-link blows on its own, chase the flogging corner (prompt tracks it live), hold-E re-rig → 4/4, ride out → survives with full coverage. Definition of done met with a real storm break, not induced. Also logged for B+C: the sail's failure envelope is a cliff — 4/4 up to tn 1.03 (~1.2kN peaks), instant ~10kN double-cascade at tn 1.04. Good rigs survive, flat rigs cascade; the thesis holds and the decision-8 downdraft semantic won't move the cliff (it's a cloth-stability ceiling). Ladder stretch goal deferred to Sprint 4 with reasoning — it's a second carry type + placement + code-driven climb height, bigger than what's left of this sprint. Co-Authored-By: Claude Opus 4.8 --- THREADS.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/THREADS.md b/THREADS.md index 2340de4..fd6abb0 100644 --- a/THREADS.md +++ b/THREADS.md @@ -866,3 +866,51 @@ Format: `[lane letter] YYYY-MM-DD — note` Selftest on merged main: **169 pass / 0 fail**. Hand-driven check via SHADES.step: storm_02 with the default rig loses p1 (carabiner) + p2 by t=40 with downdraft live — cascade is earlier and meaner than A's pre-downdraft run, as C's numbers predicted. Screenshot of the merged storm going to DESIGN.md. + +[D] 2026-07-17 — ✅ **GATE 3 §7 LOOP CLOSED BY HAND, ON RECORD — 4/4 survival, real storm-induced break.** + Drove the merged game through `SHADES.step` (no rAF), real key input, real hold-E. Full trace: + prep: rig 3×rated + 1×carabiner@p1, tn 1.0, settle → `oooo` + t=3.9 walk to shed table (9,6) → hold E → **carrying=spare** (PickUp→CarryIdle) + t≈3.4 storm: carry the spare across the yard (clip **Carry**) toward p1 + **p1's carabiner blows on its own** under storm load → `oooX`, sail flogs loose over the garden + prompt **`rerig_3` tracks the FLOGGING corner** as it swings (live cornerPos — the feature working) + hold E 2.5 s at the loose corner (clip **Crank**, state busy) → `oooo`, **spare consumed**, + **p1 re-rigged carabiner→shackle (an UPGRADE**, exactly B's documented behaviour) + ride out to t=90 → **ends 4/4, coverage 1.0, no further breaks** → aftermath, garden intact. + 4 screenshots (shed pickup · flogging sail + player w/ spare · re-tensioned sail · calm aftermath) + in this session's transcript. **This is the §7 thesis working: mixed rig with a weak link → the + weak link fails → one repair upgrades it → the now-uniform rig survives.** Definition of done met, + and the break was the storm's, not induced. + +[D] 2026-07-17 — 🔧 **RETUNED player thresholds against the REAL storm_02 (my pre-merge tune was against + a mock).** Committed ahead of the run. In the actual storm, gusts-over-baseline peak at **12.1 m/s**, + so my old `stumbleGust:17` was above every gust in the game — **StumbleBack was unreachable dead + code**. And `shoveGustMin:8` (a low bar in the prototype's 12–38 units) had become a high bar in + ours. Fixed: stumbleGust 17→9, shoveGustMin 8→4. A wild night now reads shoved (26 s of 90) → + stumbling (4) → floored (2); a calm day stays 0/0. **d.test.js now loads the real storm JSON + (`weather.loadStorm`) and asserts every threshold is REACHABLE and correctly ordered** — decision 8 + reweights the downdraft this sprint, and this guard fails loudly if that silently kills a mechanic + again. 40 Lane D asserts, 0 fail. + +[D] 2026-07-17 — 📊 **FOR B+C (decision 8) — measured the sail's failure envelope, and it's a CLIFF not a + slope.** Driving `rig.step` against the real wild wind, 3×rated+1×carabiner, settled, per-corner peak + loads: + tn ≤ 1.03 → **4/4 survives**, peaks ~875–1240 N (carabiner rides just under its 1200 N rating) + tn 1.04 → **instant double cascade**: h1 and p2 spike to **~10,300 N at t=1.1** and blow → 1/4 + A 0.01 tension step takes peak load from ~1.2 kN to ~10 kN — that's the cloth going **unstable**, not + gradual overload. Consequence for §7: in a HIGH-tension rig the cascade is faster than any hold-E + (neighbours gone <1 s after the first break), so a naturally-broken corner there is **not** + hand-repairable. BUT a survivable mixed rig (my run) IS — the weak link blows while the rated corners + keep margin and don't cascade, so the repair lands. **Net: good rigs survive, flat/drum-tight rigs + cascade — the thesis holds.** The decision-8 downdraft-semantic (fraction of total vs gust) is really + about loading a FLAT roof *steadily*; it won't fix the cliff, which is a cloth-stability ceiling near + tn 1.04. Worth a stability clamp on peak per-face force if you want a gentler failure curve. + +[D] 2026-07-17 — 🪜 **LADDER STRETCH GOAL — DEFERRED, flagging early as asked.** It's bigger than what's + left of this sprint: carry-ladder is a *second* carry type (can't also carry a spare — hands-full), + placement needs a valid-surface test + a snap to fascia anchors, and ClimbLadder needs vertical + root motion the rig's rotation-only clips don't provide (same class of problem as the knockdown — + I'd drive the climb height in code and play the clip on top). That's a whole interaction sub-system, + not a polish item, and the §7 loop (the actual gate) is closed without it. Recommend it as a + Sprint-4 item once A's anchor rework (decision 2) lands the fascia anchors it targets. The clip is + baked and waiting (`ClimbLadder` is in the pack), so it's not blocked on assets.