feat(site): phase 17 — per-game module pages, /runicnpc/, and checkTerms over the built site #38
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/phase-17-marketing"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & why
PLAN.md §16 phase 17 (marketing), built on the org lead's answers of 2026-10-22, recorded as D75–D79 (count of record 79; "How phase 17 built it" in PLAN.md).
D75: core pages use neutral words and link to each game. The homepage,
/features/,/architecture/and/app/name both games but use neither game's vocabulary. "Game intelligence" became "What a game module adds": seven things both modules supply, in core's words, with a button to each game's page. Each game's own list, in its own words, lives insrc/data/games/and renders only on the new pages:/modules/uo/: the old Ultima Online list, the pieces with their versions, and the five UO screenshots/features/used to show./modules/rust/: eight player features and four staff features, written from the phase-15 Rust docs. It has the pieces (module, rust-link,RunicGateway.cs, RunicNPC) and the RunicNPC card D61 asked for. No screenshots until phase 18 (D65)./modules/is now core: one card per game, then what both modules share.The page-side capability check is per game. This is the item phase 13 moved here.
assertGameCoverage()holds each game's list to its module's declared capabilities in both directions, so a capability added to either module fails the build.D76: the homepage keeps its UO screenshot, labelled.
screens.mjsentries may carrygame(D67), and nine are taggeduo.Screenshot.astroand/app/'s phone grid print the game's name beside a tagged capture and mark itdata-game.D77:
/app/describes the Rust screens. Its game section is now The game, live, with one item per game. ⚠️ Those screens are onAndroid-appedgeuntil today's release.D78:
/runicnpc/is in the header (five items), the footer and the Rust page's card. It's written for a server owner with no site. Every number on it is read from data: release, API version and framework floors fromplatform.json, and the counts of calls and hooks fromrunicnpc.mjs.D79:
checkTerms.mjs --built. After the build, it reads every page's visible text plusalt,title,aria-label,placeholder, the<title>and the meta description. It doesn't read hrefs, scripts, styles or comments. Exempt from the word list:data-game;It's still the twelfth check. It runs in
verifyand as a new CI step after Links.The supported-games strip (D63) is
SupportedGames.astro, on the homepage,/features/and/modules/.Re-read fixes in this repository
/architecture/said two machines is "the minimum and also the maximum". That's false since Rust: six servers means six sidecars. It also said the installer prints "four values", which was one game's count./integrations/and the Discord capability said "guild". They now say Discord server, as phase 14 made the docs say.collection.mjswas re-read against what Steam sign-in and Module-Rust keep:user_identities).EVENT_RETENTION_DAYS) and 14 by default in the sidecar.PLAY_DATA_SAFETY.mdwas regenerated for one reworded sentence.How it was tested
npm run verifyis green. The offline checks ran while Gitea was down.checkFacts(41 facts),checkQuickstart(59) andcheckReference(55) ran once it was back.alt, in atitle, a UO word inside a block marked Rust, a word split across two highlighting<span>s, and a UO word on a Rust page. Four passed as intended: a word only in anhref, one in a<script>, UO words on/modules/uo/, and a UO block on a core page. On the build before this phase it found 49 words on seven pages; all are gone./modules/,/modules/rust/,/runicnpc/, the/features/game group, and the homepage's labelled capture;Servers.jsx; the five app tabs, the 10-second map refresh, and the Steam accounts, coins and backpack screens on Androidedge; and the IP-carrying event kinds incatalogue.js.For the org lead
checkFactsturns red untilplatform.json'sAndroid-appmoves to the new version./app/'s download link stays in its "being replaced" state untilandroidApk.serviceableis set true for a build you've confirmed works.Checklist
npm run verifypasses locally (all twelve checks and both test suites).src/data/platform.json.PLAN.mdstill describes what this repository does; a decision it records is either unchanged or amended here, with the reasoning.AI-assisted contributions (required)
Claude Code (Claude Opus 5.5). I have reviewed and understand every change, and take responsibility for it. AI-authored commits are marked with aCo-Authored-By/Assisted-Bytrailer.License
🤖 Generated with Claude Code
https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY