The pin moves from 0a37a44 (1.12.0) to 6890a74 (1.17.0, website#220), past 1.13.0 to 1.16.0, which reached main in the same cutover. The chapters were read again for all five versions: - Chapter 5: a lease's example, an option row's note, a param's duration (1.13.0) and multiple (1.14.0), a retry's retryAfterMs (1.15.0), a dry run's warnings (1.16.0), and a new section on templates (1.13.0). "What to build, in order" gains a template as step 8. - Chapter 2: a new section on the identity-link hooks and ctx.identities.list (1.17.0). The call count is corrected to nineteen; it said twelve, which was already stale at 1.10.0. - Two core changes in that cutover carried no version bump, and both are taught. Chapter 1 now says a site runs one game module and the loader refuses the others, since a reader copying the template onto a UO or Rust core is the one it surprises. Chapter 5 now covers a resource's `until`, which reconcile reads. The template declares none of the new members, so nothing it does changed meaning. template/module.json's coreApi becomes ^1.17.0 for the equality check. Checks run at the new pin: - checkCoreApi, links, rename sites and chapter paths all pass, and so do the script tests (10 and 11). - The template's imports, build, externals and swagger checks pass. - Tests pass: server 82, client 20. - The template was loaded as `examplegame` into a real core of this code through core's own loader, and it registered. Loaded again beside module-uo, examplegame started and uo was refused with the reason chapter 1 quotes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
94 lines
5.8 KiB
JSON
94 lines
5.8 KiB
JSON
{
|
|
"repo": "https://gitea.whitlocktech.com/RunicGateway/website.git",
|
|
"branch": "main",
|
|
"ref": "6890a74c7c4ad5690509e8c163e477d7f7b399e7",
|
|
"why": [
|
|
"The core this kit is written against, pinned to a commit rather than a branch.",
|
|
"",
|
|
"2026-10-23: moved from 0a37a44 (1.12.0) to 6890a74 (1.17.0, website#220,",
|
|
"the cutover that brought Steam sign-in and the Rust last fixes to `main`),",
|
|
"past 1.13.0 to 1.16.0, which reached `main` together on 2026-10-22. The",
|
|
"chapters were read again for all five versions:",
|
|
"- 1.13.0: templates (chapter 5 gains a section), a param's duration, a",
|
|
" lease's example, an option row's note;",
|
|
"- 1.14.0: a param's multiple and max;",
|
|
"- 1.15.0: a retry's retryAfterMs;",
|
|
"- 1.16.0: a dry run's detail.warnings;",
|
|
"- 1.17.0: onIdentityLinking / onIdentityLinked and ctx.identities.list",
|
|
" (chapter 2 gains a section, and its call count is corrected to nineteen).",
|
|
"Two core changes in the same cutover carried no version bump, and both are",
|
|
"taught: a site runs ONE game module, which the loader now enforces at boot",
|
|
"(chapter 1, the reader most likely to be surprised by it), and a resource's",
|
|
"`until` is read at reconcile (chapter 5). The template declares none of the",
|
|
"new members, so nothing it does changed meaning; module.json's coreApi",
|
|
"becomes ^1.17.0 for the equality check. The real core run was repeated at",
|
|
"this ref, with the template as the only module in the directory.",
|
|
"",
|
|
"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."
|
|
]
|
|
}
|