diff --git a/.gitignore b/.gitignore index af9263d..97cc78a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,14 @@ node_modules/ # The bind mounts (PLAN.md §6, §7). Neither belongs in the repo: `brand/` is the # operator's override of the stock branding, and `data/` is the beta signup store. # `brand-default/` IS committed — it is baked into the image and must always be complete. -brand/ -data/ +# +# Both patterns are anchored with a leading slash, and that is load-bearing: an +# unanchored `data/` matches a directory of that name at ANY depth, so it silently +# swallowed `src/data/platform.json` — the one file the whole accuracy machinery reads. +# The working tree still had it, so every local check passed; CI, cloning fresh, failed +# on the missing module. Anchor anything meant to match only the repository root. +/brand/ +/data/ # Environment .env diff --git a/src/data/platform.json b/src/data/platform.json new file mode 100644 index 0000000..6c61e3e --- /dev/null +++ b/src/data/platform.json @@ -0,0 +1,60 @@ +{ + "$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.0", + "Module-uo": "v1.0.1", + "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", + + "gitea": { + "base": "https://gitea.whitlocktech.com", + "org": "RunicGateway" + } +}