Ships the CI fix together with the test-harness work that supports it, so
every tier stays honest on every machine.
scripts/test.sh
- T6 records missing-artifact failures as skips when no imported game3 data
exists at all (empty CI identity, no data/generated): the data-driven
top-level suites assert instead of self-skipping on a fresh runner. The
skipped suite names are printed with that reason; with data present the
same failure gates exactly as before.
- The T3 content verdict now weighs the exit code and the FAIL-line allowlist
together. The exit code used to be discarded, so a mid-run crash
(unresolvable require under POKEPORT_DATA_DIR) printed green checks, zero
FAIL lines, and passed. A non-zero exit with no FAIL line is reported as a
crash with the error line captured - a crash is not a pass.
Test-suite fixes, each run green (several twice)
- tests/run_tests.lua: restore per-suite leaked state and add the Data seam,
so one suite's loaded data cannot leak into the next.
- tests/mod_runtime_tests.lua: save and restore the environment around each
case.
- tests/parity_ss_anne_rooms.lua: _loadModule raw-order fix (30/30).
- tests/parity_ss_anne_departure.lua: the Data seams plus the playMap stub.
- playMap stubs for parity_rival_walkoff, parity_tower_rival,
parity_silph_rival_bug2241 and parity_ss_anne_guard.
- Class-B seams in mod_registry_tests, mod_catalog_tests, mod_ui_tests,
parity_ball_shake_anim, parity_wavy_screen, parity_hidden_coins_bcd_bug1810,
parity_mart_stock and parity_rocket3_sight_bug1814.
Together these close the 57 failing checks that were on the content tier
(allowlist stays at 0), so a content run on a machine with imports ends
ALL TESTS PASSED.