Phase 5 slice 0 (MODULE_SYSTEM.md §2.11.1). The repo's governance, the front
page, the book's outline, and the CI that keeps the whole thing from rotting.
README.md
What the reader is building, all three parts, and the draft banner: the kit is
finished when someone outside this project builds a working module by
following it alone, and that has not happened. Says the sidecar rule plainly
(MODULE_API.md §2.7) rather than leaving it to chapter 3, because a reader who
skims the front page and starts coding should still get that one right.
book/README.md
The outline of four chapters, landed before the prose so the shape can be
argued with. Chapters are named but NOT linked — a link to a file that does
not exist is what the link check is for, and an outline should not be the
first thing to fail it.
CONTRIBUTING.md
The rule that governs every change here: the kit never re-specifies a
contract. Also the prose conventions, and why the pinned ref points at core's
`edge` rather than `main`.
SECURITY.md
Scoped for a repo that runs nothing: the two things that ARE reportable are a
template that teaches an insecure pattern (it is meant to be copied) and a
chapter that teaches something dangerous.
scripts/checkLinks.js
Relative links resolve; anchors match a real heading; no link pins a reader to
a commit snapshot of a moving document. Nothing is fetched — a self-hosted
Gitea would fail on a credential-less runner and teach us to ignore red.
Fences and code spans are stripped by a line walk, not a regexp.
Its first run found a real one: a PR template's relative links resolve from
the REPO ROOT, because that is where their text ends up when Gitea inlines
them into a pull request body. Encoded, with the reason.
scripts/checkCoreApi.js
The anti-rot check. Asserts template/module.json's `coreApi` EQUALS the pinned
core's MODULE_API_VERSION — equality, not "satisfies", because a range check
stays green across a contract bump and green would then mean "the template
still loads" instead of "someone has re-read the book". Both failure branches
and the pass were exercised against a real core checkout.
ci/core-ref.json
The pin, same convention as Module-uo's. Points at `edge`: core's `main` has
no server/src/modules/ until the cutover, and that pin is one of the things
the cutover has to revisit.
.gitea/workflows/pr-checks.yml
Two jobs. `links` always runs; `template` is conditional on
template/module.json existing, so the repo is gated now and the job arms
itself when slice 1 lands, with no edit to the workflow. Same guard Module-uo
used through its planning phase.
Co-Authored-By: Claude <noreply@anthropic.com>
The repo's first commit, pushed straight to `main` because an empty repo cannot
take a pull request. Everything after it goes through one, starting with the
scaffold.
Deliberately only the two files nobody needs to review: both are verbatim copies
of the versions already approved in the other Runic Gateway repos. The authored
scaffolding — README, CONTRIBUTING, SECURITY, the book's outline, the checks and
the CI — is a pull request, because in this repo the prose IS the product and
landing it unreviewed on `main` would skip the review that matters most.
Phase 5 of the module plan (docs: website/MODULE_SYSTEM.md §2.11, §2.11.1).
Co-Authored-By: Claude <noreply@anthropic.com>