feat(docs): phase 15 - the Rust group, its reference pages checked against their sources
All checks were successful
PR checks / checks (pull_request) Successful in 2m5s

PLAN.md §16 phase 15. A Rust group of fifteen pages after Ultima Online
(D70): the module, installing the bridge (installer, Pterodactyl egg, by
hand), connecting the site, verifying the bridge, linking Steam accounts,
permissions and groups, mod config, who sees who is online, events, zones
and rewards, optional plugins, the live map, troubleshooting, and three
reference pages - rust-link's sidecar.toml, the plugin's
RunicGateway.json, and the event kinds.

checkReference.mjs gains three Rust sections rather than a new check:
sidecar.toml keys and RUSTLINK_* overrides from Rust-Link config.rs,
RunicGateway.json from the plugin's PluginConfig, and the event kinds
in three classes against Module-Rust server/catalogue.js (D71). Every
admin screen was walked on the walk site before it was described (D36).

Core pages now hand off to the Rust group instead of linking out to the
docs repository. Three defects the re-read found here are fixed: the UO
/health sample's hard-coded protocol 4 (both games' samples now render
platform.json through <Code>), Authentication's missing Steam tab, and
two pages saying the site cannot reach EventsEnabled - false on Rust.

Installer v0.8.1 moved checkFacts red mid-phase; platform.json follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
2026-10-22 15:23:07 -05:00
parent a100195e7b
commit 75c8ffc07a
32 changed files with 1796 additions and 32 deletions

77
PLAN.md
View File

@@ -237,7 +237,7 @@ Taken by the org lead (Colby Whitlock) on 2026-08-19. Recorded so they are not r
**Decisions after D13 are recorded where they were taken**, in the section describing the phase that
raised them, rather than appended here — a decision is only re-litigated when its reasoning is
somewhere other than the thing it decided. The count of record is **sixty-nine**:
somewhere other than the thing it decided. The count of record is **seventy-one**:
| # | Where | What it settled |
|---|---|---|
@@ -258,6 +258,7 @@ somewhere other than the thing it decided. The count of record is **sixty-nine**
| D66 | §16, "How phase 13 built it" | The hero and footer show the Module API only; a protocol and a bundle belong to a game |
| D67 | §16, "One rule the phases need" | A screenshot belongs to its game: a capture tagged with a game may carry its words, beside the game's name |
| D68–D69 | §16, "How phase 14 built it" | A game's real example on a core page is a tagged, labelled block; *Verify the whole stack* stays in Getting started, game-neutral (amending D60) |
| D70–D71 | §16, "How phase 15 built it" | The Rust group is fifteen pages, one per admin screen where it can be; the Rust event kinds are checked against the module's own classification |
---
@@ -2094,6 +2095,80 @@ repositories):
- **The installer's `--help` says "Which game's shard side"** for `--game`, and `--site-url` names
"Admin → Shard (uo-link)" for both games.
### How phase 15 built it
Two decisions, taken by the org lead on 2026-10-22 before any page was written. The count of
record is now **seventy-one**.
**D70 — the Rust group is fifteen pages.** D60 named the topics and not the pages. The group
follows the Ultima Online group's shape: an overview, then the journey (*Install the bridge*,
*Connect the site*, *Verify the bridge*), then one page per admin screen where there is one
(*Permissions and groups*, *Mod config from the site*, *Who sees who is online*, *Events, zones
and rewards*), then *Linking Steam accounts*, *Optional plugins*, *The live map* and
*Troubleshooting*, and three reference pages (*sidecar.toml*, *RunicGateway.json*, *Event
kinds*). *Who sees who is online* and *Optional plugins* got pages of their own rather than
being folded into the overview and the events page, because each has a screen or a trap of its
own — RaidableBases must be restarted, never reloaded. The alternative was ten longer pages. The
question put to the org lead called this option "14 pages" while listing fifteen; the list is
what was chosen. RunicNPC's subgroup is phase 16's.
**D71 — the Rust event kinds are checked against the module's classification.** The plan said the
protocol-14 event list would be checked "against its sources". There were two candidates:
`PROTOCOL.md`, whose kinds are spread across tables from §8.4 to §20.12, and `Module-Rust`
`server/catalogue.js`, which holds three lists in code — public, staff, and the presence subset
of public. The second was chosen, for D39's reason: the visibility ladder is checked against the
module that enforces it, and so is this. The module's own test already holds its lists to
`PROTOCOL.md`, so the chain reaches the spec without this repo parsing prose tables. The page
shows three classes, and each is compared separately, so a kind moving from staff to public
upstream fails here twice.
**`checkReference.mjs` gained three Rust sections**, as the plan said, rather than a new check:
rust-link's `sidecar.toml` (parsed from its serde structs by the same function as uo-link's, now
shared) and the six `RUSTLINK_…` variables that override it; the bridge plugin's
`RunicGateway.json`, read from the public fields of `PluginConfig` in `RunicGateway.cs`; and the
event kinds (D71). The canonical documents gained `OPERATING.md` and `CARBON.md` under Rust.
**Every admin screen was walked on the walk site first** (D36), signed in as the walk admin:
Rust servers (Test, Edit, Chat titles, Optional mods), Rust permissions (a player, a group's four
tabs), Rust mod config (the tree and `RunicGateway.json`'s read-only keys), Rust visibility, Rust
zone presets, the event editor's action list, a user's Rust section, and the public server page's
feed, map and leaderboard. Nothing was saved. The NPC screens are phase 16's. Writing from the
walk and the source corrected three of my own drafts before they shipped: a reward does **not**
need a linked account (rewards go to Steam ids), the bundle ships **three** helpers, not two, and
the Test button prints the raw status (`protocol-mismatch`), not a phrase.
**What the re-read found in this repository**, fixed here:
- ***Verify the bridge* (Ultima Online) showed `"protocol":4`** in its `/health` sample, a
hard-coded version four protocols stale. Both games' samples now render the protocol from
`platform.json` through Starlight's `<Code>`, which is how a version gets into a code block
without being typed.
- ***Authentication* said "four tabs"** and never mentioned Steam, which core shipped with Module
API 1.17.0. It now has five, and a *Steam* section the Rust pages link to.
- ***Scheduled events* and *Events architecture* said the site cannot reach `EventsEnabled`.**
True for Ultima Online, false for Rust: an administrator can edit `RunicGateway.json`, that switch
included, from Admin → Rust mod config. Both pages now say so, the first as two tagged examples
(D68).
**`checkFacts` went red mid-phase, as designed.** Installer v0.8.1 shipped on 2026-10-22 — the
game-neutral `--help` that phase 14 reported, fixed in `installer` #43 alongside `website` #221 for
the Teams panel — so `platform.json` moved to it. Its only change is that help text, which no page
quotes.
**Findings in other repositories**, reported rather than fixed:
- **`Module-Rust` admin copy shows decision numbers.** A group's *Servers* tab reads "unless it is
shared (D189)", and the *not imported yet* chip's tooltip ends "(D198)". Neither means anything
to an operator.
- **`Module-Rust`'s servers page reads "Last pushed: 1 player hold one."** — the plural verb is
used for one.
- **`Rust-Plugins`' `PluginConfig.EventsEnabled` comment says it "gates taking a lease only"**.
That stopped being true at protocol 9, when it began gating every world write.
- **`docs` `rust-link/INTEGRATION.md` predates the installer**: it says there is no installer
support for Rust and shows protocol-1 samples. **`rust-link/INSTALL.md`'s by-hand step names two
helpers**; the bundle ships three. The org lead approved a separate `docs` PR for these:
`docs` #370.
---
[api]: https://gitea.whitlocktech.com/RunicGateway/docs/src/branch/main/website/MODULE_API.md