docs(linux): close Slice L0

This commit is contained in:
Erik 2026-07-27 11:59:58 +02:00
parent 66f114b258
commit 07bb1c5a74
9 changed files with 264 additions and 14 deletions

View file

@ -0,0 +1,65 @@
# Modern Runtime Linux graphical continuation
## Current checkpoint
Slice L0 completed at
`66f114b258c0c37b51a7c0e04ca0d6441f4b1699`.
The same `AcDream.App` now builds and publishes for `linux-x64`; there is no
Linux gameplay or renderer fork.
Canonical seams:
- `AcDream.Runtime.Platform.ApplicationPathSet` owns XDG/Windows config, data,
cache, plugin, screenshot, and diagnostic paths for graphical and headless
hosts.
- `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
```
## Next work — L1
Do not claim Linux graphical support merely from publish success. L1 must:
1. start the exact package under the available X11 and Wayland sessions;
2. capture OS/display/compositor/GPU/driver/OpenGL vendor, renderer, version,
mandatory extensions, swap interval, refresh, DPI, and audio backend before
renderer construction;
3. create the OpenGL 4.3 core context and reject missing bindless texture or
shader draw parameters with one actionable report;
4. validate GLFW window/input callbacks, relative mouse/focus, framebuffer
sizing, clipboard, and monitor facts;
5. initialize OpenAL fail-open exactly as current Windows behavior permits;
6. render a packaged smoke scene, capture a screenshot, and close with zero
GL/OpenAL/window debt.
Historical test-only issue: two installed-DAT App tests still hard-code
`C:\Turbine\Asheron's Call`. They are not production blockers, but clean them
before claiming the complete App test suite on a clean Linux runner.

View file

@ -70,13 +70,13 @@ zero entities/inventory/host/content leases, disposed shared content, and
## Next work
Slice L is active under
`docs/plans/2026-07-26-modern-runtime-slice-l.md`. The initial read-only L0
probe already proves framework-dependent `linux-x64` App publish succeeds and
ships resolved GLFW, OpenAL Soft, and cimgui native libraries. The smoke plugin
is missing from the publish because its copy target uses Windows-shaped paths.
Frame pacing still directly constructs the Windows waitable-timer owner, and
App/UI persistence still defaults to Windows `LocalApplicationData`; those
are the first L0 implementation seams.
`docs/plans/2026-07-26-modern-runtime-slice-l.md`. L0 completed at
`66f114b2`: the shared path owner, graphical platform/native manifest,
factory-selected Linux wait, portable persistence/plugins, RID-safe publish,
and Ubuntu graphical package gate pass. Continue from
`memory/project_linux_graphical.md`; L1 must prove the actual Linux
window/context/input/audio lifecycle rather than revisiting headless
ownership.
Final K3 automated counts: Runtime 412, Headless 47, App 3,722 / 3 skips,
complete Release 8,764 / 5 skips.