diff --git a/THREADS.md b/THREADS.md index d06d7e3..1c49da4 100644 --- a/THREADS.md +++ b/THREADS.md @@ -11299,3 +11299,64 @@ anchors are your GLB), but the tooling is now waiting, not TODO. including "sail cut loose". The verb panel updates inside `player.update` and does not have this problem. Not a shipped bug; it is a harness blind spot, and it hid the knife's ticker line from me for an hour. + +[I] 2026-07-25 — **SPRINT 18 (THE BOOK OF CLIENTS, PART 2) INTEGRATION COMPLETE (main).** D's + pass merged fast-forward after a fresh fetch (the pt-1 lesson, applied); selftest + **584/0/0** — the exact sum, 574 + D's 10, checked statically per file BEFORE the browser + run and confirmed in it. Every lane re-verified at zero unmerged commits against a fetch + taken after the merge. Five lanes, five sprints of this model, and the code-conflict count + for S18 is again ZERO. + + **THE WEEK NOW HAS A KNIFE.** Hold **X** for 1.2 s at a cleat and the whole sail goes + limp — DESIGN.md line 165's signature decision, reachable at last. D's reach rule IS the + mechanic: the corner holding the $180 carport is a bracket at y=2.36 that needs a ladder + you have no time to fetch, so you cut at a corner you CAN reach and spend the sail. The + trade is priced on the glass before you commit, through main.js's OWN collateral walk, so + the panel cannot advertise a saving the invoice won't honour. Night 5, one morning, both + branches: **cut at t=32.3 → +$142 and ★3.0 held · ride it out → −$83 and ★0.0. A $225 + swing on 1.2 s of held key**, in a 5.9-second window. D's verdict: a decision, and the + best thirty seconds in the game. + + 🩹 **D CAUGHT A MONEY BUG THE SPRINT WOULD HAVE SHIPPED:** `_releaseCorner` marked a cut + corner `broken`, and every ledger surface reads `broken` — so the knife billed you five + ways at once, *including the $180 carport you cut the sail to save, billed AND wrecked*. + Ruled: a cut bills nothing, wrecks nothing, warranties nothing, costs no standing, and + the refund counts it, because "save the anchors" is a ledger line. + + 👁️ **AND A FIVE-SPRINT SILENCE: `interact.step()`'s prompt has never been drawn.** main.js + threw the return value away and hud.js had no element for it — every label this lane ever + wrote ("out of reach — needs the ladder", "push the water off (169 kg)") reached a bench + and never a player. `createVerbPanel` draws them now. Sibling in kind to this sprint's + `setFabric` finding: a surface that existed, was correct, and was wired to nothing. + + ⚠️ **FOUR SEAMS PUBLISHED THIS SPRINT THAT NOBODY WIRED**, all found by playing night 5, + none visible to 574 green asserts: B's authored cowboy rig never landed (the carport + corner ARRIVED down, so the knife had no object); `pay.garden = 0` never landed (the first + emergency invoice paid $38 for a bed nobody had a prep phase to protect); `rig.breakCorner + ?.()` — **the door is called `failCorner`, and an optional call to a renamed method is a + silent no-op that reads exactly like a call**; and `attach({at, wind})` was never passed, + so `clockSkew` read 30.02 and the knife's invoice said "9s in" on a night you arrive at + 30. Pinned: every door main.js feature-detects must EXIST. + + **THE FIRST HONEST WEEK, re-flown post-fabric-fix (every prior number was measured on a + fabric the game never flew, in the easier direction):** 7/7 stood up · **5/7 gardens** · + **$327** · **★0.5**, against S17's $401 / 6-of-7. P5 blew on the calmest night; site_03's + first-ever cold play cost a $140 swing set and the whole star rating; the soaker finished + **49% — one point under the line**. D withdrew four of their own S17 numbers by name, + including the $80 clean-win line. **B's S16 "the membrane stops every stone" fired for the + first time ever, because until this sprint the game was always flying the membrane.** + + ⚖️ **TWO RULINGS FOR JOHN, both found by play, neither tuned by the lane that found it:** + **(1) THE KNIFE'S STATED PRICE IS NOT CHARGED.** The panel promises "costs the garden", + but on an emergency night the hail is over before you arrive and `pay.garden = 0`, so the + garden only reaches money through `win = hp >= 50` — the cut cost 1 HP and $0. Two correct + rulings (B's triage economy, D's honest panel) meeting on one night. **(2) DECLINING COSTS + NOTHING AT THE FLOOR.** −½★ genuinely flipped D's night-1 choice mid-ladder — but at + ★0.0 the clamp eats it, and that is precisely the fee-maximizing player the ruling was + written to price. D fixed the PAPER half only (the invoice printed "−½★" four rows above + "★0.0 → ★0.0") and left the rule to you. Candidates named in their entry; the floor, the + clamp, or a second currency is a John question. + + **Deploy: still owed, now two sprints.** tools/deploy_hardyards.sh is permission-gated in + the integrator's session (ssh + docker to the games VPS). The standing rail says the gap + never exceeds one sprint, and it is now at two — this is the loudest this log can say it.