The pin moves from 655fbf3f (1.10.0) to 0a37a44 (1.12.0, website#210), past 1.11.0 (website#209), which it had skipped. Chapter 5 was read again for both versions: - 1.11.0: a thing the game ends on its own schedule is reported with ctx.events.expired and filed `expired`, not `orphaned`. - 1.12.0: an action's optional progress(), the line on a public event page. It answers for one reader, cheaply, and costs a line rather than the page when it fails. "What to build, in order" gains it as step 7. The template declares neither, so nothing it does changed meaning. template/module.json's coreApi becomes ^1.12.0 for the equality check. Checks run at the new pin: - checkCoreApi, links, rename sites and chapter paths all pass. - The template's import, swagger, build and externals checks pass. - Tests pass: server 82, client 20, scripts 10 and 11. - The template was loaded as `examplegame` into a real core of this code through core's own loader, and it registered. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
75 lines
4.6 KiB
JSON
75 lines
4.6 KiB
JSON
{
|
|
"repo": "https://gitea.whitlocktech.com/RunicGateway/website.git",
|
|
"branch": "main",
|
|
"ref": "0a37a44164ab107584b918e656651452b50bd4f3",
|
|
"why": [
|
|
"The core this kit is written against, pinned to a commit rather than a branch.",
|
|
"",
|
|
"2026-10-06: moved from 655fbf3f (1.10.0) to 0a37a44 (1.12.0, website#210),",
|
|
"past 1.11.0 (website#209), which this pin had skipped. Chapter 5 was read again",
|
|
"for both versions and gained two paragraphs:",
|
|
"- ctx.events.expired (1.11.0): a thing the game ends on its own schedule is",
|
|
" `expired`, not `orphaned`;",
|
|
"- an action's optional progress() (1.12.0): the live line on a public event",
|
|
" page, which answers for one reader.",
|
|
"The template declares neither, and nothing it does changed meaning. The real",
|
|
"core run below was repeated at this ref.",
|
|
"",
|
|
"Before that move:"
|
|
"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."
|
|
]
|
|
}
|