/** * Lane B selftests — cloth, corner loads, failure cascade. * * Lane B owns this file. Lane A pre-created it so that adding your suite never * means editing selftest.html — if all five lanes shared that file it would be * the one guaranteed merge conflict in the repo. * * The asserts PLAN3D §5-B asks for, once sail.js lands: * 1. hypar sheds load — twisted rig's peak corner load < flat rig's peak, * same storm, same hardware. This is the thesis of the whole game; if it * doesn't hold, the wind force is being applied per-node instead of * per-face. * 2. cascade — break one corner at a fixed t, a neighbour's load spikes ≥2×. * 3. determinism — two runs, same inputs, byte-equal load traces. * * Useful imports when you get there: * import { FIXED_DT, STORM_LEN, HARDWARE, createStubWind } from '../contracts.js'; * import { assert, assertLess, fixedLoop } from '../testkit.js'; * Drive time with fixedLoop(), never rAF. Use createStubWind({seed}) until * Lane C's weather.js lands — but don't tune against it, it's uniform in space. */ /** @param {import('../testkit.js').Suite} t */ export default function run(t) { t.skip('sail.js not landed yet — Lane B'); }