Both jobs failed, at genuinely informative points:
- linux-x64: DllNotFoundException loading lingua_physics — the .so
committed for scripts/run-sample.sh's local-dev convenience was built on
this dev machine's own (newer) glibc, and didn't load on ubuntu-latest's
runner. liblingua_audio.so, built the same way, loaded fine there — this
wasn't a generic "the file isn't where expected" problem, it was
specific to what that one binary happened to require. Fixed by having CI
rebuild and overwrite the native libs fresh for both platforms, every
run, rather than trusting the committed one for anything but casual
local use — only a binary built on the actual target platform is
trustworthy on it.
- win-x64: "WGL: The driver does not appear to support OpenGL" — from
inside the --headless verification run. --headless only controls
whether Engine.Host's own loop pumps a window; it does nothing to stop
a *loaded* engine.windowing/engine.render from creating a real window
and GL context regardless, which the full PhysicsDemo project always
does. Fine on a real desktop, fatal on windows-latest's GPU-less
runner. Fixed with a separate, minimal verification stage — engine.
physics only, project.ci-headless.json/scene.ci-headless.json, no
windowing/render/audio/game plugin at all — alongside the original full
stage, which still produces the real uploaded artifact. engine.physics
needs no display, so this is what CI can actually check without one;
audio's own correctness is separately covered by Engine.Audio.Tests
(forced onto miniaudio's null backend already) on both platforms.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N1qPfzq8TDCUMFMV3UwV5N