Changelog.md Workmanship

SkillFiles & storage

Rebuild CHANGELOG.md files and release histories from git, tags, releases, and issue trackers. Use when writing changelogs, version timelines, or agent-facing project history summaries.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Changelog.md Workmanship skill

What this skill tells your AI

The instructions your AI receives, as published by lev-os/agents in skills-db/dev/changelog-md-workmanship/SKILL.md and read by ahel’s review.

Core Insight: A real changelog is a research artifact. If the history work is weak, the prose is fake.

The Problem

Most changelogs fail in one of two ways:

  • they are fake summaries written from vague memory
  • they are unusable diff dumps that preserve chronology but destroy comprehension

The job is to build an orientation layer that lets another agent answer:

  • what materially changed?
  • when did it change?
  • why did it change?
  • which commits and workstreams should I inspect first?

The One Rule

Never draft a serious changelog from memory. Research exhaustively, then write incrementally while the evidence is still in hand.

For large repos, do not wait until the end to write CHANGELOG.md. After each research chunk, update:

  • the changelog itself
  • a compaction-resistant research memo

That is how you survive long histories without losing findings to context pressure.


THE EXACT PROMPT

Create or rebuild a serious CHANGELOG.md for this project.

Requirements:
1. Research the real history first: git commits, tags, releases, issue tracker, and existing docs.
2. Cover the requested scope window completely, from the beginning if needed.
3. Distinguish actual GitHub Releases from plain git tags.
4. Use live links for representative commits and version pages.
5. Include issue-tracker workstreams when available.
6. Organize by landed capabilities, not raw diff order, but keep a clear version timeline.
7. For large histories, split research into chunks and update CHANGELOG.md incrementally after each chunk.
8. Make it agent-friendly: another agent should be able to understand what changed without reading every diff.

Output:
- A canonical CHANGELOG.md
- A short note describing the evidence sources used

Quick Start

# 1. Read the repo's intent and rules first
cat AGENTS.md README.md 2>/dev/null

# 2. Create a compaction-resistant worklog immediately
touch CHANGELOG_RESEARCH.md

# 3. Build the version spine
git for-each-ref refs/tags --sort=creatordate --format='%(refname:short)%x09%(creatordate:short)%x09%(subject)'
gh release list --limit 100

# 4. Get early and recent history
git log --reverse --oneline --decorate=no --no-merges | head -n 50
git log --oneline --decorate=no --no-merges --max-count 120

# 5. Start writing the changelog skeleton early
cp .claude/skills/changelog-md-workmanship/assets/CHANGELOG-TEMPLATE.md CHANGELOG.md 2>/dev/null || true
cp .claude/skills/changelog-md-workmanship/assets/CHANGELOG-RESEARCH-TEMPLATE.md CHANGELOG_RESEARCH.md 2>/dev/null || true

Fast Track

1. Read AGENTS.md and README.md first.
2. Create CHANGELOG_RESEARCH.md immediately.
3. Gather the version spine: tags, releases, dates.
4. Slice history into chunks if the repo is large.
5. After each chunk, update the live CHANGELOG.md.
6. Finish with validation: dates, links, coverage, and structure.

One-page version: QUICK-REFERENCE.md Bootstrap script: scripts/bootstrap-changelog-workdir.sh [repo-dir]


Modes

ModeTimeDepthUse When
Small update10-20 minSingle version or narrow windowRecent release notes, point update
Standard rebuild30-90 minFull version spine + capability wavesMid-size repo or partial rewrite
Large-history reconstructionMulti-passChunked sequential researchLong-lived or sprawling project
Ultra-large history reconstructionMulti-pass + staged artifactsChunk files, coverage ledger, automation aidsHistories that obviously exceed one context window

If the repo is large enough that you cannot confidently hold the history in context, use chunked reconstruction immediately. Do not try to "just be more careful."

Huge-repo playbook: ULTRA-LARGE-REPOS.md


Research Doctrine

Source Priority

Trust sources in this order:

  1. Git history
  2. Tags and release metadata
  3. Issue tracker or beads history
  4. Existing changelogs and release notes
  5. README and other docs

If sources disagree, history wins.

Minimum Evidence Set

For a serious changelog, gather at least:

  • commit history
  • version tags
  • release metadata if available
  • issue tracker history if available
  • existing changelog or release notes if they exist

What You Are Actually Reconstructing

You are not listing every commit. You are identifying:

  • the version spine
  • the major capability waves
  • the major fixes and regressions
  • the workstreams or epics behind those changes
  • the commits another agent should inspect first

Link discipline and evidence rules: LINKING-RULES.md Quality bar by repo size: QUALITY-BAR.md Tracker source handling: TRACKER-ADAPTERS.md


Chunking Workflow for Large Histories

Large repos must be researched sequentially in bounded slices. Good chunk boundaries:

  • one release/tag range
  • one month or one sprint window
  • 50-150 non-merge commits
  • one major epic/capability wave

Mandatory Process

  • Create CHANGELOG_RESEARCH.md or CHANGELOG_RESEARCH/NN-*.md before deep history work.
  • Create the CHANGELOG.md skeleton early.
  • Research one chunk.
  • Distill that chunk immediately into:
    • version timeline entries
    • one or more thematic sections
    • representative commit links
    • relevant issue-tracker links
  • Only then move to the next chunk.

If you delay writing until all research is done, you will lose detail and create slop.

Chunking procedure, command patterns, and stopping rules: RESEARCH-WORKFLOW.md

Coverage Ledger

For large histories, maintain a ledger in the research memo:

  • chunk name
  • date or tag range
  • status: not started / researching / distilled / validated
  • major themes found
  • unresolved questions

This prevents silent gaps and duplicate coverage.


Golden Structure

For most substantial repos, this structure works best:

  1. Scope + methodology note
  2. Version timeline table
  3. Thematic capability sections
  4. Notes for agents

The strongest section shape is:

  • short narrative paragraph
  • Delivered capability
  • Closed workstreams
  • Representative commits

Copy-paste templates: SECTION-TEMPLATES.md

Critical Structural Rules

  • Keep chronology visible with a version timeline.
  • Keep comprehension high with thematic sections.
  • Do not flatten everything into one giant date-ordered bullet list.
  • Do not write a marketing page. This is orientation infrastructure.
  • Do not stop at commits alone; connect the commits to project intent.

Templates and scaffolds: SECTION-TEMPLATES.md Command recipes: COMMAND-RECIPES.md


Release and Link Discipline

Three rules matter a lot:

  1. Release vs tag is not the same thing. If a GitHub Release does not exist, do not pretend it does.
  2. Use live URLs, not bare hashes. Raw commit IDs are lower-utility than clickable commit pages.
  3. Scope tracker links tightly. If the repo uses checked-in issue history such as .beads/issues.jsonl, link to that record instead of broad repo search when possible.

Direct examples and rules: LINKING-RULES.md


Anti-Patterns

Don'tDo
Write from memoryGather evidence first
Dump commits chronologicallyBuild a version spine + thematic synthesis
Link naked hashesLink live commit URLs
Pretend every tag is a releaseDistinguish Releases, tags, and drafts
Wait until all research is doneUpdate the changelog after each chunk
Use generic tracker linksScope to the real tracker record
Write vague summariesName the capability, fix, or regression concretely
Treat generated release notes as canonical historyKeep CHANGELOG.md separate and durable

Quick Troubleshooting

ProblemCauseFix
The repo has too many commits to hold in contextNo chunking strategySplit by tag/date/epic and maintain a coverage ledger
Tag dates and release dates disagreeTag-only versions or draft releasesDistinguish Releases from plain tags explicitly
The tracker links feel noisy or uselessLinks are too broadScope directly to the real tracker record
The changelog feels like fluffThemes are vagueRestate sections in terms of actual capabilities and fixes
The changelog feels like a commit dumpNo synthesis layerAdd capability-wave sections above raw history
You cannot tell whether coverage is completeNo research memoUse a durable worklog and mark chunk status

Deeper fixes: TROUBLESHOOTING.md


Validation

Before finishing, check all of this:

  • Scope window is explicit
  • Version timeline covers the intended history
  • Release links and tag links are historically accurate
  • Representative commits are live-linked
  • Major capability waves are visible
  • Major fixes/regressions are captured
  • Issue-tracker workstreams are included when available
  • Another agent can navigate from summary to evidence quickly
  • No section feels like padded release-note fluff

Validation details and final audit questions: RESEARCH-WORKFLOW.md Quality thresholds: QUALITY-BAR.md Audit script: scripts/validate-changelog-md.py /path/to/CHANGELOG.md Network verification mode: scripts/validate-changelog-md.py --verify-links /path/to/CHANGELOG.md

Trigger Tests

If this skill is unclear, these should still obviously trigger it:

  • "rebuild this repo's CHANGELOG.md from the git history"
  • "write a real version timeline for this project"
  • "summarize the full project history for agents"
  • "turn this repo's tags, releases, and issue tracker into a proper changelog"

Reference Index

By Task

I need to...Read
Start fastQUICK-REFERENCE.md
Run a full research workflowRESEARCH-WORKFLOW.md
Copy-paste a structure/templateSECTION-TEMPLATES.md
Choose prompts for repo sizePROMPTS.md
Fix a weak or confusing draftTROUBLESHOOTING.md
Understand the quality thresholdQUALITY-BAR.md
See distilled design lessonsEXAMPLES.md
Get link rules rightLINKING-RULES.md
Copy concrete command recipesCOMMAND-RECIPES.md
Handle different tracker ecosystemsTRACKER-ADAPTERS.md
Run the ultra-large workflowULTRA-LARGE-REPOS.md

By Topic

TopicReference
Chunking long historiesRESEARCH-WORKFLOW.md
Version timeline skeletonsSECTION-TEMPLATES.md
Capability-wave section structureSECTION-TEMPLATES.md
Release vs tag correctnessLINKING-RULES.md
Tracker-link scopingLINKING-RULES.md
Small/medium/huge repo promptsPROMPTS.md
Failure modes and recoveryTROUBLESHOOTING.md
Quality thresholdsQUALITY-BAR.md
Example patterns to emulateEXAMPLES.md
Exact git/gh/jq recipesCOMMAND-RECIPES.md
Tracker normalization across ecosystemsTRACKER-ADAPTERS.md
Huge multi-pass scaffoldingULTRA-LARGE-REPOS.md

Assets

AssetPurpose
assets/CHANGELOG-TEMPLATE.mdReusable changelog scaffold for a new repo
assets/CHANGELOG-RESEARCH-TEMPLATE.mdDurable research memo scaffold for chunked history work
assets/CHANGELOG-TEMPLATE-HUGE.mdHuge-repo changelog scaffold with explicit multi-pass structure
assets/CHANGELOG-RESEARCH-CHUNK-TEMPLATE.mdReusable chunk file scaffold for staged history reconstruction
assets/CHANGELOG-COVERAGE-LEDGER-TEMPLATE.mdCoverage ledger scaffold to prevent silent research gaps

Tools

ToolPurpose
git log, git for-each-refCommit and tag history
gh release list, gh issue listRelease and issue metadata
jqChecked-in tracker mining
br / bvBeads-style issue history and planning context
scripts/bootstrap-changelog-workdir.shBootstrap CHANGELOG.md and CHANGELOG_RESEARCH.md from templates
scripts/build-version-spine.pyGenerate a markdown or JSON version timeline skeleton from local tags and GitHub releases
scripts/extract-tracker-workstreams.pyNormalize tracker evidence from beads, GitHub Issues, Linear/Jira exports, and milestone docs
scripts/cluster-history.pyGroup commit history into candidate capability waves for faster thematic drafting
scripts/validate-changelog-md.pyAudit a finished changelog for structural and evidence problems
assets/CHANGELOG-TEMPLATE.mdFaster changelog bootstrap
assets/CHANGELOG-RESEARCH-TEMPLATE.mdFaster research-memo bootstrap
assets/CHANGELOG-TEMPLATE-HUGE.mdHuge-repo changelog bootstrap
assets/CHANGELOG-RESEARCH-CHUNK-TEMPLATE.mdHuge-repo chunk bootstrap
assets/CHANGELOG-COVERAGE-LEDGER-TEMPLATE.mdHuge-repo coverage-ledger bootstrap

Run scripts directly (they have shebangs) rather than invoking python manually.


Quick Search

Useful searches during changelog work:

# Early history
git log --reverse --oneline --decorate=no --no-merges | head -n 50

# Recent history
git log --oneline --decorate=no --no-merges --max-count 120

# Tags
git for-each-ref refs/tags --sort=creatordate --format='%(refname:short)%x09%(creatordate:short)%x09%(subject)'

# Releases
gh release list --limit 100

# Beads-style tracker history
jq -r 'select(.status=="closed") | [.id,.title,.closed_at] | @tsv' .beads/issues.jsonl

# Tracker normalization
scripts/extract-tracker-workstreams.py --repo . --format markdown

# Capability-wave clustering
scripts/cluster-history.py --repo . --format markdown

Subagents

SubagentPurpose
subagents/history-researcher.mdResearch one bounded historical slice and return changelog-ready findings
subagents/draft-auditor.mdReview a changelog draft for missing coverage, weak synthesis, and evidence issues

Self-Validation

Validate the skill itself:

./scripts/validate-skill.py .claude/skills/changelog-md-workmanship/

Trigger tests: SELF-TEST.md


Meta-Note

This skill is intentionally larger than the usual "concise skill" target.

That is deliberate:

  • changelog reconstruction is a high-context research task
  • large histories need multiple entry points and fast navigation
  • reference surfacing is worth the extra size because it prevents bad historical synthesis

Signals

GitHub stars
22
Forks
2
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
changelog-md-workmanship
Source
github.com/lev-os/agents