Files
runicgateway.com/src/data/platform.json
wtclaude c29ec94f46
All checks were successful
PR checks / checks (pull_request) Successful in 1m25s
feat(screens): phase 9 — real screenshots, from a real shard
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>
2026-08-25 09:55:55 -05:00

83 lines
2.8 KiB
JSON

{
"$comment": [
"PLAN.md §12: one file holding every externally-sourced fact. Every page reads from",
"here, and NO version number is ever hardcoded in prose.",
"",
"`scripts/checkFacts.mjs` fetches the authority for each value below and fails the build",
"on any disagreement. When the platform moves, this repo goes red so someone updates the",
"site — that failure is the feature, exactly as in the Integration Kit's checkCoreApi.js.",
"",
"Do not edit a value here to make the check pass without also re-reading the page that",
"quotes it. §1's process rule exists because a stale local `main` is what produced the",
"wrong protocol number in the first place."
],
"verifiedOn": "2026-08-19",
"protocol": 4,
"moduleApi": "1.6.0",
"bundle": {
"tag": "2026.08.19",
"sidecar": "v2.0.0",
"overlay": "v1.0.0",
"servuoMin": "57.4"
},
"releases": {
"link": "v2.0.0",
"installer": "v0.1.1",
"Module-uo": "v1.0.2",
"Android-app": "v0.5.0"
},
"$comment_website": [
"`website` publishes no releases at all — it ships as container images and is never",
"tagged. The site must never print a 'website version'; it refers to the platform by",
"bundle tag and Module API version instead. checkFacts.mjs asserts the releases list is",
"still empty, so the day that changes, this repo notices."
],
"websiteHasReleases": false,
"moduleUoCapabilities": [
"shard",
"atlas",
"market",
"governors",
"guilds",
"houses",
"champs",
"cliloc"
],
"androidApplicationId": "com.runicgateway.app",
"$comment_androidApk": [
"Phase 5 / `/app/`. The app is not on any store, so the only way to install it is the",
"signed APK attached to each Android-app release. `asset` and `checksums` are the two",
"assets checkFacts.mjs asserts exist on releases/latest, and `minSdk` is re-read from",
"the app's build.gradle.kts — so the download block on /app/ cannot outlive the file it",
"points at, and 'Android 10 or newer' cannot outlive the number that makes it true.",
"",
"`serviceable` is the one value here with no authority to check it against, and it is",
"deliberately manual. It answers a question no API can: does the published build",
"actually work. The org lead reports v0.5.0's does not, so the download block renders a",
"'being replaced' state instead of a link, and flipping this to true is the single edit",
"that turns the link back on once a working build is released. A check cannot run an",
"APK; a person can, and this is where they record that they did."
],
"androidApk": {
"asset": "runic-gateway-0.5.0.apk",
"checksums": "SHA256SUMS",
"minSdk": 29,
"minAndroid": "10",
"serviceable": false
},
"gitea": {
"base": "https://gitea.whitlocktech.com",
"org": "RunicGateway"
}
}