Secret Slide opaque black background checkpoint - 2026-10-24
Status: VERIFIED rendering checkpoint; complete slide gameplay PARTIALLY VERIFIED.

Muted original development level-picker entry reaches level29, mission1. Its
original castle-lobby EXIT destination is also29. Runtime requests CLEAR_COLOR
3f1f0000 (opaque black); palette0 is33f2 (green). Presentation skipped the 3D
rear-plane and exposed palette0 beneath geometry. This reproduced the report.

Shared PPU scanout now inserts an opaque constant rear-plane at BG0's actual
priority, respecting BG0 enable, 3D selection, foreground-only background mask,
horizontal scroll and per-pixel windows. It reads the clear register's color,
not a fixed black fallback. Transparent clear remains transparent. It does not
add translucent/bitmap/fogged rear-plane support or change polygon/gameplay code.
All native render paths consume the shared base framebuffer; actual stage
screenshots here use D3D11. OpenGL CPU passed its focused renderer smoke test.
Hardware reference: https://mgba-emu.github.io/gbatek/#ds-3d-rear-plane

Local build SHA256:
BA95AB9AE7F7AAFDC90A8ADBEDE38C5F997EAAF4476CCB31E659A8B61A02489A
Changes: port/ntr/ppu.cpp, ppu.h documentation, smoke_ppu_affine.cpp tests;
read-only opt-in SM64DS_PC_BACKGROUND_TRACE in video.cpp. Private muted runner
adds DevelopmentMenu/BackgroundTrace switches; defaults remain unchanged.

Build and five focused tests PASS: PPU affine, windows, OBJ, D3D GPU, OpenGL CPU.
Expanded assertions cover black/nonblack clear, priority, transparent clear,
foreground masks, disabled BG0, tiled BG0, sub-engine, scroll, windows, forced
blank, and avoiding treating a bitmap rear-plane as a constant plane.

Before/after4200-tick replays have841 identical gameplay snapshots. At tick2300,
all231393 exact green backdrop pixels become black; sampled opaque slide/wall
pixels remain unchanged. Both exit0, mixererrors0, device samples0, isolated
slot1/minigames saves unchanged. The route eventually falls off the slide and
returns to the castle; this is a rendering diagnostic, not slide completion.

Separate5800-tick original title/FileA/castle/painting/Mission1 entry reaches
Battlefield and opens original pause menu. Screens2500/4300/5500 checked, exit0,
Mission1 confirmed, playerWait, unchanged saves, mixererrors0, output samples0.
An earlier regression harness used an invalid scenery selector/default exterior
route and did not confirm Mission1; that run is rejected and not acceptance.
Initial slide diagnostic stopped at mission confirmation; subsequent run adds
the required A confirmation rather than altering stage state.

Private reproducible acceptance:
work/check-secret-slide-background-20261024.py
work/secret-slide-background-acceptance-20261024.json
work/build-slide-background-final-20261024.log
Cases: native-muted-audio-walk-secret-slide-void-{before,after}-20261024-r1-20261021
and native-muted-audio-walk-rear-plane-original-entry-regression-20261024-r2-20261021.
Screenshots shown in chat; ROM/extracted scenes/saves/logs/images/EXEs stay local.
No F installation, publication or stable-install promotion performed.

NEXT: original ordinary castle-to-slide entry, native ITEM_BLOCK actor21
(daObjHatenaBlock_c; not the unrelated JRB daSlide_Box_c crate), authored finish
mechanism and timer/HUD. Registry currently does not assign a native profile21.
Original Player special-surface15 starts the real Timer;16 stops/checks it and
can spawn a timed Star. Timer methods already call the recovered native Timer.
Trace actual surface/contact/timer/HUD before choosing a fix. Finish appearance
may be geometry or another mechanism; no dedicated finish-line actor established.
No forced spawn, timer flag, collision bypass or credit fixture used here.
