Claude Code Plugins

Community-maintained marketplace

Feedback
1.8k
17

CHANGELOG format and conventions for Recyclarr releases

Install Skill

Shared

Installs to .agents/skills, used by Codex, Amp, Warp, Cursor, OpenCode, and more.

CodexAmp
Warp
CursorOpenCode
Cline
Gemini CLI
GitHub Copilot
Personal

Available across projects.

$npx skills-installer add @recyclarr/recyclarr/changelog --client shared
Project

Writes to .agents/skills.

$npx skills-installer add @recyclarr/recyclarr/changelog -p --client shared
Note: Review the skill instructions before using it.

SKILL.md

name changelog
description Use when adding, editing, or reorganizing entries in `CHANGELOG.md`; drafting release notes for Recyclarr; deciding which Keep a Changelog section (Added, Changed, Deprecated, Removed, Fixed, Security) a change belongs under; wording user-facing entries for `feat`, `fix`, `perf`, or breaking commits; phrasing deprecation notices or migration guidance; preparing the `[Unreleased]` section for cut. Triggers on phrases like "update the changelog", "add a changelog entry", "bump the changelog", "release notes", or any edit touching `CHANGELOG.md`. Do NOT use for commit message wording (see commit agent) or for internal `refactor`/`chore`/`test`/`ci`/`build` commits that do not require a changelog entry.

Changelog Skill

CHANGELOG format and conventions for documenting Recyclarr releases.

Recyclarr uses keepachangelog.com format. The audience is non-technical end users who run Recyclarr but do not read source code. They care about what changed in their experience, not why or how.

CHANGELOG Format

File: CHANGELOG.md

Section order: Added, Changed, Deprecated, Removed, Fixed, Security

Entry format: - Scope: Description (#NNN)

### Fixed

- Sync: Crash while processing quality profiles (#720)

Rules

  • One line per change
  • Entries under "Fixed" should not start with "Fixed"
  • New entries go under [Unreleased] section near the top of the file
  • Keep entries high-level: state what was added or changed, not an exhaustive list of capabilities. Users can visit the docs for details.
  • Include a GitHub issue reference (#NNN) at the end of the entry when an issue exists. Omit when there is no associated issue.
  • Sort entries within each category by user impact: breaking changes first, then high-impact items, then minor items. Do not use commit chronology as the ordering.
  • Every Deprecated entry must include what to use instead or a migration path. A deprecation without guidance is incomplete.
  • Omit entries that cancel each other out within the same unreleased window. If a feature was added and then reverted before release, remove both entries.

Implementation Detail Filter

CRITICAL: Changelog entries must contain ZERO implementation details. Every entry must pass this filter before being written.

Never mention any of the following:

  • Library or package names (Spectre.Console, YamlDotNet, Autofac, NUnit, etc.)
  • Class, method, or variable names from source code
  • Internal architecture concepts (pipeline, middleware, DI container, module, etc.)
  • Protocol-level details (HTTP status codes, response bodies, serialization)
  • Programming language concepts (null reference, exception type, stack trace, etc.)
  • File paths or namespaces from the source tree
  • Database, cache, or state file internals

Litmus test: If a reader would need to look at source code to understand a term, that term does not belong in the changelog.

Transformation process: When writing an entry, draft it, then strip every technical term. Restate the user-visible symptom or behavior in plain language.

Examples

# BAD: Leaks library name and internal concept
- CLI: Automatically switch to log output mode when stdout is redirected (non-TTY),
  preventing garbled output from Spectre.Console animations in cron jobs and piped
  commands

# GOOD: Describes the user-visible behavior only
- CLI: Automatically switch to log output mode when stdout is redirected, preventing
  garbled output in cron jobs and piped commands

# BAD: Exposes internal error type
- Config: NullReferenceException when quality_profiles section is empty

# GOOD: States the symptom
- Config: Crash when quality_profiles section is empty

# BAD: References internal architecture
- Sync: Pipeline transaction phase fails to persist custom format mappings to cache

# GOOD: States what the user observes
- Sync: Custom format changes not saved between syncs

# BAD: Mentions HTTP details
- Config: Trailing slash in base_url caused HTTP 401 Unauthorized from Sonarr API

# GOOD: States the user-facing result
- Config: Trailing slash in `base_url` caused authentication errors

Breaking Changes Format

Required for any release with breaking changes:

## [X.0.0] - YYYY-MM-DD

This release contains **BREAKING CHANGES**. See the [vX.0 Upgrade Guide][breakingX] for required
changes you may need to make.

[breakingX]: https://recyclarr.dev/guide/upgrade-guide/vX.0/

### Changed

- **BREAKING**: Description of breaking change

Removed Features Wording

Check if deprecation was in a prior release:

git log --oneline --diff-filter=A -- "path/to/deprecation" | tail -1
git tag --contains <sha> | grep -E '^v[0-9]'
  • Tags exist: "The deprecated X has been removed."
  • No tags: "The X option has been removed. Use Y instead."