{ "repo": "https://gitea.whitlocktech.com/RunicGateway/website.git", "branch": "main", "ref": "655fbf3f69a6a1fd650ecbc81afd6cf9c2ad9f66", "why": [ "The core this kit is written against, pinned to a commit rather than a branch.", "This one is the EVENT SYSTEM cutover, the commit MODULE_API_VERSION 1.10.0", "reached `main` on (website#199), and 1.10.0 is what template/module.json", "declares. It moved here from 66bb3b9a (1.9.0, the engagement cutover) because", "the event contract expanded the book by a whole chapter: a module now declares", "what its game can DO on request -- event actions, budget dimensions, leases and", "option sources -- where every earlier chapter taught only a read path and a", "thing to announce.", "", "Moving this pin is the moment someone re-reads the chapters: CI asserts the", "version template/module.json declares still equals this core's", "MODULE_API_VERSION, so a contract bump turns this repo red on purpose", "(MODULE_SYSTEM.md 2.11.1 d2, 2.10). Note what that means in the other", "direction, because it is easy to misread as a safety net: the check clones", "THIS ref, so a core that has moved past it does not turn the repo red on its", "own. Nothing goes red until someone moves the pin. Between cutovers the kit is", "not wrong, it is DATED - and this file is where the date is written down.", "", "This pin move is a REPAIR as well as a date. Chapter 5 landed (#10) declaring", "^1.10.0 while this file still named a 1.9.0 core, so `main` has been red on", "checkCoreApi since it merged -- deliberately, and stated in that PR, but the", "red belongs to the window and not to the repo. This is the commit that was", "always going to close it, and it could not be written until the events sha", "existed on `main`. Same shape Teams phase 11 used.", "", "The mechanism earned its keep again here, and twice. Writing chapter 5 against", "the event contract found that an idempotency key on a QUESTION makes every", "later read permanently stale -- an at-most-once store answers a repeated key", "with the ORIGINAL reply, so the template's second read of a value returned the", "first read's answer for ever, and the module could not see a change it had just", "made. It also found that a refusal's reason goes in `error`: core's classifier", "reads no other name, so a refusal reported under `detail` reached an author as", "a bare \"refused\". Neither was found by writing prose. Both were found by", "running the template's real declarations through core's real registry and its", "real envelopes through core's real dispatcher.", "", "That is also why this file's own instruction is not enough on its own. The", "template job builds and tests the template against fakes and checks this", "number; it does not load the module into core. A declaration a fake accepts", "and core refuses would ship green, so a pin move is a run against a real core,", "not just an edit here. It was run at THIS ref: core's real registries accepted", "the template's budget, option source, lease and event action, and apply()", "accepted the set.", "", "The branch said `edge` until 2026-08-12, when the module system cut over and", "that branch was deleted (MODULE_SYSTEM.md 2.9). Two later workstreams cut an", "`edge` of their own and this pin skipped both; the Event System cut a third,", "and this pin skipped that too until it reached `main`. The kit is written", "against what shipped, never against what is in flight. Nothing in CI reads the", "branch field - it clones the repo and checks out the sha - which is why a wrong", "label here would sit unnoticed. It is for the person deciding whether a newer", "core is worth re-reading the book for.", "", "Same convention as Module-uo's ci/core-ref.json, deliberately - one file, one", "sha, reviewable in a diff." ] }