fix(site): anchor the bind-mount ignores, and commit platform.json
Some checks failed
PR checks / checks (pull_request) Failing after 1m1s

`data/` without a leading slash matches a directory of that name at any
depth, so it silently swallowed src/data/platform.json -- the single file
every page and checkFacts.mjs reads.

The working tree still had it, so `npm run verify` passed locally with all
14 facts green. CI cloned fresh and `astro check` failed on the missing
module. Anchored both patterns to the repository root.

Verified the way it should have been the first time: exported HEAD to a
clean directory, npm ci, and ran the checks there rather than in the tree
that was hiding the problem.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-08-19 20:38:07 -05:00
parent 66187dde5d
commit d4ab453361
2 changed files with 68 additions and 2 deletions

10
.gitignore vendored
View File

@@ -9,8 +9,14 @@ node_modules/
# The bind mounts (PLAN.md §6, §7). Neither belongs in the repo: `brand/` is the # 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. # 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-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 # Environment
.env .env

60
src/data/platform.json Normal file
View File

@@ -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"
}
}