HardYards/web/world/js
m3ultra 13fc4bd14d Land needsLadder on the work field, measured against E's real carport
SPRINT10 gate 1. Adopts SPRINT10's spelling — `work: 'bracket' | 'cloth'` — as
canonical over the boolean I proposed in Sprint 9: naming the mechanism
positively beats a negation, and it's the field A is emitting. Sprint 9's
`worksAtBracket` is still honoured so nothing that already sets it breaks, and
`type === 'house'` remains the fallback, so site_01 is a no-op (verified live:
no anchor there carries either field, and fascia/post/tree verdicts are
unchanged).

Keyed to E's SHIPPED carport_01_v1.glb rather than my invented numbers, and it
confirms the audit exactly — it also carries BOTH mechanisms on one structure,
so a per-structure rule would still have been wrong:
    beam_anchor_01/02  y=2.36  anchor_type "carport"       rating_hint 0.22
    post_anchor_01/02  y=1.75  anchor_type "carport_post"  rating_hint 0.30
The beam sits over a 1.72 m person's 2.20 m reach and needs the ladder; the post
doesn't. Neither is typed 'house', so un-declared they BOTH fall back to "ground
work" and canReach waves a 2.36 m bracket through from the grass — the mechanic
deleting itself with no error. That regression is now pinned by a test.

E: the beam is the double trap — your worst rating in the game AND the one that
costs a ladder trip. That reads as a rule, not a bug, which is what §Lane D asks
for. A: the mapping you want is beam→bracket, post→cloth.

63 Lane D asserts headless, 288/0/0 in the browser.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 15:28:47 +10:00
..
tests Land needsLadder on the work field, measured against E's real carport 2026-07-17 15:28:47 +10:00
broom.js Lane D: calibrate the douse to B's real ponds; fix the sagging-belly refusal 2026-07-17 09:23:17 +10:00
camera.js Add graybox yard, third-person camera and game shell 2026-07-16 21:33:42 +10:00
contracts.js Land ponding v1: rainwater pools on flat sails and kills them 2026-07-17 03:25:46 +10:00
debris.js Fix debris ground friction, cloud seam and yard coords 2026-07-16 21:50:41 +10:00
hud.js Merge Sprint 8; the week is live; balance harness stabilized 2026-07-17 14:02:53 +10:00
interact.js Lane D: calibrate the douse to B's real ponds; fix the sagging-belly refusal 2026-07-17 09:23:17 +10:00
ladder.js Land needsLadder on the work field, measured against E's real carport 2026-07-17 15:28:47 +10:00
main.js Venturi: per-site wind personality for site_02 (the corner block funnels the southerly) 2026-07-17 14:26:24 +10:00
player.js Lane D: the broom, greyed prompts, and the label pass 2026-07-17 03:03:02 +10:00
player.sim.js Lane D: the ladder sub-system (decision 12) 2026-07-17 02:34:49 +10:00
rigging.js Fabric + 0.40 as one landing: the wild night has a clean $80 win 2026-07-17 14:25:59 +10:00
rigging.selftest.js Land ponding v1: rainwater pools on flat sails and kills them 2026-07-17 03:25:46 +10:00
sail.js Redesign the settled-at-entry guard: ask the cloth, not the corners 2026-07-17 15:01:09 +10:00
sail.selftest.js Guard pond accessors before attach; caught driving the live game 2026-07-17 03:32:02 +10:00
skyfx.js Fabric + 0.40 as one landing: the wild night has a clean $80 win 2026-07-17 14:25:59 +10:00
testkit.js Gate 0: name the harness dispute's cause; make skips real (testkit) 2026-07-17 10:21:01 +10:00
weather.core.js Venturi: per-site wind personality for site_02 (the corner block funnels the southerly) 2026-07-17 14:26:24 +10:00
weather.js Venturi: per-site wind personality for site_02 (the corner block funnels the southerly) 2026-07-17 14:26:24 +10:00
week.js The week: five nights, one wallet, and an ending that tells the truth 2026-07-17 13:13:44 +10:00
world.js Merge Sprint 6 lanes; wire hidden_by_default; document the balance harness dispute 2026-07-17 09:47:29 +10:00