Files
Integration-kit/ci/core-ref.json
wtclaude 5b3f5a5d54
Some checks failed
PR Checks / template (pull_request) Failing after 12s
PR Checks / prose (pull_request) Successful in 14s
docs(kit): pin core 1.17.0; teach 1.13.0 to 1.17.0 and one module per site
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
2026-10-23 02:01:26 -05:00

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."
]
}