acdream/memory/project_linux_graphical.md
Erik a49e92df3a fix(platform): Campaign LA LA0 review fixes — CI Linux lanes, arch doc, self-guard
Opus dual-lens review of cb6502c8 passed with six findings; this lands
the fix round:
1. headless-portability.yml: AcDream.Platform src/tests join both path
   triggers and the presentation-free build/test arrays — the moved XDG
   tests run on ubuntu-latest again (they had fallen out of every Linux
   lane).
2. acdream-architecture.md: AcDream.Platform gets its own layer block;
   Runtime may-reference clause updated (the guard changed in cb6502c8,
   its human-readable twin had not).
3. PlatformDependencyBoundaryTests: the BCL-only contract (zero
   project/package references) is now enforced, not just observed.
4. memory/project_linux_graphical.md canonical seam renamed.
5. Plan LA0 recon corrected: the K0 Headless guard was never the guard
   needing amendment (it asserts Headless own refs); Runtime own-refs
   guard was — the commit did the right thing, the plan text now says so.
6. App declares its AcDream.Platform reference explicitly per its own
   convention instead of riding transitivity.

Platform.Tests: 4 passed (3 moved + the new guard).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 15:30:04 +02:00

4.1 KiB
Raw Permalink Blame History

Modern Runtime Linux graphical continuation

Current checkpoint

Slice L0 completed at 66f114b258c0c37b51a7c0e04ca0d6441f4b1699. Slice L1's implementation checkpoint landed at 11501d52cad942850d88f83490710faf1d5cdf28.

The same AcDream.App now builds and publishes for linux-x64; there is no Linux gameplay or renderer fork.

Canonical seams:

  • AcDream.Platform.ApplicationPathSet (moved out of Runtime by Campaign LA LA0, 2026-08-14) owns XDG/Windows config, data, cache, plugin, screenshot, and diagnostic paths for graphical and headless hosts — and now for the external launcher, which references only AcDream.Platform.
  • AcDream.App.Platform.GraphicalHostPlatformServices owns one startup OS, architecture, RID, native-dependency manifest, path set, and pacing factory.
  • PlatformFramePacingWaiterFactory selects the existing Windows high-resolution waitable timer or Linux LinuxMonotonicFramePacingWaiter.
  • Linux waiting uses absolute CLOCK_MONOTONIC + clock_nanosleep(TIMER_ABSTIME), retries EINTR, does not busy-spin, and rejects use after disposal.
  • Windows legacy %LOCALAPPDATA%\acdream\settings.json and keybinds.json are copied only when the new roaming destination is absent.
  • bundled plugins are read beside the binary; user plugins are read from the portable data root. A successful bundled ID wins; a failed load does not reserve the ID.

Exact L0 evidence:

  • Windows: Runtime 415, Headless 67, UI 543, App 3,736 / 3 skips, complete Release 8,799 / 5 skips.
  • native Ubuntu/WSL: Runtime 415, Headless 67, UI 543, 14 L0 App tests.
  • exact framework-dependent linux-x64 publish contains executable, managed closure, GLFW, OpenAL Soft, cimgui, shaders, and smoke plugin/manifest; direct ldd has no unresolved dependency.
  • closeout: docs/research/2026-07-27-slice-l0-platform-services.md.

Rollback:

git revert 66f114b258c0c37b51a7c0e04ca0d6441f4b1699

L1 implementation checkpoint

Canonical seams:

  • ACDREAM_DISPLAY_PROTOCOL=auto|x11|wayland selects one immutable backend before Window.Create.
  • GraphicalWindowBackendSelection configures Silk's exact GLFW backend and makes the packaged GLFW 3.4 native library win over older system installs.
  • GraphicalCapabilityRecord captures platform, RID, display protocol, GL identity/extensions/limits, framebuffer, input/window, audio, and terminal ownership into one atomic report.
  • GraphicalGlFunctionProbe actively validates bindless texture, draw-parameters plus MDI, SSBO, timer query, sRGB/depth/stencil FBO, and persistent coherent buffer behavior before renderer construction.
  • Unsupported contexts exit with code 4 and a precise report. No legacy renderer or fabricated fallback is introduced.
  • Studio screenshot shutdown is deferred until the completed render frame; accepted and rejected startup paths both report zero terminal ownership.

Evidence:

  • native Windows 11 + AMD Radeon RX 9070 XT: every active GL probe passes, OpenAL submits playback and disposes, the packaged smoke frame is intact, and terminal ownership is zero;
  • WSLg X11 and Wayland: packaged GLFW 3.4 and protocol selection are correct, but llvmpipe lacks mandatory GL_ARB_bindless_texture;
  • WSLg with GALLIUM_DRIVER=d3d12 reaches the AMD GPU and OpenGL 4.6, but still lacks mandatory GL_ARB_bindless_texture; this is a WSLg/Mesa capability limit, not an acdream package-resolution defect;
  • App tests pass 3,763 / 3 skips; the complete Release suite passes 8,826 / 5 skips;
  • checkpoint: docs/research/2026-07-27-slice-l1-graphical-capability-checkpoint.md.

Rollback:

git revert 11501d52cad942850d88f83490710faf1d5cdf28

Deferred continuation

Do not claim native Linux graphical support from WSLg. Run the exact linux-x64 package on a physical Linux AMD RadeonSI or supported NVIDIA driver under the available X11/Wayland sessions. It must pass the same capability report, packaged smoke frame, input/window/audio checks, and zero-debt shutdown. The user deferred this physical-driver gate and Slices L2L6 on 2026-07-27. L2 has not started; resume at the physical L1 gate.