# Slice K0 portability boundary closeout ## Outcome K0 completed at `aada8a37c1e933f9f0a3f41dc4f05615b01023bc`. The repository now has a dedicated `AcDream.Headless` executable and matching test project. The executable references only `AcDream.Runtime`; its transitive closure contains no App, UI, Silk.NET, OpenAL, Arch, ImGui, renderer, audio, or native-window assembly. Exact rollback: ```text git revert aada8a37c1e933f9f0a3f41dc4f05615b01023bc ``` ## Boundary - `--help` runs without constructing Runtime or loading presentation code. - `validate --config ` performs strict, case-sensitive, versioned JSON validation without connecting. - Unknown properties, missing required fields, duplicate/empty session IDs, unsupported versions, malformed files, and secret-shaped unknown fields fail with deterministic exit codes. - Arbitrary command arguments and secret values are not reflected into diagnostics. - Project, dependency-manifest, and loaded-assembly tests enforce the boundary. - Runtime's existing dependency-project test now resolves MSBuild paths on Windows and Linux and remains valid under isolated artifact roots. ## CI and local Linux proof `.github/workflows/headless-portability.yml` runs on Windows and Ubuntu. It builds Plugin.Abstractions, Core, Core.Net, Content, Runtime, and Headless, then tests only the presentation-free Core.Net, Content, Runtime, and Headless closures. Historical `AcDream.Core.Tests` App-integration fixtures remain in the complete-solution lane and are deliberately excluded from the no-App restore lane. Local Ubuntu 24.04 / .NET 10.0.302 evidence: - Plugin.Abstractions and Core build: pass. - Core.Net tests: 600/600. - Content tests: 119/119. - Runtime tests: 395/395. - Headless tests: 12/12. - Headless `--help`: exit 0. Exact Windows Release evidence: - solution build: pass (17 pre-existing Core-test warnings); - complete solution: 8,708 pass / 5 intentional skips; - Headless tests: 12/12; - Runtime tests: 395/395. ## Audit - Windows-only UDP reset handling was already guarded by `OperatingSystem.IsWindows()`. - CP-1252 registration is BCL/provider-based and Linux-safe. - immutable pak reading uses portable read-only memory mapping. - remaining wall-clock and diagnostic-call-site cleanup belongs to K2 timing ownership, not the K0 process boundary. - no retail gameplay behavior changed and no divergence row was added.