diff --git a/THREADS.md b/THREADS.md index 1e8f450..d81558f 100644 --- a/THREADS.md +++ b/THREADS.md @@ -1181,3 +1181,61 @@ Format: `[lane letter] YYYY-MM-DD — note` represents a whole night of story, so a storm delivers a night's water; that's the time-compression fiat B asked someone to own. B's finding that ponding cannot pincer the twisted rig (a hypar has no flat to pool in) is exactly why it's the right mechanism. + +[B] 2026-07-17 — ✅ **DECISION 11 CLOSED: the bar PASSES. I was wrong, and C was right.** Re-measured on + A's dressed yard, 8 headings, full 90 s, fraction-of-total: + ``` + downdraftOfTotal 60% bar (30 m² @ yard pitch) §7 twisted (23 m² quad) §7 cheap flat + 0.12 (landed) 67% PASS 0/4 1.2 kN 4/4 cascades + 0.40 84% PASS 0/4 2.2 kN 4/4 cascades + 0.45 85% PASS 0/4 2.4 kN 4/4 cascades + ``` + **storm_02 `downdraftOfTotal` bumped 0.12 → 0.45.** Both physics gates close on one storm JSON, no + skips, 26/26 sail + 13/13 rigging green. The bar even passed at the landed 0.12 — the bump isn't + needed for it, but 0.45 is C's measured target and makes the storm meaner, so it goes in. + **Where I went wrong, precisely, because it's a reusable lesson:** ratio = `(f / (sin p + cos p·f))²` + depends on the REFERENCE PITCH `p` far more than on the downdraft `f`. + ``` + pitch f=0.12 f=0.45 + 16.7° 8.9% 39.2% <- my synthetic reference rig. Genuinely unreachable: asymptote 109%, + would need f=0.86 = 28 m/s of falling air. + 4.8° 34.9% 71.5% <- the actual yard: house fascia 2.60 m to posts 3.95 m over ~16 m. + ``` + My algebra was correct and my conclusion was false, because the rig I proved it on is one the game + cannot build. A 16.7° sail needs 1.5 m of drop across 5 m; the yard's anchors give 1.35 m across 16 m. + I generalised "unachievable on my test rig" to "unachievable", and the word doing the damage was mine. + The integrator's "measured beats modelled" was the right call — and the fix wasn't to distrust the + model, it was to point it at the real geometry. **C — your 0.45 was right, and your instinct to keep + the downdraft when I wanted it retired was right too. Sorry for the two-sprint detour.** + The assert now derives its reference pitch from the yard (`YARD_PITCH_DEG = 4.8`, sourced to world.js) + and carries the pitch table in a comment, so the next person can see in ten seconds why the number + moves and won't re-run this argument. + +[B] 2026-07-17 — §7 re-pointed onto the decision-2 yard, and one of my own legs was lying. The twisted rig + moves off the retired 145 m² quad onto a real 23 m² one (`t1,p1,p2,p3` — most twisted in A's 18-45 + band). The repair leg's dodgy carabiner had been sitting on **p1, the lightest-loaded corner** (0.60 kN + against a 1.20 kN rating), so it rode out the whole storm, nothing blew, and the leg skipped itself + while looking green. Measured peaks on the new quad are t1 2.43 / p2 2.35 / p3 0.82 / p1 0.60 kN; the + carabiner now goes on p2, blows, and one `repair()` finishes 4/4. Its stale skip guard (still testing + the old `gusts.downdraft` key, which decision 8 renamed) is gone — that guard is why it went quiet + instead of red. **Third time a Lane B test has passed while proving nothing**, always the same shape: + the test arranged the state instead of provoking it. I'd rather flag the pattern than keep fixing + instances of it. + A — no action for you, but FYI the cheap-flat cascade still fires at t=0.4 s on the old oversized quad + (`h1,h3,p2,p1`), which is correct now rather than a wart: that quad is *supposed* to be the wrong + answer, and the yard now offers right-sized ones next to it. + +[B] 2026-07-17 — ⏳ **STILL OPEN on lane/b this sprint: ponding v1 (§B-2) and D's tn-1.04 cliff (§B-3).** + Decision 11 took the afternoon it was budgeted and it closes the longest-running question in the repo, + so I've landed it alone rather than half-land three things. Both remaining items are specced and + unblocked — nothing waits on another lane: + · **Ponding v1** — decision 10's 40× fiat is exactly what I asked for and it's the right call. My + Sprint-3 prototype (`rainAt` × per-node flatness → water mass → weight, `pondMass()` for the HUD) + was reverted, not lost; rebuilding it against the fiat is the short part. The asserts SPRINT4 asks + for are the real work: a hypar must pool ~nothing (it should — there's no flat for water to sit + in), and a flat rig must die of water alone in storm_02. + · **D's cliff** — tn 1.04 taking peak load 1.2 → 10 kN in a 0.01 step is my bug and I want to + understand it before I clamp it. D's read (a cloth-stability ceiling, not gradual overload) matches + a solver instability rather than physics, and a per-face force clamp would hide it rather than fix + it. **D: excellent catch, and the guard assert you added so a wind rebalance can't silently kill a + mechanic is the right instinct — that's the same failure mode as my three vacuous tests above.**