feat(screens): phase 9 — real screenshots, from a real shard #13
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/phase-9-screens"
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?
D4 asked for screenshots of the review stack rather than placeholders. Seventeen of them — eleven of the site in a browser, six of the app on a phone — all from one demo deployment wired to a running ServUO shard over a real sidecar, captured on one day.
Five decisions were taken before the rig was built; PLAN.md §10 "How phase 9 took the screenshots" records them in full.
websitemain+module-uo, with the demo database seeded on top for what a fresh shard cannot produce/features/, and five of the administration pages phase 7 could describe but not showservuo-plugins' scaffolding (its PR #17)What is in the pictures
The marketplace rows are player vendors the game actually holds. The atlas is parsed from the shard's own spawn files. The guild rosters and the alliance came over the bridge. "Candlewick House is now IDOC" happened while the page was open — and appears both in the browser's Houses in danger and in the app's live activity feed, the same minute.
And there is a player in the world. The org lead signed a character in by hand (see below), so the shard console reads 1 player online, in Britain, and the app's shard card agrees. Presence reaches the public page as counts and regions, not names — the visibility framework doing its job unprompted.
The pipeline
The seed never writes SQL. Every row it creates could have been an
INSERT, and everyINSERTwould be a second implementation of a rule the website owns — how a body is sanitized, which excerpt is derived, how a password is hashed. A seed that writes SQL produces a database the product could not have produced.checkScreens.mjsproves every entry has a file, at the declared size, that nothing inpublic/screens/is orphaned, and that every declared capture is rendered somewhere. The size half is the one that repays it: a re-capture taken at the wrong viewport looks fine on its own and only shows up as a page that reflows while it decodes.The retake proved the point of D45: the world changed, the recipe did not —
npm run screens:capture shard-status app-shardwas the whole operation.What the rig found
A screenshot rig is an integration test with a human in the loop. Six things nothing else had:
module-uoinstall pinned protocol 3 against a sidecar speaking 4 — every shard read 409s until an admin edits the number by hand. Fixed upstream, released as v1.0.2; this repo's own facts check then caughtplatform.jsonstill saying v1.0.1 (also fixed here).guild.removeafter a reconnect clears the cache. The demo's board was showing two guilds the world had not had for a week.shard_online_countandShardEventText.ktboth interpolate a count into a fixed plural. It is in the shipped phone capture; apluralsresource is the fix, in the app. Say the word and it is a smallAndroid-appPR plus a one-command retake.1 is fixed. The rest are raised, not patched, and the rig works around 2 and 4 honestly (guilds are built after the rename; the IDOC staging is two passes with a wait, so the site watches the collapse happen).
Two things that did not go to plan
settings.json, synthetic clicks reach it while synthetic text does not, and the foreground route failed to take focus and typed into the browser window in use at this machine. It was not tried again; the org lead signed in instead.Verification
All nine checks plus
astro check, the unit tests and a production build, locally: tokens, brand, links (2,410), facts (19), quickstart (59), data safety, reference (22), sidebar, screens (17). Every figure was looked at in a browser on the built site — homepage,/features/and the docs pages.AI-assisted: written with Claude Code (Claude Opus 5). Commits carry the
Co-Authored-Bytrailer.🤖 Generated with Claude Code
D4 asked for screenshots of the review stack rather than placeholders. Seventeen of them: eleven of the site in a browser, six of the app on a phone, all from one demo deployment wired to a running ServUO shard over a real sidecar, captured on one day (D42). The deployment is branded "Runic Gateway Demo" rather than a real community (D43), and the captures sit beside the claims they support — the homepage, /features/, and five of the administration pages phase 7 could describe but not show (D44). The rig is committed rather than remembered (D45): scripts/seedDemo.mjs content, by driving the site's own API — never SQL, because a row the product could not have produced is a screenshot of a product that does not exist src/data/screens.mjs every capture: route, viewport, scroll, alt, caption scripts/captureScreens.mjs npm run screens:capture scripts/checkScreens.mjs the ninth check script, in CI Shard-side dressing is servuo-plugins' scaffolding (D46), never deployed. The rig found five things nothing else had. One is fixed upstream — a fresh module-uo install pinned wire protocol 3 against a sidecar speaking 4, released as v1.0.2, which this repo's own facts check then caught in platform.json. Four are raised as product observations and worked around in the rig: a renamed guild member never reaches the site, a guild deleted while the shard is down is a ghost row forever, "Houses in danger" cannot show a house that was already collapsing, and the app's news list prints raw ISO timestamps. Players online reads 0. Logging a character in needs a UO client driven by hand, and that is where this stopped — PLAN.md §10 says exactly why, and how to retake the two frames that would change. Co-Authored-By: Claude <noreply@anthropic.com>