docs: scaffold the Integration Kit — front page, outline, and the checks #1
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/scaffold"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Phase 5 slice 0. This repo's first pull request. Plan: docs#145 (
MODULE_SYSTEM.md§2.11.1).The initial commit went straight to
mainbecause an empty repo cannot take a PR — but unlike Module-uo's bootstrap, it carries onlyLICENSE.mdandCODE_OF_CONDUCT.md, both verbatim copies of files already approved elsewhere. Everything authored is here instead, because in this repo the prose is the product and landing it unreviewed onmainwould skip the review that matters most.The front page
README.mdopens with what the reader is building — module, sidecar, game plugin, with a diagram of the data path — and carries the draft banner decision 5 asks for: the kit is finished when someone outside this project builds a working module by following it alone, that has not happened, and the places they get stuck are the most valuable thing the repo can receive.It states the sidecar rule on the front page rather than saving it for chapter 3. A reader who skims a README and starts coding should still get that one right.
The outline, landed before the prose
book/README.mdis four chapters with what each will cover, so the shape can be argued with before there is prose to defend. Chapters are named but not linked — a link to a file that does not exist is exactly what the link check is for, and an outline should not be the first thing to fail it.The two checks
scripts/checkLinks.js— relative links resolve, anchors match a real heading, and no link pins a reader to a/src/commit/<sha>/snapshot of a document we want them reading the current version of. Nothing is fetched, on purpose: this project's Gitea is self-hosted, so an HTTP check would fail on a credential-less runner, flake when the host is busy, and teach everyone to ignore red. Fenced blocks and code spans are stripped by a line walk, not a regexp — a fence's content can contain anything, including a line that looks like the end of one, and a code fence in this repo legitimately contains paths that do not exist yet.scripts/checkCoreApi.js— the anti-rot mechanism (decision 2). It assertstemplate/module.json'scoreApiequals the pinned core'sMODULE_API_VERSION.Equality and not "satisfies", and that is the whole point: a range check is what core does at load time and it is right there, but it is the wrong question here. If core moves to 1.5.0,
^1.4.0still satisfies, the build stays green, and nobody ever re-reads the chapters. Green would mean "the template still loads" when we need it to mean "someone has looked at this since the contract changed". So this failing on a core bump is the system working, and the failure message says so and lists the three steps — with a note that bumping the two files without doing step 2 is the one way to make the check worthless.How it was tested
node scripts/checkLinks.js→31 link(s) across 9 markdown file(s) — OK.checkCoreApi.jsexercised on all three branches against a real core checkout: matching (^1.4.0vs 1.4.0) exits 0; stale (^1.3.0vs 1.4.0) exits 1 with the explanation; a--corewith noserver/src/modules/exits 1 naming the pin and themain-vs-edgereason.run:blocks contain zero${{ }}tokens (checked, not eyeballed) — a literal empty expression in arun:script silently skips the step and has cost this org months before.Two things carried over from other repos' scars
edge, notmain(ci/core-ref.json) — the module system has not cut over andmainhas noserver/src/modules/at all. The file says so, and says the cutover has to revisit it.templatejob is guarded ontemplate/module.jsonexisting. The template lands in slice 1; until then the job reports green with a notice saying why, and arms itself the moment the file appears with no edit to the workflow. Same guard Module-uo#1 used through its planning phase — it beats leaving the repo ungated, and beats red-Xing every docs PR until there is code to check.Owed, one-time and manual
Branch protection on
main(PR Checks / *) still has to be set in the Gitea UI, and Gitea only lists a status context after it has reported once — so this PR is the run that makes it selectable. The workflow header records it.🤖 Generated with Claude Code
https://claude.ai/code/session_018ocYxQWk3EhZe5gWRJXFU8