HardYards/web/world/js
type-two 008de38766 Lane D S18 gate 1.3: THE KNIFE — hold X at a cleat, and the verbs finally on the glass
DESIGN.md line 165's signature decision gets its verb. One hold, the whole
sail, at a cleat you can reach from the grass — because the corner taking the
$180 carport is bracket work and the ladder is a luxury a 5.9-second window
does not have. That is the mechanic, not a limitation: the ladder is for
repairs, the knife is for the seconds you actually have.

X and not a third hold-E target (interact.nearest picks by DISTANCE, and the
one input a player must never misfire is the irreversible one). A hold and not
a press, so the decision has a length and a gust can take it off you. And it
never writes player.busy: interact.js owns that state, and a second writer is
how a player gets stranded in a lock nothing releases.

The panel is the other half, and it is five sprints overdue. interact.step()
has always returned {target, progress, label, usable} "for hud.js to draw the
prompt + radial" — and nothing ever drew it. Every sentence this lane wrote
for the player's hands ("out of reach — needs the ladder", "push the water off
(169 kg)", "hands full") has never reached a player. Same disease as setFabric:
the code was right, the wire was missing, and no assert could see it because
the gap was on the glass. It lives in knife.js rather than player.js because
player.js statically imports GLTFLoader, so the suite has never been able to
reach it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 21:29:21 +10:00
..
tests Merge remote-tracking branch 'origin/lane/b' 2026-07-25 20:05:01 +10:00
anchor_ratings.gen.js Lane E S18 gate 4: THE GLASSHOUSE TIER — the hail-net frame, and the apex made reachable 2026-07-25 19:45:42 +10:00
board.js Lane A S18: ⚖️ E's items answered — 0.80 RULED, palette hunk applied, and the second law deleted because I proved it cannot fire 2026-07-25 20:01: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 Sprint 13 gate 2.5: two camera fixes — spawn framing, aftermath cloth-swallow 2026-07-18 01:18:29 +10:00
contracts.js Lane E S18 gate 4: THE GLASSHOUSE TIER — the hail-net frame, and the apex made reachable 2026-07-25 19:45:42 +10:00
debris.js Lane C S18: the mid-storm entry seam — a crate is a pure function of its event 2026-07-25 19:21:29 +10:00
editor_score.js Lane B S17 gates 0.3 + 2: the card names its cloth, the session speaks for the client 2026-07-21 02:45:49 +10:00
editor_storm.js Lane C S16: gate 3 lands — the fabric bet pinned, forecast argues it, storm in the lists; selftest 438/0/0 2026-07-20 20:33:10 +10:00
editor.js Lane A S18: ⚖️ E's items answered — 0.80 RULED, palette hunk applied, and the second law deleted because I proved it cannot fire 2026-07-25 20:01:47 +10:00
editor.wind.js Lane C S15: converge gate 2.2 onto B's THREADS proposal — B's filename/global/source/default taken, storm+time API kept; THREADS: seam receipt + gate-1.3 storm-side zero-delta confirmation 2026-07-20 18:23:31 +10:00
garden.js Sprint 13: garden model exported as garden.js (B's gate-1.2 blocker) + applyMute(sky,on) as a value 2026-07-18 12:44:37 +10:00
hud.js Lane A S18: 👁️ played the callout — five bugs 535 green asserts could not see, all fixed and pinned; gate 5's A half 2026-07-25 19:53:47 +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
knife.js Lane D S18 gate 1.3: THE KNIFE — hold X at a cleat, and the verbs finally on the glass 2026-07-25 21:29:21 +10:00
ladder.js Lane D: ladder survives a mid-carry knockdown, and the prompt names the right bracket 2026-07-18 01:00:01 +10:00
main.js S18 integration: keep the session fallback on the fabric seam — SHADES.rigSail is a third caller neither lane enumerated (A: revert on sight if you disagree) 2026-07-25 20:16:45 +10:00
player.js Lane D S18 gate 1.3: THE KNIFE — hold X at a cleat, and the verbs finally on the glass 2026-07-25 21:29:21 +10:00
player.sim.js Lane D: the player leans into the wind (gate 2.4 — as a root pose, not a clip) 2026-07-18 01:33:47 +10:00
ratings.js Lane E S15 gate 1.2: ratings.js — factoryExtras(type), the runtime end of the manifest; refuses to guess for ambiguous types, warns once 2026-07-20 17:49:38 +10:00
rigging.js Lane B S18 gate 1: commit(rig, {at}) carries the mid-storm clock, so seeding it cannot be forgotten 2026-07-25 20:03:13 +10:00
rigging.selftest.js Lane B S18 gate 1: commit(rig, {at}) carries the mid-storm clock, so seeding it cannot be forgotten 2026-07-25 20:03:13 +10:00
sail.js Lane B S18 gates 2+3+1: ⚠️ THE VARIABLE IS POROSITY; the clean boundary is DWELL; the knife 2026-07-25 19:53:06 +10:00
sail.selftest.js Lane B S18 gates 2+3+1: ⚠️ THE VARIABLE IS POROSITY; the clean boundary is DWELL; the knife 2026-07-25 19:53:06 +10:00
skyfx.js Lane C S13 gate 2.3 + D's sliver: ambient leaves from 30 km/h; hail pool hides at zero 2026-07-18 11:51:26 +10:00
stormgen.js Lane C S16: makeStorm(seed) — seeded storms inside authored envelopes (gate 3.2) 2026-07-20 20:11:34 +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 Lane C S16: gate 3 lands — the fabric bet pinned, forecast argues it, storm in the lists; selftest 438/0/0 2026-07-20 20:33:10 +10:00
weather.js Lane C S18 gate 1: the dispatch — midStormRead, and the honesty gate over storms nobody forecast 2026-07-25 19:37:45 +10:00
week.js Lane A S18 gate 1 spine: 🚨 THE EMERGENCY CALLOUT — a night that starts in storm, a DISPATCH, double rates, the ledger unchanged 2026-07-25 19:30:19 +10:00
world.js S18 integration: apply E's gate-5 hunks (E specified, A blessed) — the site names its own collateral target, the bake stops clobbering it, and validateSite refuses the clash 2026-07-25 20:04:51 +10:00