HardYards/web/world/js/tests
m3ultra 106a33cb31 Lane D: calibrate the douse to B's real ponds; fix the sagging-belly refusal
Rebuilt the broom against B's FROZEN contract, which is not the shape I asked
for and is better: pondCentroid() (one pond, not a list — B's belly pools into a
single heaviest place) and drainPondAt(node, dt, radius) draining PER FRAME and
returning the kg shed that call. Added interact `onHold` for actions that do work
over the hold rather than at the end of it; the total is only knowable by
accumulating. Falls out nicely: an interrupted poke sheds only what it got
through, which is the honest rule.

Calibration, measured on B's live sim rather than modelled (flat rig, storm_02,
pond mass at poke → kg shed → outcome):
     8s ·  85 kg →  76 shed → wet      (caught it before the ticker)
    12s · 152 kg → 104 shed → stagger  (you answered the warning)
    20s · 281 kg → 182 shed → knocked  (you ignored it)
Bands sit under those so all three are REACHABLE — my Sprint-5 guesses (60/120)
would have flattened the player on every poke, and my first pass at real numbers
(150/350) put the knockdown above anything this rig can shed, i.e. dead code.
That is the StumbleBack lesson exactly, so d.test.js guards reachability with the
measured numbers and will fail loudly when gate 1 moves pond masses.

Bug the live sim found that no stub could: a loaded belly SAGS toward you — real
ponds ride from y=1.2 down through y=-1.0 — and my reach gate rejected `up < 0`,
so the broom answered "nothing pooling here" with 281 kg hanging over the garden.
Sagging toward you is the mechanic working. Gate is now a physical band between
sagFloor and reach, with the floor set between two measured cases: a live 281 kg
belly at y=-0.8 (pokeable) and post-tear wreckage at y=-4.5 (nothing to poke).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:23:17 +10:00
..
a.test.js Tripwire the wind router; take Lane C's gardenExposure helper 2026-07-17 02:55:32 +10:00
b.test.js Align sail lane to contracts.js; free blown corners so they flog 2026-07-16 21:55:37 +10:00
c.test.js Hail — the system that makes the garden score respond to the rig (decision 13) 2026-07-17 03:14:27 +10:00
d.test.js Lane D: calibrate the douse to B's real ponds; fix the sagging-belly refusal 2026-07-17 09:23:17 +10:00
e.test.js Add hail juice, plant shred, and a way to screenshot the game 2026-07-17 03:03:54 +10:00
run-node.mjs Add wind field, storm timelines and weather selftest 2026-07-16 21:38:12 +10:00
weather.selftest.js Hail — the system that makes the garden score respond to the rig (decision 13) 2026-07-17 03:14:27 +10:00