@williamthorsen/release-kit 5.0.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 (73) hide show
  1. package/CHANGELOG.md +149 -49
  2. package/README.md +275 -78
  3. package/cliff.toml.template +26 -17
  4. package/dist/esm/.cache +1 -1
  5. package/dist/esm/assertCleanWorkingTree.js +1 -1
  6. package/dist/esm/bin/release-kit.js +97 -4
  7. package/dist/esm/buildChangelogEntries.d.ts +4 -0
  8. package/dist/esm/buildChangelogEntries.js +173 -0
  9. package/dist/esm/buildDependencyGraph.d.ts +1 -0
  10. package/dist/esm/buildDependencyGraph.js +8 -1
  11. package/dist/esm/buildReleaseSummary.js +9 -1
  12. package/dist/esm/buildSyntheticChangelogEntry.d.ts +5 -0
  13. package/dist/esm/buildSyntheticChangelogEntry.js +13 -0
  14. package/dist/esm/changelogJsonFile.d.ts +4 -0
  15. package/dist/esm/changelogJsonFile.js +68 -0
  16. package/dist/esm/checkWorkTypesDrift.d.ts +11 -0
  17. package/dist/esm/checkWorkTypesDrift.js +110 -0
  18. package/dist/esm/collectPolicyViolations.d.ts +6 -0
  19. package/dist/esm/collectPolicyViolations.js +15 -0
  20. package/dist/esm/createGithubRelease.d.ts +12 -2
  21. package/dist/esm/createGithubRelease.js +12 -8
  22. package/dist/esm/createGithubReleaseCommand.js +10 -6
  23. package/dist/esm/decideRelease.d.ts +28 -0
  24. package/dist/esm/decideRelease.js +44 -0
  25. package/dist/esm/defaults.d.ts +8 -0
  26. package/dist/esm/defaults.js +43 -20
  27. package/dist/esm/deriveWorkspaceConfig.js +3 -0
  28. package/dist/esm/determineBumpFromCommits.d.ts +6 -1
  29. package/dist/esm/determineBumpFromCommits.js +9 -3
  30. package/dist/esm/generateChangelogs.js +14 -29
  31. package/dist/esm/index.d.ts +2 -43
  32. package/dist/esm/index.js +0 -82
  33. package/dist/esm/init/templates.js +2 -2
  34. package/dist/esm/loadConfig.d.ts +10 -1
  35. package/dist/esm/loadConfig.js +110 -24
  36. package/dist/esm/parseCommitMessage.d.ts +8 -2
  37. package/dist/esm/parseCommitMessage.js +32 -3
  38. package/dist/esm/prepareCommand.js +51 -9
  39. package/dist/esm/publish.d.ts +0 -1
  40. package/dist/esm/publish.js +3 -3
  41. package/dist/esm/publishCommand.js +31 -3
  42. package/dist/esm/releasePrepare.js +109 -41
  43. package/dist/esm/releasePrepareMono.js +156 -87
  44. package/dist/esm/releasePrepareProject.d.ts +9 -0
  45. package/dist/esm/releasePrepareProject.js +121 -0
  46. package/dist/esm/renderReleaseNotes.js +2 -1
  47. package/dist/esm/reportPrepare.js +88 -24
  48. package/dist/esm/resolveCommandTags.js +16 -6
  49. package/dist/esm/resolveReleaseTags.d.ts +8 -1
  50. package/dist/esm/resolveReleaseTags.js +11 -7
  51. package/dist/esm/runGitCliff.d.ts +2 -0
  52. package/dist/esm/runGitCliff.js +27 -0
  53. package/dist/esm/stripEmojiPrefix.d.ts +1 -0
  54. package/dist/esm/stripEmojiPrefix.js +7 -0
  55. package/dist/esm/syncWorkTypes.d.ts +10 -0
  56. package/dist/esm/syncWorkTypes.js +90 -0
  57. package/dist/esm/types.d.ts +72 -14
  58. package/dist/esm/validateConfig.js +26 -0
  59. package/dist/esm/validateOnlyExcludesStrandedDependents.d.ts +14 -0
  60. package/dist/esm/validateOnlyExcludesStrandedDependents.js +109 -0
  61. package/dist/esm/work-types.json +127 -0
  62. package/dist/esm/work-types.schema.json +73 -0
  63. package/dist/esm/workTypesData.d.ts +14 -0
  64. package/dist/esm/workTypesData.js +59 -0
  65. package/dist/esm/workTypesUtils.d.ts +5 -0
  66. package/dist/esm/workTypesUtils.js +16 -0
  67. package/package.json +9 -3
  68. package/presets/labels/common.yaml +9 -6
  69. package/schemas/label-map.json +24 -0
  70. package/dist/esm/generateChangelogJson.d.ts +0 -7
  71. package/dist/esm/generateChangelogJson.js +0 -232
  72. package/dist/esm/version.d.ts +0 -1
  73. package/dist/esm/version.js +0 -4
package/CHANGELOG.md CHANGED
@@ -2,15 +2,109 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [release-kit-v5.0.0] - 2026-04-23
5
+ ## [release-kit-v5.2.0] - 2026-05-04
6
6
 
7
- ### Bug fixes
7
+ ### ๐ŸŽ‰ Features
8
8
 
9
- - Derive monorepo tag prefix from unscoped `package.json` name (#278)
9
+ - Add emojis to changelog and release-note headings (#352)
10
10
 
11
- Fixes a long-standing mismatch between a monorepo workspace's directory basename and its publishable package identity.
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
+
13
+ - Surface bang violations in release prepare reports (#359)
14
+
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
+
17
+ ### ๐Ÿ› Bug fixes
18
+
19
+ - Restrict publish to publishable workspaces (#345)
20
+
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
+
23
+ - Skip tooling-only releases instead of failing (#347)
24
+
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
+
27
+ - Establish canonical work-types SSOT and restore changelog section ordering (#358)
28
+
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
+
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
48
+
49
+ - Add `project` block for project-level release stage (#317)
50
+
51
+ Adds support for monorepos that ship a single combined deliverable to version, changelog, and release-note the project itself rather than only its constituent workspaces.
52
+
53
+ - Publish JSON Schema for `.meta/label-map.json` (#325)
54
+
55
+ Adds a JSON Schema for `.meta/label-map.json` to release-kit, packaged at `packages/release-kit/schemas/label-map.json` and shipped to npm. Consumers reference it via the stable raw URL pattern `https://github.com/williamthorsen/node-monorepo-tools/raw/release-kit-v<version>/packages/release-kit/schemas/label-map.json` โ€” the same shape audit-deps already uses.
56
+
57
+ - Label prepare errors with the failing stage (#326)
58
+
59
+ Adds stage attribution to errors thrown during `release-kit prepare`. Errors from per-workspace bumps and changelog generation, the project release stage, and the post-release format command now begin with a stage label that identifies the failing stage and (where relevant) the affected workspace.
60
+
61
+ - Make `--force` and `--bump` orthogonal (#328)
62
+
63
+ Decouples `--force` and `--bump` so each flag has a single responsibility, and unifies skip semantics across the per-workspace and project pipelines.
64
+
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
84
+
85
+ - Convert prepare results to discriminated unions (#330)
86
+
87
+ Tightens `ProjectPrepareResult` and `WorkspacePrepareResult` from flat-with-optionals types into status-discriminated unions, so consumers that have already narrowed on `status === 'released'` no longer need to re-guard each release-only field with `!== undefined`. The four new sub-types (`ReleasedProjectResult`, `ReleasedWorkspaceResult`, `SkippedProjectResult`, `SkippedWorkspaceResult`) are exported from the package so callers can name the variants directly. Renderer output is byte-identical to before.
88
+
89
+ - Split changelog.json generation into layered helpers (#333)
90
+
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.
92
+
93
+ ### ๐Ÿงช Tests
94
+
95
+ - Cover untested project-release and config branches (#329)
96
+
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.
98
+
99
+ ### ๐Ÿ“š Documentation
100
+
101
+ - Document tag prefix collisions as general rule (#320)
12
102
 
13
- ### Features
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.
104
+
105
+ ## [release-kit-v5.0.0] - 2026-04-23
106
+
107
+ ### ๐ŸŽ‰ Features
14
108
 
15
109
  - Improve release-notes rendering quality (#261)
16
110
 
@@ -58,7 +152,13 @@ All notable changes to this project will be documented in this file.
58
152
 
59
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.
60
154
 
61
- ### 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
62
162
 
63
163
  - Rename `component` to `workspace` in config API and internals (#296)
64
164
 
@@ -70,21 +170,21 @@ All notable changes to this project will be documented in this file.
70
170
 
71
171
  ## [release-kit-v4.8.0] - 2026-04-17
72
172
 
73
- ### Bug fixes
173
+ ### ๐ŸŽ‰ Features
74
174
 
75
- - Replace broad catch with `existsSync` guard in `detectRepoType` (#229)
175
+ - Add `push` command for safe tag pushing (#243)
76
176
 
77
- 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).
78
178
 
79
- ### Features
179
+ ### ๐Ÿ› Bug fixes
80
180
 
81
- - Add `push` command for safe tag pushing (#243)
181
+ - Replace broad catch with `existsSync` guard in `detectRepoType` (#229)
82
182
 
83
- 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.
84
184
 
85
185
  ## [release-kit-v4.7.0] - 2026-04-16
86
186
 
87
- ### Features
187
+ ### ๐ŸŽ‰ Features
88
188
 
89
189
  - Support ## as synthetic ticket prefix in changelogs
90
190
 
@@ -92,7 +192,7 @@ All notable changes to this project will be documented in this file.
92
192
 
93
193
  ## [release-kit-v4.6.0] - 2026-04-15
94
194
 
95
- ### Features
195
+ ### ๐ŸŽ‰ Features
96
196
 
97
197
  - Guard `prepare` against dirty working tree (#188)
98
198
 
@@ -112,13 +212,13 @@ All notable changes to this project will be documented in this file.
112
212
 
113
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.
114
214
 
115
- ### Refactoring
215
+ ### โ™ป๏ธ Refactoring
116
216
 
117
217
  - Decouple GitHub Release creation and README injection from npm publish (#203)
118
218
 
119
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.
120
220
 
121
- ### Tooling
221
+ ### โš™๏ธ Tooling
122
222
 
123
223
  - Enable automated publication to npm (#187)
124
224
 
@@ -126,7 +226,7 @@ All notable changes to this project will be documented in this file.
126
226
 
127
227
  ## [release-kit-v4.5.1] - 2026-04-10
128
228
 
129
- ### Bug fixes
229
+ ### ๐Ÿ› Bug fixes
130
230
 
131
231
  - Fix sync-labels init scaffolding output (#179)
132
232
 
@@ -134,13 +234,7 @@ All notable changes to this project will be documented in this file.
134
234
 
135
235
  ## [release-kit-v4.4.0] - 2026-04-04
136
236
 
137
- ### Documentation
138
-
139
- - Refine README to match preflight documentation standard (#138)
140
-
141
- 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.
142
-
143
- ### Features
237
+ ### ๐ŸŽ‰ Features
144
238
 
145
239
  - Add --version flag to nmr and release-kit (#143)
146
240
 
@@ -150,7 +244,7 @@ All notable changes to this project will be documented in this file.
150
244
 
151
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.
152
246
 
153
- ### Refactoring
247
+ ### โ™ป๏ธ Refactoring
154
248
 
155
249
  - Extract deleteFileIfExists helper (#136)
156
250
 
@@ -160,9 +254,15 @@ All notable changes to this project will be documented in this file.
160
254
 
161
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.
162
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
+
163
263
  ## [release-kit-v4.0.0] - 2026-04-02
164
264
 
165
- ### Features
265
+ ### ๐ŸŽ‰ Features
166
266
 
167
267
  - Rename reusable workflows to .reusable.yaml convention (#129)
168
268
 
@@ -170,19 +270,7 @@ All notable changes to this project will be documented in this file.
170
270
 
171
271
  ## [release-kit-v3.0.0] - 2026-03-29
172
272
 
173
- ### Bug fixes
174
-
175
- - Pass tag pattern to git-cliff based on tagPrefix (#77)
176
-
177
- Fixes the issue that git-cliff was processing the entire commit history on every run instead of only commits since the last release.
178
-
179
- 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.
180
-
181
- - Propagate version bumps to workspace dependents (#80)
182
-
183
- 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.
184
-
185
- ### Features
273
+ ### ๐ŸŽ‰ Features
186
274
 
187
275
  - Support conventional-commit format in commit parsing (#85)
188
276
 
@@ -202,9 +290,21 @@ All notable changes to this project will be documented in this file.
202
290
 
203
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.
204
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
+
205
305
  ## [release-kit-v2.3.2] - 2026-03-28
206
306
 
207
- ### Bug fixes
307
+ ### ๐Ÿ› Bug fixes
208
308
 
209
309
  - Prevent unparseable commits from being silently dropped (#76)
210
310
 
@@ -212,7 +312,7 @@ All notable changes to this project will be documented in this file.
212
312
 
213
313
  ## [release-kit-v2.3.0] - 2026-03-28
214
314
 
215
- ### Features
315
+ ### ๐ŸŽ‰ Features
216
316
 
217
317
  - Add shared writeFileWithCheck utility and overwrite reporting (#66)
218
318
 
@@ -224,7 +324,7 @@ All notable changes to this project will be documented in this file.
224
324
 
225
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`.
226
326
 
227
- ### Tests
327
+ ### ๐Ÿงช Tests
228
328
 
229
329
  - Add eligibility check failure and short-circuit tests (#63)
230
330
 
@@ -240,7 +340,7 @@ All notable changes to this project will be documented in this file.
240
340
 
241
341
  ## [release-kit-v2.2.0] - 2026-03-27
242
342
 
243
- ### Features
343
+ ### ๐ŸŽ‰ Features
244
344
 
245
345
  - Add sync-labels command (#33)
246
346
 
@@ -276,7 +376,7 @@ All notable changes to this project will be documented in this file.
276
376
 
277
377
  Scopes: core, nmr
278
378
 
279
- ### Refactoring
379
+ ### โ™ป๏ธ Refactoring
280
380
 
281
381
  - Replace dist bin targets with thin wrapper scripts (#48)
282
382
 
@@ -286,7 +386,7 @@ All notable changes to this project will be documented in this file.
286
386
 
287
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`.
288
388
 
289
- ### Tests
389
+ ### ๐Ÿงช Tests
290
390
 
291
391
  - Cover multi-changelogPaths and error paths (#44)
292
392
 
@@ -297,7 +397,7 @@ All notable changes to this project will be documented in this file.
297
397
 
298
398
  Also adds a `findAllCliffOutputPaths()` test helper that collects the `--output` arg from every `git-cliff` mock call.
299
399
 
300
- ### Tooling
400
+ ### โš™๏ธ Tooling
301
401
 
302
402
  - Adopt nmr to run monorepo and workspace scripts (#38)
303
403
 
@@ -305,7 +405,7 @@ All notable changes to this project will be documented in this file.
305
405
 
306
406
  ## [release-kit-v2.1.0] - 2026-03-17
307
407
 
308
- ### Features
408
+ ### ๐ŸŽ‰ Features
309
409
 
310
410
  - Slim down release workflow by removing unnecessary pnpm install (#21)
311
411
 
@@ -323,7 +423,7 @@ All notable changes to this project will be documented in this file.
323
423
 
324
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.
325
425
 
326
- ### Refactoring
426
+ ### โ™ป๏ธ Refactoring
327
427
 
328
428
  - Clean up release-kit post-migration issues (#19)
329
429
 
@@ -331,7 +431,7 @@ All notable changes to this project will be documented in this file.
331
431
 
332
432
  ## [release-kit-v1.0.1] - 2026-03-14
333
433
 
334
- ### Features
434
+ ### ๐ŸŽ‰ Features
335
435
 
336
436
  - Migrate release-kit from toolbelt (#18)
337
437