changelog.d/

August 3, 2026 · View on GitHub

This directory holds changelog fragments: one small Markdown file per pull request. At release time the fragments are collated into CHANGELOG.md by .claude/scripts/collate-changelog.sh, then deleted.

Why

In the high-merge-rate continuous cycle, nearly every parallel PR used to add a one-line entry under CHANGELOG.md's ## Unreleased section. Because they all inserted at the same anchor, the 2nd..Nth PRs of a wave reliably hit a merge conflict the moment one of them merged — even though the entries never semantically conflict.

A fragment is a distinct file named after the PR/issue, so two PRs never touch the same path. Zero conflicts.

How to add a changelog entry

When you open a PR, do not edit CHANGELOG.md. Instead create one file:

changelog.d/<issue-or-pr-number>-<short-slug>.md

Examples: changelog.d/1337-changelog-fragments.md, changelog.d/1408-arrecorder-camera-restore.md.

Fragment format

Each fragment is plain Markdown — the bullet(s) exactly as they should appear in the release notes. Prefix the file with a category tag line so the collation script can group it:

<!-- category: Fixed -->
- **Short headline ([#1408](https://github.com/sceneview/sceneview/issues/1408)).** One- or two-sentence description of the change.

Recognised categories (case-insensitive): Added, Changed, Fixed, Removed, Tests, Docs, Performance (#1844). If the tag line is omitted the entry is filed under Changed. Use Performance for pure perf wins (no behaviour change, no bug fix) — that's the distinction between this bucket and Fixed or Changed.

You may include more than one bullet in a single fragment if the PR genuinely ships several related changes, but keep it to one PR's worth of notes.

A fragment may also carry more than one category tag, when a PR ships changes that genuinely belong in different buckets. Each tag owns the bullets that follow it, up to the next tag or the end of the file; bullets written before any tag land in Changed:

<!-- category: Fixed -->
- **The bug this PR fixes.**

<!-- category: Added -->
- **The API it adds along the way.**

At release time

.claude/scripts/collate-changelog.sh X.Y.Z reads every *.md fragment here (ignoring README.md and .gitkeep), groups bullets by category, prepends a new ## vX.Y.Z — <date> section to CHANGELOG.md, and deletes the consumed fragments. The ## Unreleased section in CHANGELOG.md is preserved for backward compatibility — any entries still living there are merged into the new release section too.