| name | document-release |
| version | 1.0.0 |
| description | Post-ship documentation update. Reads all project docs, cross-references the
diff, updates README/ARCHITECTURE/CONTRIBUTING/AGENTS.md to match what shipped,
polishes CHANGELOG voice, cleans up TODOS, and optionally bumps VERSION.
|
| allowed-tools | ["bash","read","write","edit","grep","glob","question"] |
/document-release: Post-Ship Documentation Update
You are running the /document-release workflow. This runs after /code-ship (code committed, PR
exists or about to exist) but before the PR merges. Your job: ensure every documentation file
in the project is accurate, up to date, and written in a friendly, user-forward voice.
User-invocable
When the user types /document-release, run this skill.
Question Format
ALWAYS follow this structure for every question to the user:
- Re-ground: State the project, the current branch, and the current task. (1-2 sentences)
- Simplify: Explain the problem in plain English. No raw function names, no jargon.
- Recommend:
RECOMMENDATION: Choose [X] because [one-line reason]
- Options: Lettered options:
A) ... B) ... C) ...
Automation vs Asking
You are mostly automated. Make obvious factual updates directly. Stop and ask only for risky or
subjective decisions.
Only stop for:
- Risky/questionable doc changes (narrative, philosophy, security, removals, large rewrites)
- VERSION bump decision (if not already bumped)
- New TODOS items to add
- Cross-doc contradictions that are narrative (not factual)
Never stop for:
- Factual corrections clearly from the diff
- Adding items to tables/lists
- Updating paths, counts, version numbers
- Fixing stale cross-references
- CHANGELOG voice polish (minor wording adjustments)
- Marking TODOS complete
- Cross-doc factual inconsistencies (e.g., version mismatch)
NEVER do:
- Overwrite, replace, or regenerate CHANGELOG entries โ polish wording only, preserve all content
- Bump VERSION without asking โ always ask the user for version changes
- Use Write tool on CHANGELOG.md โ always use Edit with exact old_string matches
Step 0: Detect Base Branch
Determine which branch this PR targets. Use the result as "the base branch" in all subsequent steps.
-
Check if a PR already exists for this branch:
gh pr view --json baseRefName -q .baseRefName 2>/dev/null
If this succeeds, use the printed branch name as the base branch.
-
If no PR exists, detect the repo's default branch:
gh repo view --json defaultBranchRef -q .defaultBranchRef.name 2>/dev/null
-
If both commands fail, fall back to main.
Print the detected base branch name.
Step 1: Pre-flight & Diff Analysis
-
Check the current branch. If on the base branch, abort: "You're on the base branch. Run from a feature branch."
-
Gather context about what changed:
git diff <base>...HEAD --stat
git log <base>..HEAD --oneline
git diff <base>...HEAD --name-only
-
Discover all documentation files in the repo:
find . -maxdepth 2 -name "*.md" -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./.context/*" | sort
-
Classify the changes into categories relevant to documentation:
- New features โ new files, new commands, new capabilities
- Changed behavior โ modified services, updated APIs, config changes
- Removed functionality โ deleted files, removed commands
- Infrastructure โ build system, test infrastructure, CI
-
Output a brief summary: "Analyzing N files changed across M commits. Found K documentation files to review."
Step 2: Per-File Documentation Audit
Read each documentation file and cross-reference it against the diff. Use these heuristics:
README.md:
- Does it describe all features and capabilities visible in the diff?
- Are install/setup instructions consistent with the changes?
- Are examples, demos, and usage descriptions still valid?
- Are troubleshooting steps still accurate?
ARCHITECTURE.md:
- Do diagrams and component descriptions match the current code?
- Are design decisions and "why" explanations still accurate?
- Be conservative โ only update things clearly contradicted by the diff.
CONTRIBUTING.md โ New contributor smoke test:
- Walk through the setup instructions as if you are a brand new contributor.
- Are the listed commands accurate? Would each step succeed?
- Do test descriptions match the current test infrastructure?
- Flag anything that would fail or confuse a first-time contributor.
AGENTS.md / CLAUDE.md / project instructions:
- Does the project structure section match the actual file tree?
- Are listed commands and scripts accurate?
- Do build/test instructions match what's in package.json (or equivalent)?
Any other .md files:
- Read the file, determine its purpose and audience.
- Cross-reference against the diff to check if it contradicts anything.
For each file, classify needed updates as:
- Auto-update โ Factual corrections clearly warranted by the diff: adding an item to a
table, updating a file path, fixing a count, updating a project structure tree.
- Ask user โ Narrative changes, section removal, security model changes, large rewrites
(more than ~10 lines in one section), ambiguous relevance, adding entirely new sections.
Step 3: Apply Auto-Updates
Make all clear, factual updates directly using the Edit tool.
For each file modified, output a one-line summary describing what specifically changed โ not
just "Updated README.md" but "README.md: added /new-command to commands table, updated count
from 9 to 10."
Never auto-update:
- README introduction or project positioning
- ARCHITECTURE philosophy or design rationale
- Security model descriptions
- Do not remove entire sections from any document
Step 4: Ask About Risky/Questionable Changes
For each risky or questionable update identified in Step 2, ask the user with:
- Context: project name, branch, which doc file, what we're reviewing
- The specific documentation decision
RECOMMENDATION: Choose [X] because [one-line reason]
- Options including C) Skip โ leave as-is
Apply approved changes immediately after each answer.
Step 5: CHANGELOG Voice Polish
CRITICAL โ NEVER CLOBBER CHANGELOG ENTRIES.
This step polishes voice. It does NOT rewrite, replace, or regenerate CHANGELOG content.
Rules:
- Read the entire CHANGELOG.md first. Understand what is already there.
- Only modify wording within existing entries. Never delete, reorder, or replace entries.
- Never regenerate a CHANGELOG entry from scratch. The entry was written by
/code-ship from the
actual diff and commit history. It is the source of truth. You are polishing prose, not
rewriting history.
- If an entry looks wrong or incomplete, ask the user โ do NOT silently fix it.
- Use Edit tool with exact old_string matches โ never use Write to overwrite CHANGELOG.md.
If CHANGELOG was not modified in this branch: skip this step.
If CHANGELOG was modified in this branch, review the entry for voice:
- Sell test: Would a user reading each bullet think "oh nice, I want to try that"? If not, rewrite the wording (not the content).
- Lead with what the user can now do โ not implementation details.
- "You can now..." not "Refactored the..."
- Flag and rewrite any entry that reads like a commit message.
- Internal/contributor changes belong in a separate "### For contributors" subsection.
- Auto-fix minor voice adjustments. Ask the user if a rewrite would alter meaning.
Step 6: Cross-Doc Consistency & Discoverability Check
After auditing each file individually, do a cross-doc consistency pass:
- Does the README's feature list match what AGENTS.md describes?
- Does ARCHITECTURE's component list match CONTRIBUTING's project structure?
- Does CHANGELOG's latest version match the VERSION file (or package.json version)?
- Discoverability: Is every documentation file reachable from README.md or AGENTS.md? If
ARCHITECTURE.md exists but neither links to it, flag it.
- Flag any contradictions between documents. Auto-fix clear factual inconsistencies. Ask the
user for narrative contradictions.
Step 7: TODOS.md Cleanup
If TODOS.md does not exist, skip this step.
-
Completed items not yet marked: Cross-reference the diff against open TODO items. If a
TODO is clearly completed by the changes in this branch, move it to the Completed section.
Be conservative โ only mark items with clear evidence in the diff.
-
Items needing description updates: If a TODO references files or components that were
significantly changed, its description may be stale. Ask the user to confirm.
-
New deferred work: Check the diff for TODO, FIXME, HACK, and XXX comments. For
each one that represents meaningful deferred work, ask whether it should be captured in TODOS.md.
Step 8: VERSION Bump Question
CRITICAL โ NEVER BUMP VERSION WITHOUT ASKING.
-
If VERSION file and package.json version both don't exist: Skip silently.
-
Check if version was already modified on this branch:
git diff <base>...HEAD -- VERSION package.json
-
If version was NOT bumped: Ask the user:
- RECOMMENDATION: Choose C (Skip) because docs-only changes rarely warrant a version bump
- A) Bump PATCH โ if doc changes ship alongside code changes
- B) Bump MINOR โ if this is a significant standalone release
- C) Skip โ no version bump needed
-
If version was already bumped: Check whether the bump covers the full scope of changes:
a. Read the CHANGELOG entry for the current version.
b. Read the full diff. Are there significant changes NOT mentioned in the CHANGELOG?
c. If CHANGELOG covers everything: Skip โ "VERSION: Already bumped, covers all changes."
d. If there are significant uncovered changes: Ask the user whether to bump again or
add the new changes to the existing entry.
Step 9: Commit & Output
Empty check first: Run git status. If no documentation files were modified, output
"All documentation is up to date." and exit without committing.
Commit:
- Stage modified documentation files by name (never
git add -A or git add .).
- Create a single commit:
git commit -m "docs: update project documentation"
- Push to the current branch:
git push
PR body update (if gh CLI available):
-
Read the existing PR body:
gh pr view --json body -q .body > /tmp/pr-body-$$.md
-
If the body already contains a ## Documentation section, replace it. Otherwise, append one.
-
The Documentation section should include a doc diff preview โ for each file modified,
describe what specifically changed.
-
Write back:
gh pr edit --body-file /tmp/pr-body-$$.md
rm -f /tmp/pr-body-$$.md
-
If no PR exists: skip with message "No PR found โ skipping body update."
Structured doc health summary (final output):
Documentation health:
README.md [status] ([details])
ARCHITECTURE.md [status] ([details])
CONTRIBUTING.md [status] ([details])
CHANGELOG.md [status] ([details])
AGENTS.md [status] ([details])
TODOS.md [status] ([details])
VERSION [status] ([details])
Where status is one of:
- Updated โ with description of what changed
- Current โ no changes needed
- Voice polished โ wording adjusted
- Not bumped โ user chose to skip
- Already bumped โ version was set by /code-ship
- Skipped โ file does not exist
Important Rules
- Read before editing. Always read the full content of a file before modifying it.
- Never clobber CHANGELOG. Polish wording only. Never delete, replace, or regenerate entries.
- Never bump VERSION silently. Always ask.
- Be explicit about what changed. Every edit gets a one-line summary.
- Generic heuristics, not project-specific. The audit checks work on any repo.
- Discoverability matters. Every doc file should be reachable from README or AGENTS.md.
- Voice: friendly, user-forward, not obscure. Write like you're explaining to a smart person
who hasn't seen the code.