Repository navigation
fix(platformer): visible waterfall and own gradient sky; core reports PMREM-size and ignored-opacity traps - #491
Merged
Merged
Conversation
Asset-free builds now serve { version: 1, entries: {} } so the loader probe never 404s.
A manifest that lists nothing must not reject files a project serves verbatim from public/.
jonit-dev
enabled auto-merge
October 11, 2026 21:34
Guard the render-trap audit against creating or mutating appearance while allowing its read-only diagnostics. Expect empty manifests in receipt cleanup and the shared template compiler check, matching the asset-free compiler contract. Verification: 38 core/asset contract tests and the platformer compile case pass.
Contributor
Author
Screenshots: BEFORE (top) vs AFTER (bottom), real GPU (Intel gen-9, WebGPU, headed)Two independent runs per arm, three poses. A fresh read-only visual judge rated IMPROVEMENT on 6 of 6 frames, with no lighting regression. All images are on the Run 1Run 2BEFORE waterfall, zoomedRejected first attempt (gradient used as the light: olive coins, cool rock) vs final |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.










TL;DR: The platformer (fox game) gets visible waterfalls and its own stylized gradient sky in place of the leaked Poly Haven photo. Its lighting stays the same as before. Core now reports the two silent three.js traps behind these bugs, so CI fails if they come back.
Why
The owner reported two platformer bugs: the waterfall did not render correctly, and a default photo skybox had leaked into the kit.
flat()inrender/materials.tspassedopacitywithouttransparent: true. three then draws the sheet opaque. WithdepthWrite: false, it drew first (front-to-back sort) and the cliff behind painted over it. Gem shine and the fox blob shadow had the same bug.sky.jpgin every kit. The original sandbox fox game used a blue gradient dome. Onlyplatformerchanges here. The other kits keep the photo, as PRD-470 decided.PMREMGeneratorsizes its cube fromequirect.width / 4. An 8 px gradient gave a 2 px cube, belowLOD_MIN4, so the environment was empty.404 /assets.manifest.jsonin an asset-free gameassets/, but the core loader always fetches it.What changed
render/materials.ts:flat()setstransparentwhenopacity < 1.render/sky.ts+ newrender/skyEnvironment.ts: the background is a stylized gradient. The environment is a separate texture whose hemisphere means match the photo's measured fill. This keeps the lighting the kit was tuned under: gold coins stay gold and rock stays warm.sky.jpgno longer ships with the kit (a scaffold test asserts this).compile.ts: an asset-free project gets{ version: 1, entries: {} }. coreassets.ts: an empty manifest falls back like a missing one, sopublic/files still load verbatim.profiling/render-trap-audit.ts, run once per scene entry:TN_ENVIRONMENT_TOO_SMALL(equirect environment narrower than 64 px) andTN_OPACITY_IGNORED(visible material withopacity < 1and notransparent/alphaHash). Both go toconsole.error, so every scenario withnoConsoleErrorsfails. Golden-path runs those on CI. CI drops pixel scenarios on software adapters, which is why no gate saw these bugs.Evidence
move.playtest.json(TN_PLAYTEST_ALLOW_SOFTWARE=1, as CI):flat()withouttransparentreportsTN_OPACITY_IGNORED; an 8 px environment reportsTN_ENVIRONMENT_TOO_SMALL; the fixed build reports neither. Locally, all three runs also exit 1 on SwiftShadercreateBufferdevice loss, a known local-lane problem. CI's golden-path is the authoritative green.render-trap-audit.spec.ts16 pass (red first); core asset/manifest specs 67 pass;looks.spec.ts+scaffold.spec.ts87 pass; empty-manifest compile spec red 4 → green 4; empty-manifest loader spec red → green.build:web0 errors,typecheck0 errors, 0 console/network errors on real GPU.e6ed27869:template-assets-compile-2shooter cases, thebuild.spec.tsaudio-worker 60 s timeout, and the recast-bundle 15 s timeout.Screenshots (BEFORE top, AFTER bottom, real GPU)
Rejected first attempt (gradient used as light: olive coins, cool rock):


Far poses and the BEFORE waterfall zoom are on the
platformer-sky-waterfall-screenshotsbranch.Not done / limits
pnpm test. CI covers these.racing(part toon) should also lose it is an open owner question.