HardYards/web/world/js/tests
m3ultra 5d1d0895f2 Lane D: retune stumble/shove against the REAL storm_02, pin to storm JSON
The pre-merge thresholds were tuned against a mock that injected +18 gusts. In
the actual storm_02, gusts-over-baseline peak at 12.1 m/s — so stumbleGust:17
was above every gust in the game and StumbleBack was unreachable dead code, and
shoveGustMin:8 (a low bar in the prototype's 12-38 units) had become a high bar
in ours and threw away most of the shove.

Retuned against the real storm profile (12 gust events, peaks 12.1..6.1, 4
knockdowns, maxExposure 1.55): stumbleGust 17→9, shoveGustMin 8→4. A wild night
now reads shoved (26s of 90) → stumbling (4) → floored (2); a calm day stays 0/0.

d.test.js now loads the real storm JSON via weather.loadStorm and asserts every
threshold is REACHABLE and correctly ordered — the guard the first tuning lacked.
This matters because decision 8 (B+C) reweights the downdraft this sprint, which
is exactly the kind of change that silently killed StumbleBack the first time.
Also pinned the emergent 'unbrace into a gust → stumble' behaviour.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 01:25:17 +10:00
..
a.test.js Add selftest harness with one suite per lane 2026-07-16 21:33:42 +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 Rain stops at the cloth (SPRINT2 Lane C.3) 2026-07-17 00:10:29 +10:00
d.test.js Lane D: retune stumble/shove against the REAL storm_02, pin to storm JSON 2026-07-17 01:25:17 +10:00
e.test.js Make rake_pivot a real pivot; log Sprint 2 in THREADS 2026-07-17 00:56:15 +10:00
run-node.mjs Add wind field, storm timelines and weather selftest 2026-07-16 21:38:12 +10:00
weather.selftest.js Add vertical gusts, freeze debris.pieces, fix fog restore 2026-07-16 23:58:31 +10:00