Opus dual-lens review ofcb6502c8passed 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 incb6502c8, 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>
97 lines
4.1 KiB
Markdown
97 lines
4.1 KiB
Markdown
# 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:
|
||
|
||
```text
|
||
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:
|
||
|
||
```text
|
||
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
|
||
L2–L6 on 2026-07-27. L2 has not started; resume at the physical L1 gate.
|