acdream/docs/research/2026-07-27-slice-k0-portability-boundary.md
Erik fbebb91848 docs(headless): close K0 and activate K1
Pin the tested Windows/Linux portability boundary, exact rollback, dependency audit, and synchronized architecture and roadmap state before starting the production single-session host.

Co-authored-by: Codex <noreply@openai.com>
2026-07-27 07:05:45 +02:00

2.4 KiB

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:

git revert aada8a37c1e933f9f0a3f41dc4f05615b01023bc

Boundary

  • --help runs without constructing Runtime or loading presentation code.
  • validate --config <path> 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.