--- name: release metadata: version: "0.24.9" description: Cut a versioned release — stamp the changelog, snapshot the roadmap, tag, create the platform release, publish, and sync. Use when asked to "cut a release", "ship vX.Y.Z", "tag a version", or when an unreleased changelog section is ready to go out. --- # Release A release is worklog work: record a release task first (work-track), and the release leaves frozen artifacts behind — a dated changelog section, a roadmap snapshot, a tag, and a platform release. No per-system code ships with this skill; use the platform's own release tooling. ## 1. Preconditions - Clean working tree on the default branch (or a release-prep branch about to merge into it). - All test suites green locally; CI green on the tip. - Version lockstep holds: the plugin manifest, `bin/worklog --version`, and every plugin skill's frontmatter agree (`tests/test_plugin.py` enforces it). - The top CHANGELOG section reads `## X.Y.Z — unreleased` and describes what actually ships. If it doesn't, fix that first — release notes are written as features land, not reconstructed at tag time. When the section is missing or thin, `bin/worklog changelog-draft --version X.Y.Z` writes a starting draft from git log since the last tag (markdown on stdout, the commits it excluded on stderr). It is bullets, not release notes: edit the prose before stamping, and read the exclusion list to confirm nothing real was dropped. ## 2. Stamp - CHANGELOG: change `— unreleased` to `— YYYY-MM-DD` (UTC, release date). - `bin/worklog roadmap-snapshot --name vX.Y.Z-release` — the frozen picture of open work at release time. Snapshots are frozen; never regenerate. - `bin/worklog ia-index` — sidecars the new snapshot (stamping its `release` and supersede chain), refreshes the inventory, and re-renders Home/Sidebar/Releases-index + publish manifest so the release is navigable. Commit `docs/.index/` with the snapshot. - `bin/worklog trace-check --strict` — the pre-release evidence gate: every closed item must trace to a plan, ticket, and PR. Failures block the release; fix the links (`worklog link-pr`, sidecar `relates_to`) or consciously report the gaps to the human — never skip silently. - `bin/worklog doc-verify --strict` — the pre-release citation gate: every document's code citations must resolve at the commit that document was written against. FABRICATED means wrong even in the tree the author had open — a real defect, fix it. DRIFT on a frozen document is expected and does not block; drift on `current_design_doc` / `current_code_walkthrough` does, because those claim to describe HEAD. `unresolvable` means the stamped commit is not in this clone (see ADR-0008) — report it, never re-check against HEAD. ## 3. Land it Commit the stamp + snapshot on a release-prep branch and land it as a PR (the branch guard hook refuses commits directly on the default branch -- main is pull-only). The release tags the commit that carries the dated changelog. ## 4. Tag and platform release - `git tag vX.Y.Z ` on the landed commit; push the tag. - Create the platform release with the CHANGELOG section as the notes: GitHub — `gh release create vX.Y.Z --title "vX.Y.Z" --notes-file
`; GitLab — `glab release create`; other systems — their CLI or MCP, or tag-only when the platform has no release object. Research, don't guess. ## 5. Doc sync — background agents The moment the tag exists, spawn background subagents — the release NEVER waits on prose. Read `release.sync_docs` in `.work/config.yml`; each listed target gets regenerated and republished. Doc commits land on the default branch AFTER the tag: docs describe the release, the tag does not wait for them. - **Agent A — design-docs skill, release mode**: regenerates `docs/designs/current_design_doc.md` + `current_code_walkthrough.md` against the tagged commit, freezes the dated pair (`__*.md`), publishes all four via wiki-publish. - **Agent B — user-docs refresh**: diffs `vPREV..vX.Y.Z`, updates `docs/user_guide/*.md` and `README.md` wherever that diff made them stale (only targets named in `release.sync_docs`), then republishes changed wiki pages through the ledger. Agents report when done; their commits reference the release work item. Removing an entry from `release.sync_docs` opts that doc out — the list is the contract, not this prose. ## 6. Publish and sync - wiki-publish: the updated Roadmap and the release snapshot page; link the snapshot from Home. - ticket-sync: close the release work item(s); anything shipped-and-closed reconciles with the tracker. Release items are local-only by convention — no external ticket is filed for them, so this step is a no-op for the release item itself. That's intentional, not a gap: the tag and platform release already give the release public visibility; don't file a redundant issue just to have something for ticket-sync to close. - **Re-index after publishing, and commit the result.** Publishing writes the page's live wiki location back into the ledger, so the generated inventory is stale the moment the last page lands. Run `bin/worklog ia-index` and commit `docs/.index/` — the IA gates are hard now, and the next commit fails otherwise. One pass is enough: publishing adds only the wiki location to a record, which is not part of the render hash, so re-indexing never makes another page need republishing. ## 7. After - `bin/worklog provenance-backfill` — stamps `merged_in` on frozen documents that have now landed on the default branch. A document cannot know the merge that will carry it, so this is the step that fills it in; run it on the post-release branch (this step already lands a commit) and run `worklog ia-index` alongside it in the SAME commit, or the freshness gate rejects the result. Frozen documents only, by design — a live document has been edited since it landed, so the merge that first carried it would name a version that no longer exists. Safe to re-run: it skips anything already stamped. The next feature wave opens a new `## X.Y.Z — unreleased` section and bumps the version lockstep in the same commit that adds the first feature. Released changelog sections are frozen — corrections go in the next release's notes, same rule as status reports.