@williamthorsen/release-kit 5.1.0 β†’ 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +105 -65
  2. package/README.md +160 -57
  3. package/cliff.toml.template +26 -17
  4. package/dist/esm/.cache +1 -1
  5. package/dist/esm/bin/release-kit.js +96 -3
  6. package/dist/esm/buildChangelogEntries.d.ts +1 -0
  7. package/dist/esm/buildChangelogEntries.js +39 -25
  8. package/dist/esm/checkWorkTypesDrift.d.ts +11 -0
  9. package/dist/esm/checkWorkTypesDrift.js +110 -0
  10. package/dist/esm/collectPolicyViolations.d.ts +6 -0
  11. package/dist/esm/collectPolicyViolations.js +15 -0
  12. package/dist/esm/createGithubRelease.d.ts +12 -2
  13. package/dist/esm/createGithubRelease.js +12 -8
  14. package/dist/esm/createGithubReleaseCommand.js +10 -6
  15. package/dist/esm/decideRelease.d.ts +3 -0
  16. package/dist/esm/decideRelease.js +19 -3
  17. package/dist/esm/defaults.d.ts +7 -0
  18. package/dist/esm/defaults.js +41 -20
  19. package/dist/esm/deriveWorkspaceConfig.js +3 -0
  20. package/dist/esm/determineBumpFromCommits.d.ts +6 -1
  21. package/dist/esm/determineBumpFromCommits.js +9 -3
  22. package/dist/esm/generateChangelogs.js +14 -29
  23. package/dist/esm/loadConfig.js +14 -22
  24. package/dist/esm/parseCommitMessage.d.ts +8 -2
  25. package/dist/esm/parseCommitMessage.js +32 -3
  26. package/dist/esm/publishCommand.js +21 -2
  27. package/dist/esm/releasePrepare.js +39 -15
  28. package/dist/esm/releasePrepareMono.js +26 -3
  29. package/dist/esm/releasePrepareProject.js +13 -1
  30. package/dist/esm/renderReleaseNotes.js +2 -1
  31. package/dist/esm/reportPrepare.js +18 -0
  32. package/dist/esm/resolveCommandTags.js +16 -6
  33. package/dist/esm/resolveReleaseTags.d.ts +8 -1
  34. package/dist/esm/resolveReleaseTags.js +11 -7
  35. package/dist/esm/runGitCliff.d.ts +2 -0
  36. package/dist/esm/runGitCliff.js +27 -0
  37. package/dist/esm/stripEmojiPrefix.d.ts +1 -0
  38. package/dist/esm/stripEmojiPrefix.js +7 -0
  39. package/dist/esm/syncWorkTypes.d.ts +10 -0
  40. package/dist/esm/syncWorkTypes.js +90 -0
  41. package/dist/esm/types.d.ts +15 -0
  42. package/dist/esm/work-types.json +127 -0
  43. package/dist/esm/work-types.schema.json +73 -0
  44. package/dist/esm/workTypesData.d.ts +14 -0
  45. package/dist/esm/workTypesData.js +59 -0
  46. package/dist/esm/workTypesUtils.d.ts +5 -0
  47. package/dist/esm/workTypesUtils.js +16 -0
  48. package/package.json +6 -3
  49. package/dist/esm/version.d.ts +0 -1
  50. package/dist/esm/version.js +0 -4
package/CHANGELOG.md CHANGED
@@ -2,33 +2,49 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [release-kit-v5.1.0] - 2026-04-30
5
+ ## [release-kit-v5.2.0] - 2026-05-04
6
6
 
7
- ### Bug fixes
7
+ ### πŸŽ‰ Features
8
8
 
9
- - Make publish's clean-tree safety gate reachable (#311)
9
+ - Add emojis to changelog and release-note headings (#352)
10
10
 
11
- Fixes an issue where `release-kit publish` failed with pnpm's "working tree is dirty" error on a clean tree whenever `releaseNotes.shouldInjectIntoReadme: true` was configured. release-kit injects the release notes into the package README before invoking `pnpm publish`, so pnpm's own working-tree check fired on a tree release-kit had just dirtied β€” even though the user's tree was clean at command start.
11
+ Adds emoji prefixes to the section headings rendered in `CHANGELOG.md` and release notes generated by `@williamthorsen/release-kit`. Each of the 13 default work types gets a single decorative emoji so its section is easier to spot when skimming a release: πŸ› Bug fixes, πŸŽ‰ Features, πŸ“š Documentation, ♻️ Refactoring, ⚑ Performance, πŸ”’ Security, πŸ§ͺ Tests, βš™οΈ Tooling, πŸ‘· CI, πŸ“¦ Dependencies, πŸ—οΈ Internal, πŸ—‘οΈ Deprecated, and πŸ€– Agentic support. Matching of `changelogJson.devOnlySections` is emoji-tolerant: existing consumer overrides written as bare names continue to work without modification.
12
12
 
13
- - Make `--set-version` + `project` rejection explicit (#319)
13
+ - Surface bang violations in release prepare reports (#359)
14
14
 
15
- Improves the error users see when invoking `release-kit prepare --set-version` with a `project` block configured. The combination is still rejected β€” as before β€” but now produces a single, project-aware message ("--set-version cannot be combined with a project release…") rather than the previous two-step chain (`--set-version requires --only`, then `--only cannot be combined with a project release` after the user added `--only`).
15
+ Release-prepare flows now surface `!`-policy violations as warnings in the prepare report. Each workspace's and project's commit window is parsed against the default policy table β€” `internal!` is rejected as contradictory, bare `drop:` is rejected for missing the required `!`, and so on β€” and any violations appear under the workspace's section in the report alongside short hash, truncated subject, type, and surface (prefix or body). A new `breakingPolicies` config field lets consumers override individual entries or pass `{}` to disable enforcement entirely. Release-time enforcement remains tolerant: violations are warnings, never failures, so a single legacy commit cannot block a release.
16
16
 
17
- - Reject `--only` that would strand excluded dependents (#321)
17
+ ### πŸ› Bug fixes
18
18
 
19
- Fixes a silent footgun in `release-kit prepare --only=...`: an excluded internal dependent with its own changes would be left unreleased with no runtime signal, even though the targeted workspace it depends on was being released. The command now rejects such invocations up front, naming every excluded dependent whose changes would be stranded.
19
+ - Restrict publish to publishable workspaces (#345)
20
20
 
21
- - Order prerelease versions correctly in changelog sort (#334)
21
+ Fixes an issue where `release-kit publish` failed for workspaces marked `package.json#private: true`. The command now operates only on publishable workspaces β€” those where `private` is absent or `false` β€” and the rest of the release pipeline (`tag`, `create-github-release`, `prepare`, changelog) continues to handle private workspaces unchanged. This preserves the "versioned but not published" workflow: a private workspace can still be versioned, tagged, and published as a GitHub Release; only the registry-publish step is skipped. Without `--tags`, unpublishable tags are silently filtered (an empty result prints `Nothing to publish.` and exits 0). With `--tags` naming an unpublishable workspace, `release-kit publish` exits 1 with one error per offending tag, citing `package.json#private` and the workspace path.
22
22
 
23
- Fixes a latent issue in `@williamthorsen/release-kit` where prerelease version tags (e.g., `1.2.3-alpha`, `1.2.3-rc.1`) were sorted as if their prerelease component were absent, causing them to appear in the wrong position relative to releases sharing the same base version. Changelog entries are now ordered per SemVer Β§11: prerelease versions precede the corresponding release (`1.2.3-alpha < 1.2.3`), build metadata is ignored for ordering, and entries that fail SemVer validation sort deterministically to the bottom of the list rather than collapsing into mid-list positions.
23
+ - Skip tooling-only releases instead of failing (#347)
24
24
 
25
- ### Documentation
25
+ Fixes an issue where `release-kit create-github-release --tags <tag>` exited 1 whenever the tag's changelog had no all-audience content. The reusable `create-github-release.reusable.yaml` workflow forwards `github.ref_name` into `--tags`, so tooling-only releases consistently produced failed workflow runs even though no failure occurred. The command now exits 1 only when a requested tag has no changelog entry; intentional skip reasons (`no-audience-content`, `empty-body`) are informational. A typoed tag still surfaces an error even when batched alongside successful tags, and the info summary reports the per-tag skip reason for diagnostic visibility.
26
26
 
27
- - Document tag prefix collisions as general rule (#320)
27
+ - Establish canonical work-types SSOT and restore changelog section ordering (#358)
28
28
 
29
- Documents the strict-prefix tag-prefix collision rule as a general validation rule that applies to every release-kit consumer declaring more than one tag prefix: across active workspaces, declared legacy identities, retired packages, and the optional `project` block. Previously, the rule appeared only inside the `Project releases` validation list.
29
+ Restores canonical section ordering in changelogs and release notes β€” sections were appearing in unpredictable order after the previous release added emoji prefixes to section headers. Sections now follow a stable priority: public-facing types (Features, Fixes, Security, …) first, then internal types, then process types. Release-note bullets for breaking changes carry a `🚨 **Breaking:**` prefix so they stand out at a glance. Documentation entries move out of public release notes β€” they continue to appear in dev changelogs.
30
30
 
31
- ### Features
31
+ Closes #355.
32
+
33
+ ### ⚑ Performance
34
+
35
+ - Skip npx registry revalidation when running git-cliff (#361)
36
+
37
+ Speeds up `release-kit prepare` by skipping the npm registry cache-revalidation HTTP request that ran on every `git-cliff` invocation. Per-invocation overhead drops from ~4.6 s to ~2.0 s; in a four-workspace monorepo this saves about 10 seconds per run. Also suppresses a transient stderr spinner that briefly appeared during package resolution and looked like a half-complete log message. Network fallback is preserved β€” runs on machines with an empty npx cache still resolve `git-cliff` over the network.
38
+
39
+ ### ♻️ Refactoring
40
+
41
+ - Read package version at runtime via shared helper (#338)
42
+
43
+ Fixes an issue where running `audit-deps`, `nmr`, or `release-kit` from the locally built `dist/esm/` after a `git pull` could report a stale version. Each CLI now reads its version directly from its `package.json` at startup, so version reads stay in sync with the installed source without requiring a fresh `pnpm install` or rebuild.
44
+
45
+ ## [release-kit-v5.1.0] - 2026-04-30
46
+
47
+ ### πŸŽ‰ Features
32
48
 
33
49
  - Add `project` block for project-level release stage (#317)
34
50
 
@@ -46,7 +62,25 @@ All notable changes to this project will be documented in this file.
46
62
 
47
63
  Decouples `--force` and `--bump` so each flag has a single responsibility, and unifies skip semantics across the per-workspace and project pipelines.
48
64
 
49
- ### Refactoring
65
+ ### πŸ› Bug fixes
66
+
67
+ - Make publish's clean-tree safety gate reachable (#311)
68
+
69
+ Fixes an issue where `release-kit publish` failed with pnpm's "working tree is dirty" error on a clean tree whenever `releaseNotes.shouldInjectIntoReadme: true` was configured. release-kit injects the release notes into the package README before invoking `pnpm publish`, so pnpm's own working-tree check fired on a tree release-kit had just dirtied β€” even though the user's tree was clean at command start.
70
+
71
+ - Make `--set-version` + `project` rejection explicit (#319)
72
+
73
+ Improves the error users see when invoking `release-kit prepare --set-version` with a `project` block configured. The combination is still rejected β€” as before β€” but now produces a single, project-aware message ("--set-version cannot be combined with a project release…") rather than the previous two-step chain (`--set-version requires --only`, then `--only cannot be combined with a project release` after the user added `--only`).
74
+
75
+ - Reject `--only` that would strand excluded dependents (#321)
76
+
77
+ Fixes a silent footgun in `release-kit prepare --only=...`: an excluded internal dependent with its own changes would be left unreleased with no runtime signal, even though the targeted workspace it depends on was being released. The command now rejects such invocations up front, naming every excluded dependent whose changes would be stranded.
78
+
79
+ - Order prerelease versions correctly in changelog sort (#334)
80
+
81
+ Fixes a latent issue in `@williamthorsen/release-kit` where prerelease version tags (e.g., `1.2.3-alpha`, `1.2.3-rc.1`) were sorted as if their prerelease component were absent, causing them to appear in the wrong position relative to releases sharing the same base version. Changelog entries are now ordered per SemVer Β§11: prerelease versions precede the corresponding release (`1.2.3-alpha < 1.2.3`), build metadata is ignored for ordering, and entries that fail SemVer validation sort deterministically to the bottom of the list rather than collapsing into mid-list positions.
82
+
83
+ ### ♻️ Refactoring
50
84
 
51
85
  - Convert prepare results to discriminated unions (#330)
52
86
 
@@ -56,21 +90,21 @@ All notable changes to this project will be documented in this file.
56
90
 
57
91
  Reorganises `changelog.json` generation in `@williamthorsen/release-kit` so that producing entries (running git-cliff and shaping the output) is fully separated from persisting them (reading, merging, and writing the file). Removes the silent-discard parse-failure path at the project release stage by no longer reading the root `changelog.json` before overwriting it. Sharpens dry-run mode: `git-cliff` now runs even on dry-run so configuration mistakes surface in preview rather than only on a real release. Trims the public `index.ts` barrel from ~50 re-exports to the two type names actually consumed by external configs.
58
92
 
59
- ### Tests
93
+ ### πŸ§ͺ Tests
60
94
 
61
95
  - Cover untested project-release and config branches (#329)
62
96
 
63
97
  Closes four mechanical test-coverage gaps in the project-level release surfaces flagged in the test review of #308. New cases exercise the `(no previous release found)` rendering for released projects, the unparseable-commit warning block on the released-project rendering path, the `readFileSync` I/O failure path in `readRootPackageVersion`, and the contributing-paths invariant in `releasePrepareProject`. No production code changes β€” these are pure-render and pure-derivation branches that previously had no test exercising them.
64
98
 
65
- ## [release-kit-v5.0.0] - 2026-04-23
99
+ ### πŸ“š Documentation
66
100
 
67
- ### Bug fixes
101
+ - Document tag prefix collisions as general rule (#320)
68
102
 
69
- - Derive monorepo tag prefix from unscoped `package.json` name (#278)
103
+ Documents the strict-prefix tag-prefix collision rule as a general validation rule that applies to every release-kit consumer declaring more than one tag prefix: across active workspaces, declared legacy identities, retired packages, and the optional `project` block. Previously, the rule appeared only inside the `Project releases` validation list.
70
104
 
71
- Fixes a long-standing mismatch between a monorepo workspace's directory basename and its publishable package identity.
105
+ ## [release-kit-v5.0.0] - 2026-04-23
72
106
 
73
- ### Features
107
+ ### πŸŽ‰ Features
74
108
 
75
109
  - Improve release-notes rendering quality (#261)
76
110
 
@@ -118,7 +152,13 @@ All notable changes to this project will be documented in this file.
118
152
 
119
153
  Adds the ability to generate release notes when running `release-kit prepare`. The `--with-release-notes` option enables the generation of per-workspace preview files so authors can verify release-note injection before publishing. Injected release notes are also now prefixed with a `## Release notes β€” v{version} ({date})` heading to add missing context to the README.
120
154
 
121
- ### Refactoring
155
+ ### πŸ› Bug fixes
156
+
157
+ - Derive monorepo tag prefix from unscoped `package.json` name (#278)
158
+
159
+ Fixes a long-standing mismatch between a monorepo workspace's directory basename and its publishable package identity.
160
+
161
+ ### ♻️ Refactoring
122
162
 
123
163
  - Rename `component` to `workspace` in config API and internals (#296)
124
164
 
@@ -130,21 +170,21 @@ All notable changes to this project will be documented in this file.
130
170
 
131
171
  ## [release-kit-v4.8.0] - 2026-04-17
132
172
 
133
- ### Bug fixes
173
+ ### πŸŽ‰ Features
134
174
 
135
- - Replace broad catch with `existsSync` guard in `detectRepoType` (#229)
175
+ - Add `push` command for safe tag pushing (#243)
136
176
 
137
- Fixes silent swallowing of unexpected filesystem errors in `detectRepoType`. Previously, errors like `EACCES` (permission denied) or `EMFILE` (too many open files) when reading `package.json` were caught and discarded, causing the function to silently return `'single-package'` instead of surfacing the problem.
177
+ Adds a `release-kit push` command that safely pushes the release commit and each tag individually, ensuring GitHub Actions fires a separate workflow run per tag. The command performs a `1 + N` push sequence: one branch push followed by one `git push --no-follow-tags origin <tag>` per resolved tag. Supports `--dry-run` (preview without pushing), `--only` (filter tags by package name), and `--tags-only` (skip the branch push).
138
178
 
139
- ### Features
179
+ ### πŸ› Bug fixes
140
180
 
141
- - Add `push` command for safe tag pushing (#243)
181
+ - Replace broad catch with `existsSync` guard in `detectRepoType` (#229)
142
182
 
143
- Adds a `release-kit push` command that safely pushes the release commit and each tag individually, ensuring GitHub Actions fires a separate workflow run per tag. The command performs a `1 + N` push sequence: one branch push followed by one `git push --no-follow-tags origin <tag>` per resolved tag. Supports `--dry-run` (preview without pushing), `--only` (filter tags by package name), and `--tags-only` (skip the branch push).
183
+ Fixes silent swallowing of unexpected filesystem errors in `detectRepoType`. Previously, errors like `EACCES` (permission denied) or `EMFILE` (too many open files) when reading `package.json` were caught and discarded, causing the function to silently return `'single-package'` instead of surfacing the problem.
144
184
 
145
185
  ## [release-kit-v4.7.0] - 2026-04-16
146
186
 
147
- ### Features
187
+ ### πŸŽ‰ Features
148
188
 
149
189
  - Support ## as synthetic ticket prefix in changelogs
150
190
 
@@ -152,7 +192,7 @@ All notable changes to this project will be documented in this file.
152
192
 
153
193
  ## [release-kit-v4.6.0] - 2026-04-15
154
194
 
155
- ### Features
195
+ ### πŸŽ‰ Features
156
196
 
157
197
  - Guard `prepare` against dirty working tree (#188)
158
198
 
@@ -172,13 +212,13 @@ All notable changes to this project will be documented in this file.
172
212
 
173
213
  Adds structured changelog generation with audience tagging to the `release-kit` package, enabling GitHub Release creation and npm README injection with user-facing release notes filtered from developer-only sections. The existing CHANGELOG.md pipeline is unchanged; a new `.meta/changelog.json` artifact is generated in parallel during `release-kit prepare`, and consumed during `release-kit publish` to create GitHub Releases and inject release notes into the published package's README.
174
214
 
175
- ### Refactoring
215
+ ### ♻️ Refactoring
176
216
 
177
217
  - Decouple GitHub Release creation and README injection from npm publish (#203)
178
218
 
179
219
  Makes GitHub Release creation available as a standalone CLI command (`release-kit github-release`) and removes README injection logic from the publish function. Non-published projects (applications, websites, internal tools) can now create GitHub Releases independently after `release-kit prepare`, and the inject/restore lifecycle is managed by the command layer rather than buried inside business logic.
180
220
 
181
- ### Tooling
221
+ ### βš™οΈ Tooling
182
222
 
183
223
  - Enable automated publication to npm (#187)
184
224
 
@@ -186,7 +226,7 @@ All notable changes to this project will be documented in this file.
186
226
 
187
227
  ## [release-kit-v4.5.1] - 2026-04-10
188
228
 
189
- ### Bug fixes
229
+ ### πŸ› Bug fixes
190
230
 
191
231
  - Fix sync-labels init scaffolding output (#179)
192
232
 
@@ -194,13 +234,7 @@ All notable changes to this project will be documented in this file.
194
234
 
195
235
  ## [release-kit-v4.4.0] - 2026-04-04
196
236
 
197
- ### Documentation
198
-
199
- - Refine README to match preflight documentation standard (#138)
200
-
201
- Restructures the release-kit README to match the documentation standard established by the preflight README (#114). Reorders sections to follow the cross-package convention, converts CLI flag listings from code blocks to tables, adds representative `prepare --dry-run` output to the quick start, and condenses ~90 lines of inline workflow YAML into a summary with an inputs table and trigger examples. Fixes several accuracy gaps found by verifying documentation against source.
202
-
203
- ### Features
237
+ ### πŸŽ‰ Features
204
238
 
205
239
  - Add --version flag to nmr and release-kit (#143)
206
240
 
@@ -210,7 +244,7 @@ All notable changes to this project will be documented in this file.
210
244
 
211
245
  Adds try/catch with `ERR_MODULE_NOT_FOUND` detection to all six bin wrappers across `nmr`, `preflight`, and `release-kit`. Previously, five of the six wrappers used bare `import()` calls that produced cryptic unhandled rejections when `dist/` was missing, and `preflight`'s existing try/catch gave no actionable guidance.
212
246
 
213
- ### Refactoring
247
+ ### ♻️ Refactoring
214
248
 
215
249
  - Extract deleteFileIfExists helper (#136)
216
250
 
@@ -220,9 +254,15 @@ All notable changes to this project will be documented in this file.
220
254
 
221
255
  Add a schema-driven `parseArgs` function to `@williamthorsen/node-monorepo-core` that handles boolean flags, string flags (both `--flag=value` and `--flag value`), short aliases, positional collection, the `--` delimiter, and unknown-flag errors. Migrate all CLI argument-parsing sites in preflight (3 sites) and release-kit (5 sites) to use it. A companion `translateParseError` helper normalizes internal error messages for consistent user-facing output.
222
256
 
257
+ ### πŸ“š Documentation
258
+
259
+ - Refine README to match preflight documentation standard (#138)
260
+
261
+ Restructures the release-kit README to match the documentation standard established by the preflight README (#114). Reorders sections to follow the cross-package convention, converts CLI flag listings from code blocks to tables, adds representative `prepare --dry-run` output to the quick start, and condenses ~90 lines of inline workflow YAML into a summary with an inputs table and trigger examples. Fixes several accuracy gaps found by verifying documentation against source.
262
+
223
263
  ## [release-kit-v4.0.0] - 2026-04-02
224
264
 
225
- ### Features
265
+ ### πŸŽ‰ Features
226
266
 
227
267
  - Rename reusable workflows to .reusable.yaml convention (#129)
228
268
 
@@ -230,19 +270,7 @@ All notable changes to this project will be documented in this file.
230
270
 
231
271
  ## [release-kit-v3.0.0] - 2026-03-29
232
272
 
233
- ### Bug fixes
234
-
235
- - Pass tag pattern to git-cliff based on tagPrefix (#77)
236
-
237
- Fixes the issue that git-cliff was processing the entire commit history on every run instead of only commits since the last release.
238
-
239
- Constructs the pattern from `tagPrefix` at invocation time (e.g., `release-kit-v` β†’ `release-kit-v[0-9].*`) and pass it via `--tag-pattern`, which overrides the config file default.
240
-
241
- - Propagate version bumps to workspace dependents (#80)
242
-
243
- Restructures `releasePrepareMono` from a single-pass loop into a phased pipeline that automatically patch-bumps workspace dependents when a component is released. A reverse dependency graph is built from `workspace:` references in `dependencies` and `peerDependencies`, then BFS propagation walks upward from bumped components to their dependents. Propagated-only components receive synthetic changelog entries instead of git-cliff invocations.
244
-
245
- ### Features
273
+ ### πŸŽ‰ Features
246
274
 
247
275
  - Support conventional-commit format in commit parsing (#85)
248
276
 
@@ -262,9 +290,21 @@ All notable changes to this project will be documented in this file.
262
290
 
263
291
  Updates the scaffolded `publish.yaml` template to include `provenance: false` with an inline comment guiding public repos to opt in. Expand the `release-kit init` next-steps output with hints about the provenance setting and trusted publisher registration. Set `provenance: true` in this repo's own `publish.yaml` since it is public.
264
292
 
293
+ ### πŸ› Bug fixes
294
+
295
+ - Pass tag pattern to git-cliff based on tagPrefix (#77)
296
+
297
+ Fixes the issue that git-cliff was processing the entire commit history on every run instead of only commits since the last release.
298
+
299
+ Constructs the pattern from `tagPrefix` at invocation time (e.g., `release-kit-v` β†’ `release-kit-v[0-9].*`) and pass it via `--tag-pattern`, which overrides the config file default.
300
+
301
+ - Propagate version bumps to workspace dependents (#80)
302
+
303
+ Restructures `releasePrepareMono` from a single-pass loop into a phased pipeline that automatically patch-bumps workspace dependents when a component is released. A reverse dependency graph is built from `workspace:` references in `dependencies` and `peerDependencies`, then BFS propagation walks upward from bumped components to their dependents. Propagated-only components receive synthetic changelog entries instead of git-cliff invocations.
304
+
265
305
  ## [release-kit-v2.3.2] - 2026-03-28
266
306
 
267
- ### Bug fixes
307
+ ### πŸ› Bug fixes
268
308
 
269
309
  - Prevent unparseable commits from being silently dropped (#76)
270
310
 
@@ -272,7 +312,7 @@ All notable changes to this project will be documented in this file.
272
312
 
273
313
  ## [release-kit-v2.3.0] - 2026-03-28
274
314
 
275
- ### Features
315
+ ### πŸŽ‰ Features
276
316
 
277
317
  - Add shared writeFileWithCheck utility and overwrite reporting (#66)
278
318
 
@@ -284,7 +324,7 @@ All notable changes to this project will be documented in this file.
284
324
 
285
325
  Refactors `writeReleaseTags` to use the shared `writeFileWithCheck` utility from `@node-monorepo-tools/core` instead of raw `mkdirSync`/`writeFileSync`. The function now returns a structured `WriteResult` instead of throwing, and contains no `console` calls β€” all presentation moves to `runAndReport`.
286
326
 
287
- ### Tests
327
+ ### πŸ§ͺ Tests
288
328
 
289
329
  - Add eligibility check failure and short-circuit tests (#63)
290
330
 
@@ -300,7 +340,7 @@ All notable changes to this project will be documented in this file.
300
340
 
301
341
  ## [release-kit-v2.2.0] - 2026-03-27
302
342
 
303
- ### Features
343
+ ### πŸŽ‰ Features
304
344
 
305
345
  - Add sync-labels command (#33)
306
346
 
@@ -336,7 +376,7 @@ All notable changes to this project will be documented in this file.
336
376
 
337
377
  Scopes: core, nmr
338
378
 
339
- ### Refactoring
379
+ ### ♻️ Refactoring
340
380
 
341
381
  - Replace dist bin targets with thin wrapper scripts (#48)
342
382
 
@@ -346,7 +386,7 @@ All notable changes to this project will be documented in this file.
346
386
 
347
387
  Extracts all `console.info` calls from the prepare workflow's logic functions (`bumpAllVersions`, `generateChangelogs`, `releasePrepare`, `releasePrepareMono`) into a dedicated `reportPrepare` formatter. Logic functions now return structured result types (`BumpResult`, `ComponentPrepareResult`, `PrepareResult`). The legacy `runReleasePrepare` entry point is retired, with its utilities absorbed into `prepareCommand`.
348
388
 
349
- ### Tests
389
+ ### πŸ§ͺ Tests
350
390
 
351
391
  - Cover multi-changelogPaths and error paths (#44)
352
392
 
@@ -357,7 +397,7 @@ All notable changes to this project will be documented in this file.
357
397
 
358
398
  Also adds a `findAllCliffOutputPaths()` test helper that collects the `--output` arg from every `git-cliff` mock call.
359
399
 
360
- ### Tooling
400
+ ### βš™οΈ Tooling
361
401
 
362
402
  - Adopt nmr to run monorepo and workspace scripts (#38)
363
403
 
@@ -365,7 +405,7 @@ All notable changes to this project will be documented in this file.
365
405
 
366
406
  ## [release-kit-v2.1.0] - 2026-03-17
367
407
 
368
- ### Features
408
+ ### πŸŽ‰ Features
369
409
 
370
410
  - Slim down release workflow by removing unnecessary pnpm install (#21)
371
411
 
@@ -383,7 +423,7 @@ All notable changes to this project will be documented in this file.
383
423
 
384
424
  Adds a `resolveCliffConfigPath()` function that searches for a git-cliff config in a 4-step cascade (explicit path β†’ `.config/git-cliff.toml` β†’ `cliff.toml` β†’ bundled `cliff.toml.template`), eliminating the requirement for consuming repos to maintain a cliff config copy. Restructures the `init` command to scaffold only the workflow file by default, with new `--with-config` and `--force` flags. Moves `.release-tags` from `/tmp/release-kit/` to project-local `tmp/` for predictable behavior in local runs.
385
425
 
386
- ### Refactoring
426
+ ### ♻️ Refactoring
387
427
 
388
428
  - Clean up release-kit post-migration issues (#19)
389
429
 
@@ -391,7 +431,7 @@ All notable changes to this project will be documented in this file.
391
431
 
392
432
  ## [release-kit-v1.0.1] - 2026-03-14
393
433
 
394
- ### Features
434
+ ### πŸŽ‰ Features
395
435
 
396
436
  - Migrate release-kit from toolbelt (#18)
397
437