Read docs/editorial-style.md; its release-note register governs prose. Read Blog Publishing §Changelog and reference.md for the output context and editorial models.
Changelog Collection
Every entry covers exactly one ISO week: from is a Monday, to is the following Sunday (from + 6 days), both inclusive UTC calendar days. Never write a partial, multi-week, or off-weekday range, and never derive to as “today” on a non-Sunday; check:editorial-content and src/data/changelogs/__tests__/index.test.ts reject anything else.
Accept an optional ISO week (any date inside the target week) and --commit only when the user authorized a commit. Without week, target the current week when today (UTC) is Sunday, otherwise the most recently completed Monday–Sunday week. If the target week already has an entry, revise that file instead of creating a second one. If one or more complete weeks lie between the newest entry and the target, report the gap and write one entry per missing week.
Collect And Curate
- Treat
from and to as inclusive UTC calendar days (derive today in UTC too). Collect newest-first, non-merge commits with eight-character hashes:
git log --no-merges --abbrev=8 --since="<from> 00:00:00 +0000" --until="<to> 23:59:59 +0000" --format="%h %s"
- Remove generated-refresh, ratchet/baseline, dependency-bump,
[skip ci], documentation-cleanup, and revert-of-revert noise from both analysis and the manifest. Scan subject frequencies first so new dominant automation wording is not mistaken for product work. If more than half is filtered, warn the reviewer.
- Cluster surviving work by story and user impact, normally 5–8 groups. Check stablecoin-count crossings, methodology versions, reserve/source additions, and security/auth milestones against their source files. A new external source also needs about-page coverage.
- Write a ≤120-character factual headline; 45–80 words of interpretive
fieldNotes; and a summary item per cluster with a 2–4 word noun label, allowed tag from src/data/changelogs/types.ts, ≤220-character description, and methodology href when applicable.
- Set
stats.totalCommits to the full filtered count. Store only the newest min(totalCommits, 20) filtered commits, unchanged and newest-first; git history remains the archive.
Write And Verify
Create src/data/changelogs/<to>.json with the ChangelogEntry shape. Before writing, confirm the Monday–Sunday range, non-overlap with neighbouring entries, field-note length, summary tags/descriptions, headline length, commit hashes, manifest cap, source-backed numbers, and existing methodology routes.
Regenerate rather than hand-edit the barrel and refresh the Markdown fixture:
node --import tsx scripts/maintenance/generate-changelog-registry.ts
npm run check:generated-artifacts -- --only=changelog-registry
npm run check:editorial-content
npm run refresh:markdown-fixtures
npm run typecheck
npm test -- src/data/changelogs/
npm test -- scripts/__tests__/generate-markdown-exports.test.ts
Run npm run check:stablecoin-data only when citing registry counts. Default handoff reports the path, headline, field notes, labels/tags, total commits, filtered count, and warnings, then stops for review. If --commit was authorized and checks pass, commit only the entry, generated barrel, and refreshed fixture as one changelog change; use pharos-release-runner for publication.