HardYards/web/world/js/tests
type-two 82a52aa014 Lane A S18 gate 1 spine: 🚨 THE EMERGENCY CALLOUT — a night that starts in storm, a DISPATCH, double rates, the ledger unchanged
setPhase('storm', {at}) is the whole engine change: windTime() already returns
phaseT during a storm, tick() already ends at STORM_LEN, so an emergency night
is 60s long inside weather that is already working. No new phase.

EMERGENCIES, scheduled per night, not a POOL entry — a seventh pool entry would
re-roll every night's draw, and the one-variable law needs an author to place a
set-piece. Diffed the whole week against HEAD: exactly one line moved, and what
it replaced was corner_block_southerly — the same yard and the same storm as an
ordinary job. The job type is literally the only variable.

⚖️ Rulings: emergency rate ×2.0 (DESIGN.md line 29, canon, UNMEASURED-by-play);
a corner that ARRIVED broken bills nothing, wrecks nothing, books no warranty
and costs no standing (`theirs` on the rig record — without it the game charges
you for a cowboy's carabiner and books you a free callout to fix his work); the
inherited steel does not come home; the ute carries one free spare, or triage is
a verb with no object.

THE ONE-VARIABLE LAW IS NOW CODE: oneVariableOffences() accuses, offersFor()
throws, three-way vacuity guard. E's glasshouse cannot be the emergency's debut
stage no matter who wires what.

The DISPATCH is defined by its refusals: no schedule, no total, no AMOUNT DUE —
nobody costed this job. It prints the call, C's mid-storm read (feature-detected
through a namespace import), the rig that is already up with the down corners
marked ON THE GROUND, and the rate. Pinned in DOM, refusals included.

Seams live and waiting: B's breakCorner door, C's midStormRead, D's cutAway
event (tallied, carried to the settlement, printed on the invoice).

Selftest 535/0/0 — 528 + 7, the exact sum.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 19:30:19 +10:00
..
a.test.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
b.test.js Lane B S14 gate 2.3: pin the editor's scored wind to the game's played wind 2026-07-18 16:16:29 +10:00
balance.test.js Lane B S13: kill the marked fake — garden model comes from A's garden.js everywhere 2026-07-18 13:50:15 +10:00
c.test.js Lane C S17 gate 1 (cont.): the OFFER BAND and the PAIRING law — night 7 stops lying 2026-07-21 03:07:02 +10:00
d.test.js Lane D S17 gate 3.2: THE POOL YARD — authored cold, in the game only by being chosen 2026-07-21 03:53:20 +10:00
e.test.js Lane E S17 gate 3.1: THE CORRODED TIER — mutations restored, tell verified at 20 m, droop pinned to geometry 2026-07-21 01:51:57 +10:00
run-node.mjs Add wind field, storm timelines and weather selftest 2026-07-16 21:38:12 +10:00
weather.selftest.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