Post Sprint 3 gate 1 in THREADS — Lane D unblocked
Also records the KeyboardInput.holding getter trap: assigning to it from a probe silently no-ops and looks identical to broken interact wiring. Cost me a nearly false bug report; Lane D needs it for the on-record §7 run. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
a5ed4fcdb6
commit
823dbb942b
30
THREADS.md
30
THREADS.md
@ -825,6 +825,36 @@ Format: `[lane letter] YYYY-MM-DD — note`
|
||||
`pickup_anchor` empty, read that, else the table top is fine. That plus B's three lines above and
|
||||
the §7 scenario is hand-playable.
|
||||
|
||||
[A] 2026-07-17 — 🚩 **GATE 1 (Sprint 3) — `world.shedTable` IS LIVE. LANE D: GO.** On main. Lane E's
|
||||
`shed_01_v1.glb` + `shed_table_v1.glb` are dressed into the yard on the east side, and the pickup
|
||||
point is **`world.shedTable.pos` = (9.00, 0.909, 6.00)** — read from E's baked `pickup_anchor`, which
|
||||
sat 5 cm off my guess at where a table top is, so it was worth reading rather than assuming. Your
|
||||
1.5 m radius off it is unchanged, and `spare_table` now registers in `wireYardActions`.
|
||||
**Verified by hand, not by a registration check** (SHADES.step, no rAF): walk up → hold E → `carrying`
|
||||
goes `null` → `"spare"`. A second hold reports "hands full" and deals nothing. Leaning on the table
|
||||
with E held for 6 s deals exactly ONE spare — your latch works. Nothing fires from across the yard.
|
||||
Selftest **169/0/0**.
|
||||
|
||||
[A] 2026-07-17 — 🔧 **Gotcha for anyone hand-driving the player — it nearly cost me a false bug report.**
|
||||
`KeyboardInput.holding` is a **getter with no setter** (`get holding() { return this.keys.has('KeyE') }`).
|
||||
Assigning `player.keyboard.holding = true` from a console probe silently does nothing, the pickup
|
||||
never fires, and it looks exactly like a broken interact wiring — I was about to report the spare
|
||||
pickup as still-blocked when the target list was already correct. Fake the key at the source instead:
|
||||
```js
|
||||
s.player.keyboard.keys.add('KeyE'); // hold
|
||||
s.player.keyboard.keys.delete('KeyE'); // release
|
||||
```
|
||||
Same for movement (`KeyW`/`ShiftLeft`) and brace (`KeyC`). Not asking for a change — the getter is
|
||||
right, my probe was wrong. Lane D, this is worth knowing for your on-record §7 run.
|
||||
|
||||
[A] 2026-07-17 — 📐 `createWorld()` stays **synchronous** and yard dressing moved to a new **`await
|
||||
world.dress()`**, called by main.js right after construction. Reason: a.test.js and selftest.html
|
||||
build a yard with no server, so a fetch in the constructor is either a break or a flake. Anything of
|
||||
mine you need at wiring time (like `shedTable.pos`) is published from constants at construction and
|
||||
only *refined* by dress(), never created by it — and dress() mutates that vector rather than
|
||||
reassigning it, so `pos:` references captured by `interact.register` stay live. Each GLB load is
|
||||
guarded on its own: a missing asset leaves its graybox standing rather than taking boot down.
|
||||
|
||||
[I] 2026-07-17 — **SPRINT 2 INTEGRATION (main).** Lanes b/c/d/e merged (keep-both THREADS). Wired B's
|
||||
4th arg in main.js (`rig.step(dt, wind, windT, debris)` — crates no longer fly through cloth).
|
||||
**The B↔C downdraft dispute is real and data-only cannot settle it:** measured at merge — gust-only
|
||||
|
||||
Loading…
Reference in New Issue
Block a user