All checks were successful
PR checks / checks (pull_request) Successful in 1m25s
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>
83 lines
2.8 KiB
JSON
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"
|
|
}
|
|
}
|