From beads-superpowers
Audits and updates project documentation (README, ARCHITECTURE, CHANGELOG, etc.) after code changes but before PR merge. Automates factual corrections and prompts for subjective decisions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/beads-superpowers:document-releaseThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **Source:** Adapted from [garrytan/gstack](https://github.com/garrytan/gstack/tree/main/document-release) (Garry Tan)
Source: Adapted from garrytan/gstack (Garry Tan)
Announce at start: "I'm using the document-release skill to audit and update project documentation."
Run after code changes are committed but before PR merge. Ensures all project documentation accurately reflects shipped code.
# Create a doc-update bead at start
bd create "Docs: update documentation for <branch>" -t chore
Closed with evidence at Step 9 — the single source of truth for the close command.
Automation with guardrails: Make obvious factual corrections automatically (path updates, version numbers, table additions) but pause for subjective decisions (narrative changes, security model updates, large rewrites, version bumps).
Auto-update (apply without asking):
Always ask before:
Detect git platform (GitHub/GitLab/unknown) and determine the base branch. Use gh/glab if available, fall back to git-native commands.
Done when: the platform and base branch are both determined.
git diff <base>..HEAD and git log --oneline <base>..HEAD.md files: find . -name '*.md' -not -path './.git/*' -not -path './.worktrees/*'Done when: the diff is gathered, all .md files are discovered, and every change is categorised.
Catches missing docs (shipped public surface that was never documented) — the per-file audit (Step 2) only catches stale docs.
Extract new public surface from git diff <base>..HEAD. "Public surface" is whatever the project exposes to users — a general superset, not any one project type:
Grid each item against the four Diataxis quadrants (definitions are generic; the doc targets in parentheses are examples, never a hardcoded file list):
<entity> reference how-to tutorial explanation
<entity-1> yes no no no
<entity-2> yes yes no no
Calibrate gaps (avoid alert-fatigue). The grid shows all four cells, but only judgment-confirmed gaps become debt: a new user-facing surface with zero coverage anywhere, OR missing the one quadrant that surface type genuinely needs (e.g. a new flag with no Reference; a new workflow with no How-to). Tutorial/Explanation are flagged only when the change is significant enough to warrant them. An empty cell the entity genuinely doesn't need is not a gap.
Guardrail — informs, never generates. The coverage map flags gaps for beads + the PR body; it does not auto-write doc pages. Point real gaps at the write-documentation skill as the follow-up.
Diagram-drift sub-check (flag-only). Scope to entity-bearing diagrams — architecture / component / data-flow diagrams whose labels name code entities (e.g. ARCHITECTURE.md, or docs/*.md Mermaid). Extract entity names, cross-reference the diff, and flag any the diff renamed or removed. Prose/workflow flowcharts (e.g. process dot graphs) are in scope only when a renamed skill/command/step is itself the label. Never auto-edit a diagram.
Empty-check gate (conservative early exit). After building the coverage map, if the diff is unambiguously doc-irrelevant — both (a) git diff <base>..HEAD --name-only -- '*.md' is empty (zero docs changed) and (b) the coverage map found no new user-facing surface — emit "All documentation is up to date" and exit without an empty commit. When in doubt, do not exit — run the full audit (Steps 2–9). A false-skip would ship undocumented surface (the failure this skill exists to prevent), which is strictly worse than a redundant audit.
Done when: every new public-surface item is grid-checked against the four quadrants, or the empty-check gate confirms the diff is doc-irrelevant.
Read each documentation file and cross-reference against the diff:
| File | What to Check |
|---|---|
| README | Features, install steps, examples, troubleshooting still valid? |
| ARCHITECTURE | Diagrams, component descriptions, design rationale still accurate? |
| CONTRIBUTING | Setup instructions work? Test tiers match reality? |
| CLAUDE.md | Project structure tree, commands, build/test steps current? |
| CHANGELOG | Entries present for all changes? Voice user-forward? |
| Any other .md | Purpose clear, contradictions with diff? |
Classify each update as auto-update (factual, obvious) or ask-user (narrative, ambiguous, risky).
Done when: every documentation file is read and each needed update is classified auto-update or ask-user.
Make factual corrections directly. Each edit gets a specific one-line summary — not "updated README" but "README: added /new-skill to skills table, updated count 15 to 16".
Done when: every Step 2 auto-update is applied, each with a one-line summary.
Use your structured question tool for risky changes. Provide context, recommendation, and options.
Critical rules:
ADR-NNNN or bd-xxxx tags. Those belong in commit messages and docs/decisions/ (gitignored, invisible to readers); in reader-facing prose they are noise pointing at nothing. Describe the change, not its tracking ID.Sell-test (0–3 rubric). Score each entry — this scoring always applies:
Thresholds: <2 → rewrite the entry; 3 → gold (preserve as-is or minor wording only). Lead with what the user can now do ("You can now…"), not "Refactored…".
Optional contributor split (format-compatible). Only when a project keeps developer-only notes (migration steps, deprecation) in its CHANGELOG, move them to a clearly-separated sub-list — at a heading level/placement that respects the project's existing convention. For Keep a Changelog (the common case), that is a nested bullet or sub-list, never a competing ### that collides with the ### Added/Changed/Fixed level. The rubric never restructures a CHANGELOG to force the split — it stays Edit-only (polish, never clobber or regenerate).
Done when: every CHANGELOG entry is scored, and any entry scoring below 2 is rewritten without clobbering existing content.
Done when: README/CLAUDE.md/ARCHITECTURE alignment is checked and every factual inconsistency found is fixed.
TODO, FIXME, HACK) represent meaningful deferred workDone when: completed items are marked, stale descriptions are updated, and inline TODO/FIXME/HACK comments are triaged.
Critical rule: Never bump silently — always ask via your structured question tool. A skipped, dismissed, or auto-resolved answer is not consent — stop and ask in plain text.
[Unreleased], defer the bump to release time" as a first-class, no-friction answer. Do not nag for a per-PR bump on repos that deliberately batch. Never bump silently either way.scripts/bump-version.sh if available. (Note: it may not sync every prose mention of the version — e.g. root CLAUDE.md — so spot-check after a real bump.)Done when: a bump verdict — proceed, escalate, PATCH/MINOR, or an explicit defer-to-release-time — is confirmed via the structured question tool.
git add -A)docs: update project documentation (bd-<id>)## Documentation section if PR exists| File | Status | Changes |
|------|--------|---------|
| README.md | ✅ Updated | Added new skill to table |
| CLAUDE.md | ✅ Current | No changes needed |
| CHANGELOG.md | ✅ Polished | Voice improvements |
Documentation Debt (from the Step 1.5 coverage map). For each judgment-confirmed gap, offer a bead (do not auto-create — consistent with "ask before new TODO items"), stamped per Agent-Filed Bead Discipline (beads-superpowers:verification-before-completion): bd create "docs-debt: <entity> missing <quadrant>" -t chore -p 3 --notes "Severity:/Confidence:/Evidence:". Before creating, check for an existing open docs-debt bead for the same entity (bd find-duplicates, or bd list --status=open | grep docs-debt) and skip duplicates so the ledger doesn't fill with re-filed gaps. If a PR exists, also append the lightweight always-available form to the PR body:
### Documentation Debt
- ⚠️ `<entity>` — reference present, no how-to example
- 🗂️ <diagram file> — "FooProcessor" renamed to "BarProcessor" in code, diagram may be stale
This informs reviewers and backlog prioritisation; it does not block the PR.
(Optional) Cross-model doc review. For a high-stakes release, you may optionally dispatch a documentation-review subagent via the requesting-code-review skill to check the docs against the shipped diff. No external binaries — this reuses the existing review pattern.
Close the bead: bd close <id> --reason "Documentation updated: <summary>"
Done when: the doc commit is pushed, the health summary is output, and the bead is closed with evidence.
write-documentation). Diagram-drift is flag-only — never auto-edit a diagram..md changed. When in doubt, run the full audit — a false-skip ships undocumented surface.docs-debt beads only on confirmation, and dedupe against existing open ones.Capture what you learned. At close, record every durable, evidence-backed insight from this work — anything still true next month, tied to a file, test, or command. Don't skip because it feels minor: if it would save a future session time or stop a repeated mistake, record it. Never record guesses, one-offs, or secrets (tokens, keys, PII — every memory is injected into all future sessions). Update an existing memory in place (bd remember --key <key>) rather than adding a near-duplicate.
bd remember "<kind>: <durable, evidence-backed insight>" # kind: lesson / pattern / design / root-cause / research
Called by:
Pairs with:
npx claudepluginhub dollardill/beads-superpowers --plugin beads-superpowersPost-ship documentation update that reads all project docs, cross-references the diff, and updates README, ARCHITECTURE, CONTRIBUTING, CLAUDE.md, CHANGELOG. Cleans up TODOS and optionally bumps VERSION. Run after PR merges or shipping code.
Post-ship doc sync: scans project markdown, cross-references git diff, auto-updates factual content (paths, counts, versions, table entries), checks cross-doc consistency, and updates PR body.
Automates updating README.md, CHANGELOG.md, and docs folders via git diff analysis of changes since last release tag. Use for release prep, PRs, or doc sync.