selftest.html only imports; each lane owns js/tests/<letter>.test.js. Five lanes sharing one selftest.html would be the single guaranteed merge conflict in the repo, so the stubs are pre-created with each lane's PLAN3D asserts written into the header. No rAF anywhere: it's throttled in a hidden tab, so a rAF-driven selftest would pass only while you watch it. fixedLoop() drives time instead. Lane A's suite covers the §5-A acceptance criteria, including "camera never clips through house" — stated as the underlying invariant (no solid between the player's head and the camera) so it survives Lane E swapping the house GLB. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
26 lines
1.1 KiB
JavaScript
26 lines
1.1 KiB
JavaScript
/**
|
|
* Lane C selftests — wind field, storm timelines, rain, debris.
|
|
*
|
|
* Lane C owns this file. Lane A pre-created it so adding your suite never means
|
|
* editing selftest.html.
|
|
*
|
|
* The asserts PLAN3D §5-C asks for, once weather.js lands:
|
|
* 1. gust telegraph lead ≥ 1.2 s — the promise the storm rests on. Lane A's
|
|
* suite already asserts this against the stub wind (see a.test.js,
|
|
* 'gust telegraph always gives at least 1.2 s of warning'); lift that test
|
|
* onto the real wind.sample and delete the stub version's claim to it.
|
|
* 2. wind.sample continuity — no frame-to-frame jump beyond a sane bound, or
|
|
* the cloth explodes and it looks like Lane B's bug.
|
|
* 3. storm JSON schema validation for everything in data/storms/.
|
|
*
|
|
* Useful imports:
|
|
* import { FIXED_DT, STORM_LEN } from '../contracts.js';
|
|
* import { assert, assertLess, fixedLoop } from '../testkit.js';
|
|
* wind.sample(pos, t) must be pure in (pos, t): selftest samples out of order.
|
|
*/
|
|
|
|
/** @param {import('../testkit.js').Suite} t */
|
|
export default function run(t) {
|
|
t.skip('weather.js not landed yet — Lane C');
|
|
}
|