Journal
One article per published release, oldest first. CHANGELOG.md answers what changed if I update?; this answers why did we do that, and what did we learn? Walk it front to back and the kit’s evolution reads as a story rather than a diff.
Two prose rules, enforced by tests/skills/test.sh rather than by review: every article is in English, and no article contains an em dash. Use commas, colons, parentheses or separate sentences instead. French quoted inside guillemets does not count against the first rule, so an article can still quote what a skill actually says.
Adding the next article
When a release lands:
- Copy the newest article to
docs/journal/v<the new version>.md. - Set
nav_orderto the previous article’s plus one. Never renumber an existing article. - Rewrite the body from
gh release view v<the new version>andgit log v<previous>..v<the new version> --oneline, in the voice of whoever shipped it: what the release was answering, what was decided, what got cut, what bit us. - Run
./tests/skills/test.sh.
The guard checks both what is here and what is missing: it holds every article to the two prose rules and to a unique nav_order, and it also requires every published release except the newest to have a docs/journal/<tag>.md article, so the journal cannot silently go stale. A checkout with no v* tags at all is refused rather than treated as passing, since silence there would hide every missing article instead of catching it.
The exemption is exactly one release wide, always: the newest tag by creation time. On a day with several releases (this repository has tagged six in one afternoon) the gate goes red for every open pull request the moment a second release is tagged, because the release that was newest a minute ago is now an older tag with no article. That is the gate working, not a bug. The recovery is to write the missing articles, oldest tag first; the refusal names every missing tag, so nothing has to be worked out by hand.
Table of contents
- v1.4.1: the first published release is a patch
- v1.5.0: the pipeline accounts for its own queue
- v1.6.0: one plugin, two cooperating suites
- v1.7.0: a stranger installs the plugin and finishes without the author in the room
- v1.8.0: Arbor's seatbelts, not its steering wheel
- v1.9.0: phase 1 becomes a gate instead of a formality
- v1.9.1: a merged fix that no consumer loads is not a shipped fix
- v1.10.0: a zero exit is not a receipt
- v1.11.0: the kit learns to drive itself, and its gates learn to admit ignorance
- v1.12.0: the backlog gets a drain
- v1.12.1: the lifecycle skills stop believing the wrong oracle
- v1.13.0: the kit takes over its own repository configuration
- v1.13.1: eight corrections, and a patch number that undersells them
- v1.14.0: the merge phase learns to check before it claims
- v1.15.0: the kit stops believing its own comments
- v1.16.0: a check that never ran is not a check that passed
- v2.0.0: the kit stops being a folder of good intentions
- v2.1.0: the fleet learns to read its own comments
- v2.2.0: the never-wait rule becomes a hook
- v2.3.0: what a more mature method taught the kit