HardYards/web/world/js
type-two 05337c2989 Lane B S13: consumable spares — close D's free-infinite-spares hole (count half)
D measured it live: interact.js gated the shed-table spare on !player.carrying
alone, never reading the count, so a player who bought zero walked off with
unlimited free shackles mid-storm — the spare economy the ladder cost is
balanced against, free on the spare side, on the public deploy.

My half of the cross-lane seam: RiggingSession gains sparesRemaining (getter)
and takeSpare(). `spares` is the shed-table count, so takeSpare() decrements it
— which also fixes a second bug for free: main.js:720 refunds
session.spares * SPARE_COST as "a spare you never had to use", so you were being
refunded for spares you'd already spent. Decrementing makes that honest with no
change to main.js.

Wiring stays A's (thread the session into wireYardActions) and the gate+consume
stays D's (two lines, posted in THREADS, D offered). Asserted: take-without-buy
fails, table runs dry, consumed spare no longer refundable.

rigging.selftest 21/21.
2026-07-18 01:09:51 +10:00
..
tests Merge remote-tracking branch 'origin/lane/c' 2026-07-17 21:13:57 +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 Sprint 11 gate 1: three rulings — enum widened, carport priced, venturi reconciled 2026-07-17 17:20:11 +10:00
debris.js Fix debris ground friction, cloud seam and yard coords 2026-07-16 21:50:41 +10:00
hud.js Lane B S13: gate-3 smalls — rig.t was a determinism bug, + prep readouts 2026-07-18 01:04:02 +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 QA pass: fix Enter storm-skip (deployed), log findings; Sprint 13 plan + prompts 2026-07-17 23:26:47 +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 Lane B S13: consumable spares — close D's free-infinite-spares hole (count half) 2026-07-18 01:09:51 +10:00
rigging.selftest.js Lane B S13: consumable spares — close D's free-infinite-spares hole (count half) 2026-07-18 01:09:51 +10:00
sail.js Lane B S13: gate-3 smalls — rig.t was a determinism bug, + prep readouts 2026-07-18 01:04:02 +10:00
sail.selftest.js Lane B S13: gate-3 smalls — rig.t was a determinism bug, + prep readouts 2026-07-18 01:04:02 +10:00
skyfx.js Sprint 12 integration: merge all lanes (335/0/0), skyfx effective-rating creak, [I] entry 2026-07-17 21:17:45 +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 Add validateSiteWind — the site JSON's wind block fails loud (SPRINT10) 2026-07-17 15:30:00 +10:00
weather.js Land leadFor(): the job sheet's per-night forecast lead 2026-07-17 17:14:53 +10:00
week.js Paste E's letterhead/invoice kit into hud.js; rule HARD YARDS + sequential ABN 2026-07-17 20:27:18 +10:00
world.js Rule the gutter $90 (E's proposal adopted); teach collateralFor/wreckStructure the house; action B's effective-rating flag 2026-07-17 20:45:49 +10:00