Merge origin/main and retain both format-scope additions.
Give StarrySky a separate black environment cube map and release it on destroy.
Guard anime updates when StarrySky is absent, require a visible Normal sky
before anime QA, and compare a lit airplane against black and white controls.
Document the sky background contract and its verification.
Co-Authored-By: GPT-6 (Codex) <[email protected]>
- qa-anime-sky keeps only the Milky Way case; the satellites and keyless
cases checked an anime shader this branch no longer changes.
- Drop qa-sky-sun-moon.mjs: the viewer-options unit test covers it.
- VisualEffects sets the sky's visibility directly: the viewer always
carries a StarrySky and never outlives the effects.
- Drop the unused star intensity knob, the malformed-row tolerance for
our own pack, the test-only Transforms parameter and a private-name test.
- DATA_SOURCES points to sky/README.md instead of repeating it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- VisualEffects.destroy() puts skyBox.milkyWayVisibility back to 1, as it
already restores the borrowed bloom stage, so a surviving viewer does not
keep a faded sky.
- Rename scripts/qa-anime-space-mask.mjs to qa-anime-sky.mjs: rewrite the
header for the current approach, drop --space-expr and --repo, import
puppeteer as a package, reject unknown cases and count the milkyway case
as reached only while the anime stage is on.
- Put both sky QA scripts under format:check.
Co-Authored-By: Claude Opus 5.5 <[email protected]>