chore(ci): pin the kit to the Event System core, and go green (Phase 16b cutover, 5 of 6) #11
@@ -1,14 +1,16 @@
|
||||
{
|
||||
"repo": "https://gitea.whitlocktech.com/RunicGateway/website.git",
|
||||
"branch": "main",
|
||||
"ref": "66bb3b9a3fad01112c06f32d931c9bae56d22de6",
|
||||
"ref": "655fbf3f69a6a1fd650ecbc81afd6cf9c2ad9f66",
|
||||
"why": [
|
||||
"The core this kit is written against, pinned to a commit rather than a branch.",
|
||||
"This one is the engagement cutover, the commit MODULE_API_VERSION 1.9.0 reached",
|
||||
"`main` on, and 1.9.0 is what template/module.json declares. It moved here from",
|
||||
"1.6.0 (the Teams cutover) because engagement expanded the contract the book",
|
||||
"teaches by three registrations and two calls: a module now declares what its",
|
||||
"game can announce and never who is told.",
|
||||
"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",
|
||||
@@ -19,29 +21,40 @@
|
||||
"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.",
|
||||
"",
|
||||
"The mechanism earned its keep again here. Writing chapter 2's engagement",
|
||||
"section against 1.9.0 found that the seeded body a module ships is the one",
|
||||
"thing registerEngagementSeeds does not validate - it checks that `blocks` is a",
|
||||
"non-empty array and stops - so the template's own example body had a heading",
|
||||
"level of 2 where the block registry takes 'h2', and no block ids at all. It",
|
||||
"would have registered, seeded, and failed the first time an operator opened it.",
|
||||
"Caught by running the template's register() through core's real registry at",
|
||||
"this ref, which is what a re-read is for; both the fix and the gap are now in",
|
||||
"the chapter and beside the code.",
|
||||
"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.",
|
||||
"",
|
||||
"That gap is also why this file's own instruction is not enough on its own. The",
|
||||
"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.",
|
||||
"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 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.",
|
||||
"`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."
|
||||
|
||||
Reference in New Issue
Block a user