Build Log
Reality Draft — untangling Copilot's PixiJS spiral, swapping in painted art
July 11, 2026
Copilot was debugging a PixiJS asset loader that was never going to fix the real bug; diagnosed three real Pixi lifecycle bugs, then reversed course to SVG <image> elements and wired in the first batch of painted scene art.
Timeline
What shipped
Diagnosed and fixed 3 real PixiJS v8 lifecycle bugs Copilot's asset-loader patching never touched: missing async app.init(), a ticker-registration race caused by non-memoized effect dependencies, and no camera-pan sync between the Pixi canvas and the SVG scene's panning coordinate system
Reversed the architecture: deleted PixiOverlay.tsx and the pixi.js dependency; painted PNGs now render as SVG <image> elements inside HarborStage's existing camera group, inheriting pan, z-order, and the existing fxStyle() CSS animation system for free
Found and fixed the actual root cause of the visual bug: all initial art assets had no alpha channel (PNG colorType 2, background baked into pixels as a checkerboard or solid color) rather than real transparency (colorType 6)
Wired stone_bridge, market_cart, stranger_map, and courier (ambient/rebuild mode) to painted art with real alpha
Extended to lighthouse (beam on/off swap driven by the existing beamOn flag) and fox (ambient/rebuild mode + Chapter1Choreography)
Kept dog on painted art in ambient mode but preserved the SVG wolf-recolor fallback (no wolf.png asset exists)
Kept the chapter-1 scripted courier on its existing animated SVG (walk-cycle CSS/SMIL animation) rather than regress it to a static image — new walk-frame assets came back without alpha
“ok, so is there a better implementation for this? maybe we got to this place and should have started somewhere else.”