Files
runicgateway.com/src/data/platform.json
wtclaude e91e76bfa9
All checks were successful
PR checks / checks (pull_request) Successful in 9m34s
docs(site): the Event System — the platform's facts, and two pages for it
Phase 16c of the events plan: `runicgateway.com`'s half of the workstream, now
that `main` carries the engine, the module, the app and the bundle.

The checks were already red and named their own answers:

* `checkFacts` — nine values had moved. Protocol 5 → 7 in all three declaration
  sites, `moduleApi` 1.9.0 → 1.10.0, the bundle to 2026.09.10 with sidecar
  v2.2.0 and overlay v1.2.0, `link` v2.2.0, `Module-uo` v1.2.2.
* `checkReference` — twenty-seven `Bridge.cfg` keys the site listed nowhere: the
  events switch and its sweep, the ten caps, the oracle NPC, the two lease keys
  and the seven participation keys. They are five new groups rather than an
  appendix to an existing one, because `EventsEnabled` is a second consent
  switch and belongs beside its own ceilings.

Two pages, matching the treatment Teams has:

* **Scheduled events** (Administration) — where it is and who sees it, authoring
  and immutable versions, the switchboard that arrives off, caps as a condition
  on an `UPDATE` rather than a role check, the dry run, the run console, what an
  event owns versus what it borrows, generated cleanup, the shard's own switches,
  and what a player sees.
* **Events architecture** — the two sentences it turns on, what is a table and
  what deliberately is not, budgets in SQL, the ledger's two rules, at-most-once
  on a wire that can lose an answer, the three layers, and the four omissions.

And the rest of the surface:

* `/privacy` gains **`deploy-events`** — the participation ledger is personal
  data and no row named it. Scores and ranks against a module-opaque member key,
  linked to an account where one is linked; the diagnostic log swept after 90
  days on terminal runs only; the run, its steps and its participants not swept
  at all, because they are the record of what was done to a shared world.
  `deploy-game-data`'s citation moves from `link/v4.md` to `v7.md`.
* **Protocol versions** — the most recent bump touched *five* repositories, and
  the `website` row is the interesting one: core is normally out of a protocol
  bump's reach and this one reached it, because what changed was not a game noun
  but the shape of a thing core owns the ledger for. The store-migration
  paragraph now says four bumps' worth rather than two.
* Two capability entries, so `/`, `/features/` and `/modules/` stop omitting the
  subsystem — an Administration item, and an **Event calendar** under Community
  with `/site/events` as its deep link. Deliberately *not* `needsModule`: a bare
  core can author and run an event, and only the world verbs need a module.
* **`reference/event-catalog` is retitled "Shard event catalog"** and says what
  it is not. Two things in the docs were called an event catalog; the route is
  unchanged, so nothing outside this repository breaks.
* `canonicalDocs` gains `website/EVENTS.md` and moves `link/v4.md` → `v7.md`.

No screenshots. Capturing the events surfaces means standing the whole rig back
up — game server, sidecar, core, module, a published event with a live run — for
two or three images that no check requires, and the engagement workstream's own
site leg added none either.

`npm run verify` green end to end, including `checkReference` against the
protocol spec that only reached `docs` `main` in RunicGateway/docs#232 — the
seventh cutover step, which 16b had left on `edge`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
2026-09-09 22:04:27 -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-09-09",
"protocol": 7,
"moduleApi": "1.10.0",
"bundle": {
"tag": "2026.09.10",
"sidecar": "v2.2.0",
"overlay": "v1.2.0",
"servuoMin": "57.4"
},
"releases": {
"link": "v2.2.0",
"installer": "v0.1.1",
"Module-uo": "v1.2.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"
}
}