fleet-changelog-generation
How the technical writer generates changelogs from git history — conventional commits as structured data, Keep a Changelog format, audience-appropriate summaries per release.
SKILL.md.claude/skills/fleet-changelog-generation/SKILL.md
GitHubChangelog Generation — Writer's Release Communication
Conventional commits aren't just for developers. When structured correctly, they're the source data for changelogs that tell users, operators, and the PO what changed and why.
Source Data: Conventional Commits
The fleet enforces conventional commit format via hook:
type(scope): description [task:XXXXXXXX]
Each commit type maps to a changelog section:
| Commit Type | Changelog Section | Audience Cares? |
|---|---|---|
| feat | Added | YES — new capabilities |
| fix | Fixed | YES — problems resolved |
| perf | Performance | YES — speed/resource improvements |
| refactor | Changed | SOMETIMES — if it affects behavior |
| docs | Documentation | SOMETIMES — if user-facing docs |
| test | — | NO — internal quality |
| chore | — | NO — maintenance |
| ci | — | NO — pipeline changes |
| style | — | NO — formatting |
Keep a Changelog Format
The fleet follows keepachangelog.com:
# Changelog
## [Unreleased]
### Added
- Stage-aware effort selection in model_selection.py — reasoning/investigation stages
now get higher thinking effort automatically ([task:abc12345])
### Fixed
- Dispatch records now use stage-aware model_config for Claude backends,
ensuring effort consistency between selection and execution ([task:def67890])
### Changed
- Architect skills reorganized: architecture-health moved to all_stages
for continuous monitoring ([task:ghi11111])
## [0.3.0] - 2026-04-07
### Added
- 36 role-specific group calls across 10 agent roles
- Contribution completeness checking via synergy matrix
...
The Generation Process
Step 1: Extract Commits Since Last Release
# Commits since last tag
git log v0.3.0..HEAD --oneline --format="%h %s"
# Or since a date
git log --since="2026-04-01" --oneline --format="%h %s"
Step 2: Parse and Categorize
Group by type. Within each type, group by scope:
feat(core): add _STAGE_EFFORT_FLOOR to model_selection [task:abc12345]
feat(core): add _apply_stage_adjustment [task:abc12345]
fix(dispatch): use model_config for Claude backends [task:abc12345]
test(model): add 10 stage-aware effort tests [task:abc12345]
chore(config): add 8 chain docs to tool-chains.yaml [task:def67890]
→ Added: 2 features (both core/model_selection) → Fixed: 1 fix (dispatch) → Internal: 1 test, 1 chore (not in changelog)
Step 3: Write Human-Readable Entries
Transform commit messages into changelog entries:
# BAD — just copying commit messages
- feat(core): add _STAGE_EFFORT_FLOOR to model_selection [task:abc12345]
# GOOD — human-readable, audience-appropriate
- Stage-aware effort selection: reasoning and investigation stages now
automatically get higher thinking effort, improving analysis depth
for complex tasks ([task:abc12345])
The commit tells WHAT changed. The changelog entry tells WHY it matters.
Step 4: Group Related Changes
Multiple commits for the same feature → one changelog entry:
# 2 commits that are really 1 feature:
feat(core): add _STAGE_EFFORT_FLOOR to model_selection [task:abc12345]
feat(core): add _apply_stage_adjustment [task:abc12345]
# → 1 changelog entry:
- Stage-aware effort selection in model_selection.py — reasoning/investigation
stages now get higher thinking effort automatically ([task:abc12345])
Phase-Appropriate Changelogs
| Phase | Changelog Scope |
|---|---|
| poc | Informal — bullet list of what works now |
| mvp | Structured — Added/Fixed/Changed sections |
| staging | Full keepachangelog — with version numbers and dates |
| production | Full + migration notes + breaking changes highlighted |
Integration With Fleet Systems
- PR template:
fleet_task_completegenerates PR body with commit changelog - Labor stamps: each PR includes provenance (model, effort, backend)
- Board memory: sprint standup includes velocity from changelog data
- Plane: release notes posted to Plane cycle comments
Your changelog complements the PR's automatic changelog by adding the human context — not what files changed, but what the user/operator/PO should know.
The /pm-changelog Skill
The PM has a /pm-changelog skill that generates raw changelogs from git history. Your value add is:
- Audience translation: technical commits → user-facing descriptions
- Grouping: related commits → coherent feature descriptions
- Context: why this change matters, not just what changed
- Migration notes: if something breaks or requires action
The PM generates the data. You produce the communication.