All checks were successful
PR checks / checks (pull_request) Successful in 2m28s
Both were released on 2026-10-23. Android-app v0.6.0 is the cutover that ships the Rust screens and the app's core wording (M20), and its APK asset is runic-gateway-0.6.0.apk. Module-Rust v0.5.1 brings the weapon names in the feed. verifiedOn moves to 2026-10-23, and checkFacts agrees on all 41 facts. androidApk.serviceable stays false. It records a person's confirmation that the published APK works, and nobody has run v0.6.0 against a real site yet. A smoke test of the signed APK on the emulator covered install, launch, the HTTPS rule and one TLS round trip, but no Runic Gateway site serves HTTPS locally. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
141 lines
5.4 KiB
JSON
141 lines
5.4 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-10-23",
|
|
|
|
"$comment_moduleApi": [
|
|
"The one version every deployment shares, whichever game it runs. D66: it is the only",
|
|
"version the homepage hero and the footer show — a protocol and a bundle belong to a game,",
|
|
"so they appear on that game's own pages."
|
|
],
|
|
"moduleApi": "1.17.0",
|
|
|
|
"$comment_releases": [
|
|
"Every repository whose release the site quotes, flat, so checkFacts.mjs reads them all",
|
|
"the same way. Which game a repository belongs to is said once, under `games` below."
|
|
],
|
|
"releases": {
|
|
"installer": "v0.8.1",
|
|
"Android-app": "v0.6.0",
|
|
"link": "v2.3.0",
|
|
"Module-uo": "v1.3.0",
|
|
"Rust-Link": "v0.3.0",
|
|
"Rust-Plugins": "v0.3.0",
|
|
"Module-Rust": "v0.5.1",
|
|
"runicnpc-rust": "v1.0.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,
|
|
|
|
"$comment_games": [
|
|
"PLAN.md §16. One entry per game the platform supports. Each game has its own wire",
|
|
"protocol (declared by its sidecar AND its game-side plugin, and re-read from both) and",
|
|
"its own bundle on the installer's `bundles` branch, at `v2/<bundleGame>/current.json`.",
|
|
"The root `current.json` is the schema-1 manifest and is no longer read: it stopped",
|
|
"moving when the installer went to one bundle per game.",
|
|
"",
|
|
"`module.capabilities` is re-read from the module's own module.json, unsorted order being",
|
|
"the module's business. `name` is the game's own name — D63 lets the site at large say it."
|
|
],
|
|
"games": {
|
|
"uo": {
|
|
"name": "Ultima Online",
|
|
"bundleGame": "servuo",
|
|
"protocol": 8,
|
|
"module": {
|
|
"repo": "Module-uo",
|
|
"coreApi": "^1.10.0",
|
|
"capabilities": ["shard", "atlas", "market", "governors", "guilds", "houses", "champs", "cliloc"]
|
|
},
|
|
"sidecarRepo": "link",
|
|
"pluginRepo": "servuo-plugins",
|
|
"bundle": {
|
|
"tag": "2026.09.15",
|
|
"sidecar": "v2.3.0",
|
|
"overlay": "v1.3.0",
|
|
"servuoMin": "57.4"
|
|
}
|
|
},
|
|
"rust": {
|
|
"name": "Rust",
|
|
"bundleGame": "rust",
|
|
"protocol": 14,
|
|
"module": {
|
|
"repo": "Module-Rust",
|
|
"coreApi": "^1.17.0",
|
|
"capabilities": ["rust", "servers", "killfeed", "leaderboard", "presence", "wipes", "identity", "map"]
|
|
},
|
|
"sidecarRepo": "Rust-Link",
|
|
"pluginRepo": "Rust-Plugins",
|
|
"bundle": {
|
|
"tag": "2026.10.22",
|
|
"sidecar": "v0.3.0",
|
|
"plugin": "v0.3.0",
|
|
"oxideMin": "2.0.7585",
|
|
"carbonMin": "2.0.259",
|
|
"requiresPlugins": ["Kits", "ZoneManager"],
|
|
"runicnpc": "v1.0.0"
|
|
}
|
|
}
|
|
},
|
|
|
|
"$comment_runicnpc": [
|
|
"RunicNPC — the Rust NPC plugin (PLAN.md §16, D61). It ships in the Rust bundle and also",
|
|
"stands alone, so it has facts of its own: `api` is the version a calling plugin relies",
|
|
"on, declared in runicnpc-rust's plugin.toml and re-read from there and from the bundle.",
|
|
"Its framework floors are its own and differ from the bridge's."
|
|
],
|
|
"runicnpc": {
|
|
"api": 6,
|
|
"oxideMin": "2.0.7726",
|
|
"carbonMin": "2.0.259",
|
|
"requiresPlugins": ["Kits"]
|
|
},
|
|
|
|
"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.6.0.apk",
|
|
"checksums": "SHA256SUMS",
|
|
"minSdk": 29,
|
|
"minAndroid": "10",
|
|
"serviceable": false
|
|
},
|
|
|
|
"gitea": {
|
|
"base": "https://gitea.whitlocktech.com",
|
|
"org": "RunicGateway"
|
|
}
|
|
}
|