# Release Digest

Post a "what's changed since the last release" recap to the release Slack channel for...

- Repository: https://github.com/Kiln-AI/Kiln (5247 stars)
- Category: Testing
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add Kiln-AI/Kiln --skill release-digest -g -a claude-code -y`
Codex: `npx skills add Kiln-AI/Kiln --skill release-digest -g -a codex -y`
Cursor: `npx skills add Kiln-AI/Kiln --skill release-digest -g -a cursor -y`
Gemini CLI: `npx skills add Kiln-AI/Kiln --skill release-digest -g -a gemini-cli -y`

## Description

Post a "what's changed since the last release" recap to the release Slack channel for final QA. Groups merged PRs by author and classifies each as feature / bug fix / task. Use when the user wants a release recap, a changelog since the last tag, or to prep QA before cutting a release from main.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Release Digest

Build a human-readable recap of everything merged to `main` that is **not yet in the
latest release tag**, and post it to the team's release Slack channel for final QA.

The recap is grouped **by author** and each change is classified as **feature**,
**bug fix**, or **task**. This is on-demand: run it when someone asks for a release
recap or wants to QA before cutting a release.

> Linear ticket tracking ("which tickets are targeted for this release") is **out of
> scope for now**, punted to a later iteration. This skill only covers what's changed.

---

## Phase 1, Gather the change set

Run the gather script from the repo root. It fetches tags + `origin/main`, finds the
latest tag, and lists every merged PR in the range `<last_tag>..origin/main`:

```bash
python3 .agents/skills/release-digest/scripts/gather_changes.py > /tmp/release_digest.json
```

Key design point: it uses the **git commit range** as the source of truth, not merge
dates. A PR merged the same day a tag was cut can already be in that release, so a
date filter would over-report. Trust the range.

**Pre-release / already-cut releases.** By default the baseline is the newest tag
(`git describe`). But if the release you're QA'ing has **already been tagged**, it's a
pre-release still being validated, so `main` is already even with it, the default
range is empty. In that case pass `--pre-release`, which steps the baseline back one
tag so the range recaps exactly what went *into* the pre-release:

```bash
python3 .agents/skills/release-digest/scripts/gather_changes.py --pre-release > /tmp/release_digest.json
```

The rest: https://github.com/Kiln-AI/Kiln/blob/HEAD/.agents/skills/release-digest/SKILL.md
