Development record
2026-08-26 — The changelog is an INDEX of record transitions, not a curated
2026-08-26 — The changelog is an INDEX of record transitions, not a curated
release note: every record reaching a terminal folder earns its line, with no
inclusion judgement. Rationale lives in the record; the changelog is the trace
from record to version, which is why a record does not carry its own release.
Consequences: impact keeps its version arithmetic and LOSES its silencing
job; two families the cut ignores today (principles, ADRs) come into scope;
bundling stays, because fewer lines carrying the same information is the
"better" half, while dropping a record for dullness is not. shipped_in
(iss-2608241612087533) is reclassified as MIGRATION-ONLY: abcd was built before
RS001 made resolution ride the fixing commit, and a repo managed from its first
commit should never set it. Not yet implemented — captured, so the change lands
behind a record like everything else.
Frontmatter
| id | dcn-2608260000000003 |
|---|---|
| type | decision |
| date | 2026-08-26 |
.abcd/work/decisions/dcn-2608260000000003-the-changelog-is-an-index-of-record.md
open on GitHub ↗ · commit history ↗
mentions2
- iss-2608241612087533the release derivation cannot tell a back-filled resolution from a fresh one, so a ledger hygiene sweep re-announces old work as this release's content. internal/core/release/emit.go and internal/core/changelog/shipped.go read only folder membership and the record's impact field; neither reads resolved_by. The cut therefore equates 'record entered resolved/ since the base tag' with 'shipped in this release'. That equation holds only because RS001 now lands resolution inside the fixing commit, and a bulk hygiene sweep is the legitimate exception. Live instance: the 2026-08-24 sweep (089c0d61) closed 33 already-fixed records, and the v0.6.4 cut renders 14 of them as changelog entries for work first tagged v0.4.0, v0.4.1, v0.4.2 and v0.6.2 — four of the 14 are already cited by id under the 0.6.2 heading. The four records deciding the additive impact class (iss-98, iss-99, iss-100, iss-158) all describe pre-v0.6.3 work, so the version and the receipt tier rest on them too. Candidate fix: exclude an added record whose resolved_by.commit is reachable from the base tag, which needs the stamp back-filled on the six swept records that carry none.
- iss-2608260941298050the changelog should index every record transition rather than curate a subset, which deletes the inclusion judgement and the reason shipped_in exists. Design decision of 2026-08-26, recorded in [dcn-2608260000000003](../../decisions/dcn-2608260000000003-the-changelog-is-an-index-of-record.md) and resting on the less-but-better principle. Today the cut reads two families (intents/shipped, issues/resolved) and renders only records whose impact is non-internal, so impact carries TWO jobs: it decides the version bump, which it must, and it silences a changelog line, which is a publication judgement bolted onto a product one. checkIssueImpact's own comment names the cost — a rule refusing internal would force work into a user-facing changelog or push authors into a mislabel. Measured consequence of removing the judgement: v0.6.2 saw 175 records enter terminal folders against 98 rendered lines, of which 57 records were internal, so that release becomes roughly 175 entries. Also in scope: principles (30 files) and ADRs (45) are invisible to the cut today, and a new principle is arguably more consequential than half the issues that render. NOT in scope: bundling stays, because one line citing several records that were one user-visible change is fewer lines carrying the same information, which is the better half rather than curation; and impact keeps its version arithmetic. Residue that is NOT a migration artefact and needs a decision: AGENTS.md makes a stale closure legal forever, so some transitions carry no code change even in a greenfield repo, and under this model they render.