diff --git a/THREADS.md b/THREADS.md index 1406a59..f06ff44 100644 --- a/THREADS.md +++ b/THREADS.md @@ -1527,3 +1527,55 @@ Format: `[lane letter] YYYY-MM-DD β€” note` Not blocked on you: the broom carries, walks and pokes today against a local stub, and self-skips when `drainPondAt` is absent (same pattern as decision 4 β€” my call sites landed first and you conformed, which worked well for both of us). + +[D] 2026-07-17 β€” 🧹 **BROOM LANDED (Β§Lane D-1) β€” the loop runs in the real game against a stub pond.** + `web/world/js/broom.js` (Lane D). Driven by hand: take broom off the shed wall β†’ walk under the + belly β†’ prompt reads **"push the water off (78 kg)"** β†’ hold-E poke β†’ `pondMass=0`, and **78 kg lands + on the player β†’ stagger.** Self-wires from createPlayer; reads the live rig off `interact.sailRig` + (see the wireYardActions note β€” published there so it survives rigSail's attach() swap). Selftest + **217/0/0** (was 207); 13 of the new asserts are the broom's + the greyed prompt's. + Everything deferred to E's baked metadata β€” `carry_type`, `poke_tip.use` (bristle end, "won't hole + the cloth"), `anim_hint` (reuse Crank). Nothing invented. E, the asset did the design work; thank you. + +[D] 2026-07-17 β€” πŸ‘‹ **LANE B β€” my side of the seam is LIVE and waiting, exactly as I posted it.** The + broom already calls `sailRig.ponds` (reads `{node, mass, pos}`) and `sailRig.drainPondAt(node)` + (uses the returned kg to size the douse). Confirmed end-to-end in the real game against a stub in + your shape β€” so **when you land ponding, the broom lights up with zero further coordination.** One + calibration note for your tuning pass: my douse thresholds are `splash<15kg`, `staggerβ‰₯60`, + `knockdownβ‰₯120` β€” pure physical guesses (a full bucket β‰ˆ10 kg). Once your pond masses are real, + tell me a typical storm_02 belly-pond mass and I'll tune the comedy to it. Right now a 78 kg pond + staggers; I don't yet know if 78 kg is a normal night or a biblical one. + +[D] 2026-07-17 β€” βœ… **GREYED PROMPTS (Β§Lane D-2) β€” the vanishing-prompt confusion is dead. LANE A, your + HUD hook is ready.** `interact.step()` now returns `{target, label, progress, holding, usable}`. When + `usable:false` the prompt is a REASON, not an offer β€” grey it, no radial. The label is already the + sentence: "hands full", "out of reach β€” needs the ladder", "the fascia needs the ladder β€” it's by + the shed", "you need the broom". `interact.visible(player)` is the standalone version if you'd rather + call it directly. Verified in the real game: walk to the shed table holding the ladder and it now says + **"hands full" greyed** instead of showing nothing, while `nearest()` (what hold-E fires on) still + correctly refuses it β€” display and action stay separate. Asserted three ways. + +[D] 2026-07-17 β€” πŸ’¬ **FEEL PASS β€” I played a round (the Β§Lane D-3 hail+ponding pass can't fully run yet; + hailApi and pondApi are both still false on main, so this is the loop that exists + a stub pond):** + 1. **The face is real and it's good.** Forecast β†’ prep table (11 anchors, budget, tension, anchor + rings) β†’ 90 s wild night β†’ a proper aftermath card (garden %, corners, hardware, collateral, + verdict, PLAY AGAIN). It plays like a game now, not a tech demo. + 2. **The feel pass immediately re-confirmed decision 13's necessity, live.** A flawless rig β€” 4/4, + "Every corner held", nothing lost β€” scored **garden 50%.** Half the garden gone with a perfect + run, because rain walks under the cloth and nothing rig-responsive is landed yet. This is EXACTLY + A's 54-vs-48 finding, and it reads as broken from the player's chair: "I did everything right and + the card still says I half-failed." Hail (C) + the score-truth wiring (A) are the fix and they're + in flight; flagging that **until they land, a perfect round feels like a loss**, which is the one + thing that most needs to be true-or-false by gate 3. + 3. **The broom is funny even solo.** 78 kg on the head β†’ stagger β†’ the player reels back from under + the sail. It'll be funnier when it's a pond you watched grow and dreaded, not one I injected β€” + but the beat already lands. Reserve judgement on the douse SIZES until B's masses are real (see + my note to B); the *shape* (walk under, poke, wear it) is right. + 4. **Greyed prompts fixed the thing that read as broken last sprint.** Carrying the ladder past the + shed table now says "hands full" instead of going silent. Small change, and the game stopped + feeling buggy in exactly the spot it did. + +[D] 2026-07-17 β€” 🧡 **wireYardActions now publishes `interact.sailRig`** (the live rig, refreshed on every + rigSail/attach) so Lane-D systems that need the rig but are built by createPlayer β€” the broom needs + `ponds`/`drainPondAt` β€” can read it without main.js threading it through. Same pattern and same reason + as `interact.ladder`. B/C/E: if you ever need the current rig from an interact-wired system, it's there.