diff --git a/docs/plans/2026-04-11-roadmap.md b/docs/plans/2026-04-11-roadmap.md index 6141d66b..1bf94451 100644 --- a/docs/plans/2026-04-11-roadmap.md +++ b/docs/plans/2026-04-11-roadmap.md @@ -1348,6 +1348,42 @@ hitch and follows. --- +### Track LH — Linux and headless automation (future; user-directed 2026-07-19) + +> **PARKED / FUTURE — not part of active M3.** Preserve this direction for +> deliberate architectural work after the current gameplay and UI milestones: +> a graphical Linux client, configurable retail-rooted distance LOD, and a true +> Linux headless host capable of running roughly 30 automated clients with +> minimal CPU and memory use. + +The governing architectural rule is that a game session must not be a hidden +`GameWindow`. Authentication, networking, world state, movement, inventory, +combat, magic, chat, and gameplay commands/events become an instance-scoped, +presentation-independent runtime. The graphical client and bot host consume +that same runtime through explicit interfaces; they do not maintain separate +gameplay implementations. + +| Phase | What | Future completion gate | +|---|---|---| +| LH0 | Extract the instance-scoped session/game runtime from presentation ownership | One session runs with renderer, UI, and audio either attached or absent; no static cross-session gameplay state | +| LH1 | Configurable graphical distance LOD, rooted in retail `GfxObjDegradeInfo` / viewer-distance behavior | Retail/DAT-authored degradation is the fidelity baseline; users may configure detail bias or maximum-detail policy without reducing the streaming/view horizon. Integrate with MP2/MP3 ownership rather than creating a competing LOD system | +| LH2 | Linux graphical host and packaging | Portable frame pacing, paths, native dependencies, input, and audio; startup validates the mandatory modern-OpenGL extensions and supported driver matrix | +| LH3 | True Linux headless host | No window, X11/Wayland display, OpenGL context, textures, meshes, particles, audio, or gameplay UI; retain only protocol/game state and the collision/nearby semantic data required for navigation and decisions | +| LH4 | Multi-session bot host, targeting approximately 30 concurrent clients in one process | Sessions isolate credentials, GUID maps, clocks, queues, plugins/behaviors, and teardown while sharing only immutable/read-only DAT and collision content caches; one-session-per-process remains a diagnostic/isolation option | +| LH5 | Bot automation surface | Actions cover movement, targeting, use, combat, casting, looting, chat, and commands; events cover object/session/portal, inventory, damage, and target lifecycle; deterministic scheduling and server-safe rate limiting are testable | + +Track acceptance requires 30 connected Linux headless sessions with no GPU or +display-server dependency, bounded per-session CPU/memory growth, clean +connect/disconnect/reconnect teardown, credential-safe diagnostics, and parity +tests proving that GUI and headless hosts drive the same gameplay runtime. LOD +has no role in headless mode because no scene is rendered. + +Native macOS graphical support is not committed by this track. The current +mandatory renderer requires modern OpenGL capabilities beyond Apple's native +OpenGL ceiling; revisit macOS only if a supported graphics backend is chosen. + +--- + ## Cross-cutting work tracked in parallel - **Test coverage.** Each phase lands with unit + integration tests in `tests/`. Current count: 98 Core + 96 Core.Net = 194. Keep the ratio as new phases land. @@ -1361,7 +1397,7 @@ hitch and follows. - **Server emulation** — we use ACE for server, never reimplement. - **Account creation** — direct user to ACE tooling. - **Anti-cheat / GM tools / live-ops** — irrelevant for personal use. -- **Cross-platform support** — Windows-only; the dat path assumptions depend on retail Windows install layout. Silk.NET is cross-platform but we don't promise. +- **Native macOS graphical support** — not promised; Track LH covers future Linux graphical and headless hosts, while macOS needs a renderer backend compatible with Apple's platform limits. - **Custom game content** — this is a client for existing AC data, not a toolchain. ---