feat(docs): phase 14 — game-neutral core docs, an Ultima Online group, and checkTerms #34

Merged
whitlocktech merged 1 commits from feat/phase-14-vocabulary into main 2026-10-22 14:41:27 -05:00
Member

Phase 14 of PLAN.md §16: game vocabulary leaves the core docs, Ultima Online gets its own sidebar group, and the vocabulary rule is now a build check (D63, D64).

What changed

  • Core docs use core's words. Every page outside the new group was swept. Each one now says a Team, a game server, the sidecar, the bridge plugin, the game module. Detail that only applied to Ultima Online was moved into its pages, not deleted. For example, The bridge's guild-roster passage is now a general rule about Team rosters, and the Ultima Online specifics are in its event catalog.
  • A new "Ultima Online" group after Reference, with nine pages: an overview, Connect a ServUO shard, Verify the bridge, The shard connection, Client files, Troubleshooting, Bridge.cfg, sidecar.toml, Shard event catalog.
  • Five moved URLs answer a real 301 from the server (src/config/redirects.mjs). test/headers.test.mjs asserts every redirect against the running server.
  • Getting started is game-neutral. Connect your game server keeps its old URL and hands off to each game. Until phase 15, the Rust link goes to docs main:rust-link/INSTALL.md. Verify the whole stack stays, rewritten neutral (D69).
  • <GameExample game="…"> (D68) prints the game's name above a real example quoted on a core page: the module manifest, the budget dimensions, --game <servuo|rust>, the per-game repository and canonical-document tables. It looks right in both docs themes.
  • scripts/checkTerms.mjs, the twelfth check. It knows 16 game words. It reads the docs pages (frontmatter included) and both sidebar trees. It skips link targets, bare URLs, imports and {…} expressions, but reads fenced code. There is one allowlist entry: Discord's own "Guild (server) ID" label. Before I trusted it, I ran it against a planted page: five violations failed, and a URL and an expression carrying the same words passed. It is wired into verify and pr-checks.yml.
  • canonicalDocs is grouped by game, and the Rust group now has four documents.

Decisions recorded (count of record 69)

  • D67: the screenshot rule from #32 (your yes).
  • D68: game-tagged example blocks.
  • D69: Verify the whole stack stays in Getting started (amends D60).

Checked against Rust before generalising

Four things now stated for both games were checked against the Rust sources first:

  • both bridges use loopback NDJSON with one writer thread;
  • both sidecars answer /health with plugin connected;
  • both plugins ship EventsEnabled off;
  • both modules encrypt their sidecar token with core's key.

Two findings in other repositories (not fixed here)

  • Core's Teams panel says "shard": website client/src/lib/teamAdmin.js:34 reads "…is not a confirmed empty shard". The docs now paraphrase it instead of quoting it.
  • The installer's --help describes --game as "Which game's shard side", and --site-url names "Admin → Shard (uo-link)" for both games.

Both are game words in core products. If you want them fixed, I'll file the issues.

Verification

npm run verify is green locally: all twelve checks plus both test suites, including the token-backed facts, quickstart and reference checks.

  • AI-assisted: Claude Code (Claude Opus 5.5)

🤖 Generated with Claude Code

https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY

Phase 14 of PLAN.md §16: game vocabulary leaves the core docs, Ultima Online gets its own sidebar group, and the vocabulary rule is now a build check (D63, D64). ## What changed - **Core docs use core's words.** Every page outside the new group was swept. Each one now says a Team, a game server, the sidecar, the bridge plugin, the game module. Detail that only applied to Ultima Online was moved into its pages, not deleted. For example, *The bridge*'s guild-roster passage is now a general rule about Team rosters, and the Ultima Online specifics are in its event catalog. - **A new "Ultima Online" group** after Reference, with nine pages: an overview, Connect a ServUO shard, Verify the bridge, The shard connection, Client files, Troubleshooting, Bridge.cfg, sidecar.toml, Shard event catalog. - **Five moved URLs answer a real `301`** from the server (`src/config/redirects.mjs`). `test/headers.test.mjs` asserts every redirect against the running server. - **Getting started is game-neutral.** *Connect your game server* keeps its old URL and hands off to each game. Until phase 15, the Rust link goes to `docs` `main:rust-link/INSTALL.md`. *Verify the whole stack* stays, rewritten neutral (D69). - **`<GameExample game="…">`** (D68) prints the game's name above a real example quoted on a core page: the module manifest, the budget dimensions, `--game <servuo|rust>`, the per-game repository and canonical-document tables. It looks right in both docs themes. - **`scripts/checkTerms.mjs`, the twelfth check.** It knows 16 game words. It reads the docs pages (frontmatter included) and both sidebar trees. It skips link targets, bare URLs, imports and `{…}` expressions, but reads fenced code. There is one allowlist entry: Discord's own "Guild (server) ID" label. Before I trusted it, I ran it against a planted page: five violations failed, and a URL and an expression carrying the same words passed. It is wired into `verify` and `pr-checks.yml`. - **`canonicalDocs` is grouped by game**, and the Rust group now has four documents. ## Decisions recorded (count of record 69) - **D67**: the screenshot rule from #32 (your yes). - **D68**: game-tagged example blocks. - **D69**: *Verify the whole stack* stays in Getting started (amends D60). ## Checked against Rust before generalising Four things now stated for both games were checked against the Rust sources first: - both bridges use loopback NDJSON with one writer thread; - both sidecars answer `/health` with *plugin connected*; - both plugins ship `EventsEnabled` off; - both modules encrypt their sidecar token with core's key. ## Two findings in other repositories (not fixed here) - **Core's Teams panel says "shard":** `website` `client/src/lib/teamAdmin.js:34` reads "…is not a confirmed empty shard". The docs now paraphrase it instead of quoting it. - **The installer's `--help`** describes `--game` as "Which game's shard side", and `--site-url` names "Admin → Shard (uo-link)" for both games. Both are game words in core products. If you want them fixed, I'll file the issues. ## Verification `npm run verify` is green locally: all twelve checks plus both test suites, including the token-backed facts, quickstart and reference checks. - [x] AI-assisted: Claude Code (Claude Opus 5.5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
wtclaude added 1 commit 2026-10-22 08:55:17 -05:00
feat(docs): phase 14 - game-neutral core docs, an Ultima Online group, and checkTerms
All checks were successful
PR checks / checks (pull_request) Successful in 2m10s
4426d3e339
PLAN.md §16, D63/D64, plus D67-D69 taken 2026-10-22.

- Core docs use core's words: a Team, a game server, the sidecar, the bridge
  plugin, the game module. Detail that belonged to Ultima Online moved into
  its pages rather than being dropped.
- New "Ultima Online" sidebar group (nine pages): an overview, Connect a
  ServUO shard, Verify the bridge, The shard connection, Client files,
  Troubleshooting, Bridge.cfg, sidecar.toml, Shard event catalog. Five moved
  URLs answer a real 301 (src/config/redirects.mjs, asserted by the served
  test).
- Getting started is game-neutral. "Connect your game server" keeps the old
  URL and hands off to each game; Rust links docs main:rust-link/INSTALL.md
  until phase 15. "Verify the whole stack" stays, neutral (D69).
- D68: GameExample.astro labels a game's real example on a core page with the
  game's name; checkTerms allows that game's words inside it.
- scripts/checkTerms.mjs, the twelfth check: 16 game words, docs pages and
  both sidebar trees, one allowlisted phrase (Discord's "Guild (server) ID").
  Wired into verify and pr-checks.yml.
- canonicalDocs grouped by game; the Rust group carries four documents.
- D67: the screenshot rule from #32 is adopted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
whitlocktech merged commit a100195e7b into main 2026-10-22 14:41:27 -05:00
whitlocktech deleted branch feat/phase-14-vocabulary 2026-10-22 14:41:28 -05:00
Sign in to join this conversation.
No description provided.