feat(site): phase 17 - per-game module pages, /runicnpc/, and checkTerms over the built site
All checks were successful
PR checks / checks (pull_request) Successful in 2m37s
All checks were successful
PR checks / checks (pull_request) Successful in 2m37s
PLAN.md §16 phase 17, built on the org lead's answers of 2026-10-22, recorded as D75-D79 (count of record 79). - D75: core marketing pages describe what a game module adds in core's words. "Game intelligence" became "What a game module adds"; each game's own list moved to src/data/games/ and renders only on the new /modules/uo/ and /modules/rust/. /modules/ is a card per game. - The page-side capability check is per game (assertGameCoverage), the item phase 13 moved here. - D76: the homepage keeps its game screenshot, labelled. screens.mjs entries may carry `game` (D67); Screenshot.astro and the app grid print the game's name and mark the figure data-game. - D77: /app/ describes the Rust screens (released the same day). - D78: /runicnpc/, the standalone page, is in the header and footer; the narrow header was re-measured so five links keep two rows. - D79: checkTerms.mjs --built reads every built page's visible text after the build; game routes and data-game elements allow their game's words. Proven against ten plants. Still the twelfth check. - Re-read fixes: /architecture/'s "two machines is also the maximum", Discord "guild" on /integrations/, and collection.mjs against what Steam sign-in and the Rust module keep (PLAY_DATA_SAFETY.md regenerated; the Play answers are unchanged). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
@@ -284,7 +284,7 @@ export const collected = [
|
||||
scope: 'app',
|
||||
title: 'Everything you read and post in the app',
|
||||
body:
|
||||
'Forum posts, Team activity, character and shard information, notification ' +
|
||||
'Forum posts, Team activity, what the game module shows you, notification ' +
|
||||
'preferences: all of it is a live read or write against the deployment. Apart from ' +
|
||||
'the notification snapshot described in the next entry, nothing is cached for ' +
|
||||
'offline use and nothing is duplicated anywhere else — the app with no signal is ' +
|
||||
@@ -376,9 +376,12 @@ export const collected = [
|
||||
body:
|
||||
'A username, a password hash, an optional email address, the role, and — where the ' +
|
||||
'operator has enabled it — a two-factor secret and single-use recovery codes. The ' +
|
||||
'time and IP address of the last sign-in are stored on the account row.',
|
||||
'time and IP address of the last sign-in are stored on the account row. A sign-in ' +
|
||||
'identity linked to the account — Google, Discord, an OIDC provider or Steam — keeps ' +
|
||||
'that provider’s id for the person; a Steam link also keeps the Steam display name ' +
|
||||
'and the address of the Steam avatar. Linked identities are deleted with the account.',
|
||||
retention: { summary: 'Set by the operator; nothing expires on its own' },
|
||||
source: 'website server/db/schema.sql — users',
|
||||
source: 'website server/db/schema.sql — users, user_identities',
|
||||
},
|
||||
{
|
||||
id: 'deploy-sessions',
|
||||
@@ -505,12 +508,23 @@ export const collected = [
|
||||
scope: 'deployment',
|
||||
title: 'Game data from the connected server',
|
||||
body:
|
||||
'Where a game module is installed, information about characters, guilds, houses and ' +
|
||||
'the in-game economy flows from the game server to the site through the bridge. ' +
|
||||
'Which of it is visible to the public is the operator’s decision, made in the ' +
|
||||
'admin panel — the bridge itself forwards, and the site decides.',
|
||||
retention: { summary: 'Operator-configured' },
|
||||
source: 'docs/link/v7.md — the visibility framework',
|
||||
'Where a game module is installed, what happens on the game server flows to the site ' +
|
||||
'through the bridge, and the module keeps it. With Ultima Online that is characters ' +
|
||||
'and their accounts, Teams, houses and the in-game economy. With Rust it is each ' +
|
||||
'player’s Steam id and in-game name, their statistics, who is online, and the ' +
|
||||
'server’s event record — which includes in-game chat, player reports and the IP ' +
|
||||
'addresses on sign-in attempts and bans, readable by staff only. A linked Steam ' +
|
||||
'account is kept against the site account and deleted with it. Which of any of this ' +
|
||||
'the public sees is the operator’s decision, made in the admin panel — the bridge ' +
|
||||
'forwards, and the site decides.',
|
||||
retention: {
|
||||
summary:
|
||||
'Operator-configured. The Rust module keeps its event record 30 days, and its ' +
|
||||
'sidecar keeps its own copy 14 days by default; statistics until the operator removes them',
|
||||
},
|
||||
source:
|
||||
'docs/link/v7.md — the visibility framework; Module-Rust server/db/schema.sql, ' +
|
||||
'server/catalogue.js, server/boot.js (EVENT_RETENTION_DAYS); Rust-Link sidecar/src/config.rs',
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user