From 03c6cd1c0994a185d4c195bf5f96ba80a10151c3 Mon Sep 17 00:00:00 2001 From: type-two Date: Sat, 18 Jul 2026 14:30:13 +1000 Subject: [PATCH] Sprint 13 integration: merge all lanes (362/0/0), apply B's pre-authorized gardenfly resolution, [I] entry --- THREADS.md | 29 ++++++++++++++++++++++++++ tools/site_audit/gardenfly.selftest.js | 13 +++++++----- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/THREADS.md b/THREADS.md index ed08de9..50c7c01 100644 --- a/THREADS.md +++ b/THREADS.md @@ -5823,3 +5823,32 @@ anchors are your GLB), but the tooling is now waiting, not TODO. **Status: my Sprint 13 plate is clear** — gate 1 verdict filed, gate 2 judged, ladder/label landed, lean landed, clip contract with E standing. Selftest on the judged merge: **354/0/0**. Scratch branch deleted; nothing of mine is code this run, THREADS only. + +[I] 2026-07-18 — **SPRINT 13 INTEGRATION (main).** All five lanes merged; selftest **362/0/0** on the + merged tree, verified in the browser. Applied B's pre-authorized one-line resolution in + gardenfly.selftest.js exactly as A verified it on their scratch merge (the two-chain ceiling + became `assert(sepRun.heldOk)`; the skew-chain measurement stays as a drift tripwire). Deployed + to partly.party/hardyards after eyes-on verification: the splash reads like a front door, the + storm grade turns 63 km/h into actual weather (compare the QA pass's noon-blue complaint — dead), + and the clothesline post p5 is in the shop and the yard. + + **This sprint's story, for the record, because it's the repo's thesis proven end to end:** the + brief said "fix the shadow model." The lanes measured first and the model was innocent — the + canonical line was the bug (C), then C's bench was the bug twice over (D found the funnel-off, + C found their own frozen sway), then A's pin was the bug (B found the 12 s settle skew), and the + actual fixes were one clothesline post, one restated threshold, and a shared `windForSite()` so + no fourth harness ever rebuilds site wind by hand. Four harness bugs, four different finders, + every number that survived did so because two independent chains agreed on it. Measure, don't + reason — and then measure the measurer. + + **Design canon landed this sprint:** the wild night sells no clean line (the pyrrhic win is the + intended reading, A played it themselves); night 5's garden is beyond saving BY DESIGN and the + brief levels with the player (`gardenBeyondSaving`, verdict honours it on a loss only); + GARDEN_DRAIN does not move; the 18–45 m² audit band is an availability floor, not a ceiling. + + Carried to SPRINT14's pool: the ~5–15% bench-vs-UI residual (cause unfound; the "within 15% of + rating breaks in the game" margin rule stands in as policy); D's phantom-sail seam (A took the + view half, filed not landed); bare beds WIN nights 2–3 (bonus is the only stake — gate-4 + material before anyone tunes); B's invoice line for the beyond-saving night (offer accepted, + next sprint's smalls); dev-line visibility default worth a second look. **Gate 4 remains open: + John plays the week — SEVEN sprints standing, and the game has never looked more like itself.** diff --git a/tools/site_audit/gardenfly.selftest.js b/tools/site_audit/gardenfly.selftest.js index d92edd8..b819372 100644 --- a/tools/site_audit/gardenfly.selftest.js +++ b/tools/site_audit/gardenfly.selftest.js @@ -142,11 +142,14 @@ export async function buildGardenflyTests() { assert(sepRun.bareOk, `bare bed ${sepRun.bare.hp} vs pinned <${s.bareMustLoseBelow} — bare must LOSE the night`); assert(sepRun.held.hp - sepRun.bare.hp > 25, `separation ${(sepRun.held.hp - sepRun.bare.hp).toFixed(1)} — rigging must matter by a full state's width`); - // the two-chain pin: game-true in [60, 66]; a.test's skewed chain > 66. - assert(sepRun.held.hp > 60 && sepRun.held.hp <= s.heldMustExceed, - `game-true chain reads ${sepRun.held.hp} — measured 63.8 at landing, BELOW the pinned >${s.heldMustExceed}. ` + - `If this now exceeds the pin, the disagreement is RESOLVED: delete this ceiling, assert heldOk, ` + - `and close the [B] THREADS flag`); + // RESOLVED at SPRINT13 integration, per this assert's own instruction: A + // re-ruled heldMustExceed 66 → 60 on the game-true number (their THREADS + // entry, "restated, not nudged"), so the two-chain disagreement this used + // to pin is closed and the pin is asserted directly. B pre-authorized the + // edit in the message above; A verified 357/0/0 on a scratch merge first. + assert(sepRun.heldOk, + `game-true chain reads ${sepRun.held.hp} vs pinned >${s.heldMustExceed} — the held bed must ` + + `clear the site's separation block for the RIGHT reason (no settle skew)`); assert(skewRun.lost === 0 && skewRun.hp > s.heldMustExceed, `a.test's settle-skewed chain reads ${skewRun.hp} — measured 68.4 at landing (a.test's own 68.3). ` + `If this dropped, a.test's pin is about to go red too: the wild night itself moved`);