Skip to content

W105 — Documentation and Landing Publication Review - #455

Merged
The-Running-Dev merged 2 commits into
mainfrom
slice/W105
Sep 7, 2026
Merged

W105 — Documentation and Landing Publication Review#455
The-Running-Dev merged 2 commits into
mainfrom
slice/W105

Conversation

@The-Running-Dev

@The-Running-Dev The-Running-Dev commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Closes #393.

What changed

The retired /play/ route was still advertised on the public roadmap. site/src/roadmap/roadmapData.ts carried { label: "Play the adventures", href: "/play/", kind: "site" } on the W63–W64 chapter. W74b removed that route; the merged deployment serves only /, /roadmap/ and the protected docs/ subtree (site/scripts/verify-merge.mjs), so the link resolved to nothing. It now points at adventures.subzerodev.com — the same destination, and the same label, the landing page and site header already use — and the W61–W62 chapter gains an aside saying the route is retired, so the history reads as history.

The link kind union gains "external", and Links now renders anything that is not "site" through ExternalLink, which is what gives it the new-tab affordance and the visually-hidden announcement.

Two regression tests hold it. One asserts every kind: "site" href matches a route the merge actually serves; one asserts the adventures link opens in a new tab at the external URL. Both were run against the old href and both fail on it.

site/src/publication.browser.test.tsx is new. The landing page and the roadmap, rendered in a real Chromium tab at 390×844 and 1280×800 — the widths this site already committed to, in the retired viewport.browser.test.tsx and visual-baseline.browser.test.tsx and still in vitest.browser.config.ts — asserting the four failures W105.5 names: horizontal overflow, clipped navigation, an unreachable primary link, and overlap. jsdom performs no layout, so none of these were assertable before. assertNotClipped is local to that file and carries its own passing/failing self-test, matching the rule src/test/browser/assertions.ts states for itself.

site/screenshots/ holds eight reviewed renderings — landing, roadmap, /docs/ and /docs/engine/vision, each at both widths — with the review's findings written down beside them. The two documentation pages are Docusaurus routes built from a container image; nothing in this package renders them, so for those the screenshots are the whole record.

The absent commercial thesis is now a recorded deferral, not an absence. design/90-decisions.md §2 states why the brief carries no customer, alternative, or monetization thesis (that layer is SubZeroDev.Platform, itself deferred), names the repository owner as the decision's owner, and gives the condition that revisits it. Regenerated into docs/docs/engine/OPEN-QUESTIONS.md.

Criteria

Outcome
W105.1 Met. ConvertTo-HumanDocumentation.ps1 run twice produces no diff; 18 generated engine pages plus compatibility pointers and the guide.
W105.2 Met. Test-Documentation.ps1 passes across 198 Markdown files, drift check included.
W105.3 Met. The four agreements hold across README, guide, roadmap and landing; the one surface that disagreed — the roadmap's live /play/ link — is fixed. 0.11.0 reads as a candidate everywhere (stabilize toward 0.11.0, "Close the additive 0.11 stabilization programme"); three kinds and external content ownership are stated on all four.
W105.4 Met by audit plus the packed-candidate sweep. The docs' SessionStore, CampaignCatalog and MCP-tool declarations match src/engine/src/core/session/types.ts and src/engine/src/mcp/server.ts exactly, all thirteen operations; the only unawaited listCampaigns() in the corpus is the // before line of 04-core's own migration guide, which exists to show the removed shape; no client-side example reads registry or kind state. Test-CompatibilitySweep.ps1 passes against baseline v0.10.0, packed tarball and consumer smoke included.
W105.5 Met. Eight renderings, no horizontal overflow at either width (scrollWidth == clientWidth in every case), no clipped nav, no overlap, every primary link reachable — committed under site/screenshots/, and gated for the two surfaces this package renders by the new browser test.
W105.6 Met by explicit deferral with reasoning, owner, and a revisit condition.
W105.7 Met. All three pass on the same generated artifact.

Verified

All fifteen # verification: true gates in .github/workflows/*.yml, run against this branch at 9b9b6c7. .claude/verify-report.json holds the structured record and tools/Test-VerifyReport.ps1 returned Valid.

Ran and passed (11)

  • Typechecknpm --prefix src/engine run typecheck: tsc --noEmit plus tsc --noEmit -p tsconfig.scripts.json, exit 0.
  • Lintnpm --prefix src/engine run lint: eslint src scripts, exit 0. The determinism guard (Math.random, non-bit-stable Math.*, Date.now) reported nothing.
  • Testnpm --prefix src/engine test: 97 test files passed (97), 1594 tests passed (1594), duration 9.38s.
  • Pack packagenpm pack --silent produced the-running-dev-game-engine-0.10.0.tgz, exit 0.
  • Inspect tarballtar -tzf over 332 entries: no package/src/, no tsconfig*.json, no .test.* artifacts, and package/dist/ present.
  • Consumer smokeconsumer-smoke/{node_modules,package-lock.json,dist} cleared, then npm run install:engine (installed the packed tarball, added 5 packages), npm run build (tsc -p tsconfig.json), npm run smoke (node dist/smoke.js) — all exit 0.
  • Parse-check PowerShell scripts — every *.ps1 outside node_modules parsed with [System.Management.Automation.Language.Parser]::ParseFile; 0 parse errors.
  • Run Pester testsInvoke-Pester -Path tools -PassThru: passed=324 failed=0 skipped=35 total=359.
  • Validate Markdown links, terminology, and generated files./build/Test-Documentation.ps1: human-documentation drift check passed across 18 generated engine page(s), compatibility pointers, and the guide; documentation checks passed across 198 Markdown file(s).
  • Build and verify landing pagenpm --prefix src/engine run build (exit 0), then npm --prefix site run check (exit 0): prettier format:check, oxlint, tsc -b, 17 unit tests, 23 browser tests in Chromium, production build with verify-build.mjs ("Both built HTML entry points contain their required static metadata, and 3 bundle(s) are free of Node-only runtime references"), and verify-merge.mjs.
  • Test the hostdotnet test src/host/SubZeroDev.GameEngine.Host.Tests/SubZeroDev.GameEngine.Host.Tests.csproj -c Release (net10.0): Failed 0, Passed 12, Skipped 0, Total 12. Restore resolved from cache, so the sibling-repo feed credential was not needed.

Ran and failed (0)

Did not run (4)

  • Build documentation./docs.ps1 is not present in this checkout. It is generated by Invoke-SetupDocs rather than committed (CLAUDE.md, Docs Site), so the production Docusaurus build — the only gate that resolves routes and heading anchors under onBrokenLinks: 'throw' — cannot be run here. The Verify Documentation Build check on this pull request is where that answer comes from. A docs image was built directly from docs/Dockerfile during this slice to capture screenshots; that is a dev-server run, not this gate.
  • Merge landing page into documentation buildnpm --prefix site run merge exited 1 with Documentation output '...\artifacts\docs' has no protected 'docs' subtree.artifacts/docs does not exist because the Build documentation gate above could not run. This is a missing prerequisite, not a merge failure: the same merge logic is exercised against a fixture documentation output by site/scripts/verify-merge.mjs, which passed inside the landing-page gate.
  • Positive route and probe smoke — the step depends on the preceding Build the image step, which restores SubZeroDev.Platform.Hosting from GitHub Packages using the REGISTRY_TOKEN build secret. That credential is not available in this environment, so subzerodev-gameengine-host:smoke was never built and no container could be started to curl /, /roadmap/, /docs/, /health/live and /health/ready against. The host-image workflow check on this pull request is where this answer comes from.
  • Negative fixture -- corrupted artifact must fail to starttools/host-smoke/Dockerfile.negative-fixture builds FROM subzerodev-gameengine-host:smoke, the image the gate above could not build for want of the REGISTRY_TOKEN build secret. With no base image there is nothing to corrupt, so the must-exit-non-zero assertion was never made.

The eleven that ran all passed; the documentation build and its dependent merge did not run because docs.ps1 is absent, and the two host-image smokes did not run because the registry credential is not available locally. Those four are answered only by CI on this pull request.

Out of slice, noted not fixed

The roadmap's now/next partition is stale. 02 / NOW is the W90–W92 chapter and 03 / NEXT is W93–W108, while the ledger marks W90 through W104 all [x]. W105.3's four agreements do not cover it, and correcting it means deciding what the new next chapter is — roadmapData.ts throws unless exactly one chapter is "now", and futureActs would otherwise render an empty section. That is a /slices or roadmap-content call, not a transcription fix.

vitest.browser.config.ts names a file that no longer exists — its comment cites "the per-file CDP session emulation in viewport.browser.test.tsx", removed by W74b.

Repoint the roadmap's "Play the adventures" link from the retired in-repository
/play/ route to adventures.subzerodev.com, and note on the W61-W62 chapter that
the route is gone. That link was the last public surface still presenting the
engine's own play route as live, and it resolved to nothing on the merged site,
which serves only "/", "/roadmap/" and the protected "docs/" subtree.

Two tests hold it: every kind:"site" href must match a route the merge actually
serves, and the adventures link must carry ExternalLink's new-tab affordance.
Both fail on the old href.

Add site/src/publication.browser.test.tsx — the landing page and the roadmap
rendered in a real Chromium tab at 390x844 and 1280x800, the widths this site
already committed to, asserting no horizontal overflow, no clipped navigation,
no overlapping controls, and every primary link laid out and reachable. jsdom
performs no layout, so none of these could be asserted before. The local
assertNotClipped carries its own self-test, matching the rule the W65 assertion
module states for itself.

Commit the eight reviewed renderings under site/screenshots/, covering those two
surfaces plus the two documentation entry pages this package cannot render, with
the review's findings written down beside them.

Record the missing customer/alternative/monetization thesis as an explicit
deferral rather than an absence: it belongs to SubZeroDev.Platform, it is the
repository owner's decision and not a specification pass's, and it is revisited
when Platform work starts.
Fifteen discovered gates against slice/W105 at 9b9b6c7: eleven ran and passed,
none failed, four could not run here. The documentation build needs the
installer-generated docs.ps1, the merge gate needs that build's artifacts/docs,
and both host-image smokes need the REGISTRY_TOKEN build secret. The file
otherwise still held W104.5's run.
@The-Running-Dev
The-Running-Dev merged commit 9439b99 into main Sep 7, 2026
8 checks passed
@The-Running-Dev
The-Running-Dev deleted the slice/W105 branch September 7, 2026 06:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

W105 — Documentation and Landing Publication Review

1 participant