@monochange/skill 0.0.0 → 0.4.2

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.
package/changelog.md ADDED
@@ -0,0 +1,887 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ This changelog is managed by [monochange](https://github.com/monochange/monochange).
6
+
7
+ ## @monochange/skill [0.1.0](https://github.com/monochange/monochange/releases/tag/@monochange/skill/v0.1.0) (2026-04-13)
8
+
9
+ ### Breaking changes
10
+
11
+ #### 🚀 Initial public release of monochange
12
+
13
+ **monochange** is a Rust-based release-planning toolkit for monorepos that span multiple package ecosystems. It is designed from the ground up to support the modern, AI-driven development landscape where agents and automation play a central role in software delivery.
14
+
15
+ ##### What is monochange?
16
+
17
+ In today's agent-driven development environment, managing releases across diverse package ecosystems (Rust, JavaScript/TypeScript, Dart, Python, etc.) becomes increasingly complex. monochange provides a unified, programmatic interface for:
18
+
19
+ - **Change tracking**: Structured changesets that capture intent across multiple packages
20
+ - **Release planning**: Automated versioning and changelog generation
21
+ - **Multi-ecosystem support**: Native handling of Cargo, NPM, Dart, Deno, and more
22
+ - **CI/CD integration**: Seamless workflows for Gitea, GitHub, and GitLab
23
+ - **Graph-based dependency analysis**: Understanding package relationships across your monorepo
24
+
25
+ ##### Why monochange matters for AI-driven workflows
26
+
27
+ As development teams increasingly rely on AI agents to generate code, manage dependencies, and orchestrate releases, monochange provides the structured foundation these agents need to operate effectively. It transforms release management from a manual, error-prone process into a deterministic, automatable workflow.
28
+
29
+ ##### What's included in this release
30
+
31
+ This first release includes:
32
+
33
+ - Core changeset management engine
34
+ - Multi-ecosystem package detection and versioning
35
+ - Hosting provider integrations (Gitea, GitHub, GitLab)
36
+ - Semantic versioning utilities
37
+ - Configurable release workflows
38
+ - CLI tooling for validation and release orchestration
39
+
40
+ For complete feature details, architecture overview, and usage examples, see the [documentation](https://docs.rs/monochange).
41
+
42
+ > _Owner:_ Ifiok Jr. _Introduced in:_ [`4542b5a`](https://github.com/monochange/monochange/commit/4542b5aee8b63a86c7ffc0ea9436090162a18056)
43
+
44
+ ## [0.4.2](https://github.com/monochange/monochange/releases/tag/v0.4.2) (2026-05-10)
45
+
46
+ ### Added
47
+
48
+ #### Order publish plans by dependencies
49
+
50
+ Order publish plans by workspace dependencies before applying registry rate-limit windows, and run CI publishing as one dependency-ordered publish operation.
51
+
52
+ This keeps dependent packages from publishing before their internal dependencies are available and adds realistic fixture coverage for non-alphabetical cargo dependency graphs.
53
+
54
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #364](https://github.com/monochange/monochange/pull/364) _Introduced in:_ [`67eae95`](https://github.com/monochange/monochange/commit/67eae951e6a35a9b4c7c6489e89cd4779e44234e) _Last updated in:_ [`2392845`](https://github.com/monochange/monochange/commit/2392845ec29289e3f219aca20ac343cf79ee965e)
55
+
56
+ ## [0.4.1](https://github.com/monochange/monochange/releases/tag/v0.4.1) (2026-05-10)
57
+
58
+ ### Changed
59
+
60
+ - No package-specific changes were recorded; `@monochange/skill` was updated to 0.4.1 as part of group `main`.
61
+
62
+ ## [0.4.0](https://github.com/monochange/monochange/releases/tag/v0.4.0) (2026-05-09)
63
+
64
+ ### Fixed
65
+
66
+ #### Remove grouped release member summaries
67
+
68
+ Grouped release notes no longer include generated changed or synchronized member lists, keeping the release note summary focused on the group release itself.
69
+
70
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #395](https://github.com/monochange/monochange/pull/395) _Introduced in:_ [`2d012ff`](https://github.com/monochange/monochange/commit/2d012ff900a612f4aed6e4d7034c8c876f50aeae) _Last updated in:_ [`8c6a312`](https://github.com/monochange/monochange/commit/8c6a312f2d9e7477fd7901688d878c721ba41336)
71
+
72
+ ## [0.3.4](https://github.com/monochange/monochange/releases/tag/v0.3.4) (2026-05-06)
73
+
74
+ ### Fixed
75
+
76
+ #### Preserve publish batch dependency order
77
+
78
+ Carry prior packages into later publish-plan batches so dependency-ordered publish requests remain available when registry rate limits split a release into multiple jobs.
79
+
80
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #389](https://github.com/monochange/monochange/pull/389) _Introduced in:_ [`12d3582`](https://github.com/monochange/monochange/commit/12d35826c3b0a8768bbf05c82b1e999a0e9ca30a)
81
+
82
+ #### Use npm for trusted npm publishing
83
+
84
+ Route trusted npm publishes through the npm CLI even in pnpm-managed workspaces so npm's OIDC trusted publishing flow can exchange the GitHub Actions identity for a short-lived publish credential. The release workflow also relies on devenv environment cleaning directly instead of the removed `strip:env` wrapper.
85
+
86
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #388](https://github.com/monochange/monochange/pull/388) _Introduced in:_ [`72773bc`](https://github.com/monochange/monochange/commit/72773bc438167b55c26bb7c3f5dd9d7a21c99084)
87
+
88
+ ## [0.3.3](https://github.com/monochange/monochange/releases/tag/v0.3.3) (2026-05-06)
89
+
90
+ ### Fixed
91
+
92
+ #### preserve GitHub OIDC environment variables in devenv
93
+
94
+ The development environment's `devenv.yaml` now keeps the GitHub Actions and OIDC identity variables that monochange needs to detect trusted publishing when running inside `devenv shell`. Previously, `strip: env` removed these variables and caused built-in publishing to fail with "No supported CI provider identity was detected."
95
+
96
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #386](https://github.com/monochange/monochange/pull/386) _Introduced in:_ [`fd1a798`](https://github.com/monochange/monochange/commit/fd1a798e57234fc465c33537077ec6acf0a47db8)
97
+
98
+ ## [0.3.2](https://github.com/monochange/monochange/releases/tag/v0.3.2) (2026-05-06)
99
+
100
+ ### Changed
101
+
102
+ - No package-specific changes were recorded; `@monochange/skill` was updated to 0.3.2 as part of group `main`.
103
+
104
+ ## [0.3.1](https://github.com/monochange/monochange/releases/tag/v0.3.1) (2026-05-05)
105
+
106
+ ### Fixed
107
+
108
+ #### Preserve rendered changelog metadata in release records
109
+
110
+ Release records now store full changelog metadata so publish flows reconstructed from git history can use the rendered release notes instead of falling back to minimal release bodies.
111
+
112
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #356](https://github.com/monochange/monochange/pull/356) _Introduced in:_ [`6f38c00`](https://github.com/monochange/monochange/commit/6f38c003a77fcc4a95e33ae1c344340bbcce1017)
113
+
114
+ #### Preserve configured changelog sections for scalar change types
115
+
116
+ Configured changelog types now take precedence over scalar bump names so generated release notes retain their intended sections. Local telemetry JSONL writes now append complete event lines to avoid malformed records during concurrent command runs.
117
+
118
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #363](https://github.com/monochange/monochange/pull/363) _Introduced in:_ [`8c8c9dc`](https://github.com/monochange/monochange/commit/8c8c9dc98f6a95d2c8a2d55fb986a66c08f29312)
119
+
120
+ #### Filter placeholder publish reports to packages that need action
121
+
122
+ `mc placeholder-publish` now hides already-published and skipped packages from the default report so dry runs focus on packages that still need placeholder publishing, and real runs focus on packages that were published or failed.
123
+
124
+ Pass `--show-all` to include the full package report when auditing every selected package.
125
+
126
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #372](https://github.com/monochange/monochange/pull/372) _Introduced in:_ [`26f20e6`](https://github.com/monochange/monochange/commit/26f20e6347429e57bc94aea06a40eec81f85c54d)
127
+
128
+ #### Publish packages in dependency order without readiness artifacts
129
+
130
+ Package publishing now derives release work directly from prepared release or `HEAD` release state, orders internal publish-relevant dependencies before dependents, and rejects publish-relevant dependency cycles while allowing development-only cycles.
131
+
132
+ The publish order now works like this:
133
+
134
+ 1. Build the selected publish requests from the prepared release or `HEAD` release state.
135
+ 2. Materialize the workspace dependency graph.
136
+ 3. Consider only dependencies where **both packages are part of the selected publish set**.
137
+ 4. Ignore development dependency edges.
138
+ 5. Topologically sort the publish requests so dependencies are emitted before dependents.
139
+
140
+ So for a tree like:
141
+
142
+ ```text
143
+ core # no dependencies
144
+ utils # depends on core
145
+ api # depends on utils
146
+ app # depends on core, utils, api
147
+ ```
148
+
149
+ the publish order becomes:
150
+
151
+ ```text
152
+ core
153
+ utils
154
+ api
155
+ app
156
+ ```
157
+
158
+ If multiple packages are independent at the same depth, their order is deterministic by package id, registry, and version.
159
+
160
+ A package with no selected dependencies is eligible first. A package is not published until all of its selected publish-relevant dependencies have been ordered before it. Dependencies outside the selected publish set do not block ordering. Development-only cycles are ignored. Runtime, build, peer, workspace, and unknown dependency cycles fail before publishing anything, with a cycle diagnostic.
161
+
162
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #364](https://github.com/monochange/monochange/pull/364) _Introduced in:_ [`67eae95`](https://github.com/monochange/monochange/commit/67eae951e6a35a9b4c7c6489e89cd4779e44234e)
163
+
164
+ #### Make release workspace publishing preserve Cargo verification
165
+
166
+ `monochange_test_helpers` is now publishable so crates that use the shared helpers in their dev-dependencies can still pass Cargo's normal publish verification. `monochange_core` no longer dev-depends on the helper crate: its integration-style discovery filter coverage now lives in the unpublished `monochange_integration_tests` crate, preventing a dependency cycle between the published core crate and the test helper crate.
167
+
168
+ Package publishing keeps Cargo verification enabled and still runs JavaScript registry tooling without inherited `LD_LIBRARY_PATH`, preserving PNPM support while avoiding Nix/devenv library-path leakage into system Node.js launchers.
169
+
170
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #368](https://github.com/monochange/monochange/pull/368) _Introduced in:_ [`b79eef1`](https://github.com/monochange/monochange/commit/b79eef170a01234b69b2b83c8ebd4ef946a079ac)
171
+
172
+ #### Use `GITHUB_TOKEN` for Git Data API to create verified commits
173
+
174
+ The `release-pr` workflow now passes `GITHUB_COMMIT_TOKEN` (set to `secrets.GITHUB_TOKEN`) specifically for Git Database API operations (blob, tree, commit creation, and ref updates). This allows GitHub to automatically sign commits with the `web-flow` GPG key, producing verified commits on release pull requests.
175
+
176
+ The `GH_TOKEN` (PAT) continues to be used for all other GitHub API operations like pull request creation and updates.
177
+
178
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #371](https://github.com/monochange/monochange/pull/371) _Introduced in:_ [`3770b48`](https://github.com/monochange/monochange/commit/3770b48bab6b41c80086a0d3e2e4e6a9a7540c39)
179
+
180
+ ### Other
181
+
182
+ #### Resolve git identity from token for release PR commits
183
+
184
+ The `release-pr` workflow now queries the GitHub API for the authenticated user's `id`, `login`, and `name`, then constructs the standard GitHub noreply email (`{id}+{login}@users.noreply.github.com`) for `git config user.email`. This replaces the previous hardcoded `github-actions[bot]` identity, so release PR commits are properly attributed to the account that owns the `RELEASE_PR_MERGE_TOKEN`.
185
+
186
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #367](https://github.com/monochange/monochange/pull/367) _Introduced in:_ [`920bf04`](https://github.com/monochange/monochange/commit/920bf04ba34aa7050e0dc6a9be5c488c9431d085)
187
+
188
+ #### Use the current monochange CLI when publishing release tags
189
+
190
+ The publish workflow now builds the `mc` binary from the workflow commit before checking out the release tag. Publish jobs still operate on the requested release tag's files and release state, but they execute the current workflow version of `mc` so post-release publishing fixes apply when rerunning publication for an older tag.
191
+
192
+ The workflow keeps full branch and tag history available after switching to the release tag so publish-time release branch reachability checks still work. The release workflow also dispatches `publish.yml` at the current workflow commit, allowing a fixed publish workflow to publish an older release tag.
193
+
194
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #366](https://github.com/monochange/monochange/pull/366) _Introduced in:_ [`9bb5ca9`](https://github.com/monochange/monochange/commit/9bb5ca9ca5315f60a1079a55470f7b77ff8e3ea2) _Related issues:_ [#364](https://github.com/monochange/monochange/issues/364)
195
+
196
+ ## [0.3.0](https://github.com/monochange/monochange/releases/tag/v0.3.0) (2026-04-30)
197
+
198
+ ### Changed
199
+
200
+ #### Configure changeset lint rules
201
+
202
+ Add configurable changeset lint rules under `[lints.rules]` for summaries, section headings, bump-specific requirements, and changelog-type-specific requirements.
203
+
204
+ Rules can target built-in or custom changeset types with dynamic ids like `changesets/types/breaking` and `changesets/types/unicorns`, while unknown type ids are rejected during configuration loading.
205
+
206
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #326](https://github.com/monochange/monochange/pull/326) _Introduced in:_ [`285fd69`](https://github.com/monochange/monochange/commit/285fd697b99502e9d95716413c533251307f0010) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67)
207
+
208
+ #### Document supported ecosystem capabilities
209
+
210
+ The documentation now includes a dedicated ecosystem guide that compares Cargo, npm-family, Deno, Dart / Flutter, and Python support across discovery, manifest updates, lockfile handling, and built-in registry publishing. Python is documented as a supported release-planning ecosystem with uv workspace discovery, Poetry and PEP 621 `pyproject.toml` parsing, Python dependency normalization, manifest version rewrites, internal dependency rewrites, and inferred `uv lock` / `poetry lock --no-update` lockfile commands.
211
+
212
+ The guide also clarifies ecosystem publishing boundaries, including canonical public registry support and the external-mode escape hatch for private registries or custom publication flows.
213
+
214
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #307](https://github.com/monochange/monochange/pull/307) _Introduced in:_ [`11c628c`](https://github.com/monochange/monochange/commit/11c628cd2afb7c9509c31a8cfc043be63a9f2a75) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67)
215
+
216
+ #### Add Go ecosystem support
217
+
218
+ monochange now discovers and manages Go modules from `go.mod` files in single-module and multi-module repositories.
219
+
220
+ **Configuration:**
221
+
222
+ ```toml
223
+ [defaults]
224
+ package_type = "go"
225
+
226
+ [package.api]
227
+ path = "api"
228
+
229
+ [package.shared]
230
+ path = "shared"
231
+
232
+ [ecosystems.go]
233
+ enabled = true
234
+ ```
235
+
236
+ **What it discovers:**
237
+
238
+ - Go modules by scanning for `go.mod` files
239
+ - Multi-module monorepos with separate modules in subdirectories
240
+ - Module paths, including major version suffixes (`/v2`, `/v3`)
241
+ - Cross-module `require` directives as dependency edges
242
+ - Indirect dependencies marked as development dependencies
243
+
244
+ **Version management:**
245
+
246
+ - Go versions come from git tags, not manifest files — the adapter reports `None` for `current_version` and stores the module path as metadata for tag resolution
247
+ - Updates `require` directives in `go.mod` when cross-module dependencies change
248
+ - Preserves `replace`, `exclude`, `retract` directives and comments
249
+ - Adds `v` prefix to version strings automatically when missing
250
+
251
+ **Lockfile commands:**
252
+
253
+ - Infers `go mod tidy` for all Go modules (updates both `go.mod` and `go.sum`)
254
+ - Configurable via `[ecosystems.go].lockfile_commands`
255
+
256
+ **Key design decisions:**
257
+
258
+ - Module names are derived from the last non-version segment of the module path (`github.com/org/repo/api/v2` → `api`)
259
+ - The full module path and relative directory path are stored as metadata for downstream tag resolution
260
+ - Parse errors during discovery are treated as warnings, not hard errors
261
+
262
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #156](https://github.com/monochange/monochange/pull/156) _Introduced in:_ [`519f841`](https://github.com/monochange/monochange/commit/519f841929c6a06d5b3a578b206982d2d6cc1548) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67) _Closed issues:_ [#133](https://github.com/monochange/monochange/issues/133)
263
+
264
+ #### Update repository URLs
265
+
266
+ Update repository references from `ifiokjr/monochange` to `monochange/monochange`.
267
+
268
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #284](https://github.com/monochange/monochange/pull/284) _Introduced in:_ [`021a6cb`](https://github.com/monochange/monochange/commit/021a6cbc86f812a7879b211e83ced5074dccf740) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67)
269
+
270
+ #### Add the publish bootstrap command
271
+
272
+ Add `mc publish-bootstrap --from <ref>` for release-record-scoped first-time package setup.
273
+
274
+ The command uses the release record to choose package ids, runs placeholder publishing for that release package set, supports `--dry-run`, and can write a JSON bootstrap result artifact with `--output <path>`. Documentation now recommends rerunning `mc publish-readiness` after bootstrap before planning or publishing packages.
275
+
276
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #318](https://github.com/monochange/monochange/pull/318) _Introduced in:_ [`cadb6fc`](https://github.com/monochange/monochange/commit/cadb6fccaac2ff9107db8b03bf6156762bc5a9b2) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67)
277
+
278
+ #### Add readiness-backed publish planning
279
+
280
+ `mc publish-plan` now accepts `--readiness <path>` for normal package publish planning. The plan validates that the `mc publish-readiness` artifact matches the current release record and covers the selected package set, then limits rate-limit batches to package ids that are ready in both the artifact and a fresh local readiness check.
281
+
282
+ Placeholder publish planning continues to reject readiness artifacts and should be run with `mc publish-plan --mode placeholder`.
283
+
284
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #305](https://github.com/monochange/monochange/pull/305) _Introduced in:_ [`e80c2b8`](https://github.com/monochange/monochange/commit/e80c2b8f1fd1df155e4aa05df8977f245f89bbc5) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67)
285
+
286
+ #### Add Cargo publish-readiness guards
287
+
288
+ Built-in crates.io publishing now fails readiness before registry mutation when the current `Cargo.toml` is not publishable: `publish = false`, `publish = [...]` without `crates-io`, missing `description`, or missing both `license` and `license-file`.
289
+
290
+ Workspace-inherited Cargo metadata is accepted, and already-published package versions remain non-blocking when the saved readiness artifact still matches current readiness.
291
+
292
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #303](https://github.com/monochange/monochange/pull/303) _Introduced in:_ [`0527e2c`](https://github.com/monochange/monochange/commit/0527e2c253d37ee283b9116e83db2a23b03b42b8) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67)
293
+
294
+ #### Require publish readiness artifacts
295
+
296
+ Require real `mc publish` package-registry runs to pass a readiness artifact generated by `mc publish-readiness`.
297
+
298
+ `mc publish-readiness` JSON artifacts now include schema metadata, release-record commit metadata, and a deterministic package-set fingerprint. `PublishPackages` validates the artifact before registry mutation and rejects missing, blocked, stale, malformed, duplicate, or package-mismatched readiness artifacts while leaving `--dry-run` publish previews artifact-free.
299
+
300
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #301](https://github.com/monochange/monochange/pull/301) _Introduced in:_ [`97337aa`](https://github.com/monochange/monochange/commit/97337aad65e1f9dfc4d97fd381592b3bd57bc30a) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67)
301
+
302
+ #### Harden publish readiness artifact freshness
303
+
304
+ Adds a publish input fingerprint to `mc publish-readiness` artifacts. `mc publish` and readiness-backed `mc publish-plan` now reject artifacts when workspace config, package manifests, lockfiles, or registry/tooling inputs changed after the artifact was written.
305
+
306
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #324](https://github.com/monochange/monochange/pull/324) _Introduced in:_ [`69f221d`](https://github.com/monochange/monochange/commit/69f221dc1f9b4823e8aa98ebdea6b84aaa57baeb) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67)
307
+
308
+ #### Add publish resume support
309
+
310
+ Add package publish result artifacts plus `mc publish --resume <path>` for retrying incomplete registry publishing after partial failures.
311
+
312
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #323](https://github.com/monochange/monochange/pull/323) _Introduced in:_ [`8bca357`](https://github.com/monochange/monochange/commit/8bca35730a78f61c22dc71e473bc67a77210c4c6) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67)
313
+
314
+ #### Consolidate affected-package configuration
315
+
316
+ > **Breaking change** — affected-package policy now lives in `[changesets.affected]`. Configurations using the previous `[changesets.verify]` section must rename it, and configurations using the hosted-source affected-package policy section (`[source.bot.changesets]` in older configs, or `[source.affected]` in prerelease configs) must move `enabled`, `required`, `skip_labels`, `comment_on_failure`, `changed_paths`, and `ignored_paths` into `[changesets.affected]`.
317
+
318
+ Move affected-package policy settings into the changesets configuration:
319
+
320
+ ```toml
321
+ [changesets.affected]
322
+ enabled = true
323
+ required = true
324
+ skip_labels = ["no-changeset-required"]
325
+ comment_on_failure = true
326
+ changed_paths = ["Cargo.toml", "Cargo.lock"]
327
+ ignored_paths = ["**/tests/**"]
328
+ ```
329
+
330
+ The Rust configuration model now exposes `ChangesetSettings::affected` with `ChangesetAffectedSettings`; the previous `ChangesetSettings::verify`, `SourceConfiguration::bot`, `SourceConfiguration::affected`, `ProviderChangesetBotSettings`, `ProviderAffectedSettings`, and `ProviderBotSettings` types or fields have been removed.
331
+
332
+ The `mc affected` policy command now reports `skipped` when it runs on a generated release pull request branch whose name starts with `source.pull_requests.branch_prefix`, allowing CI to ignore those branches.
333
+
334
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #340](https://github.com/monochange/monochange/pull/340) _Introduced in:_ [`d5d8856`](https://github.com/monochange/monochange/commit/d5d8856b1522cd4ad70eeb06abd4d33ad7f0c9b6)
335
+
336
+ #### Document the generated CLI process
337
+
338
+ Document the new CLI process where `mc init` generates editable workflow commands in `monochange.toml` and every built-in step is available directly through immutable `mc step:*` commands. The docs now clarify reserved command names such as `validate` and recommend `mc step:affected-packages --verify` for direct changeset-policy checks.
339
+
340
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #291](https://github.com/monochange/monochange/pull/291) _Introduced in:_ [`74ac16a`](https://github.com/monochange/monochange/commit/74ac16af949ab07644c9b583774a00da2d95a7be) _Last updated in:_ [`b33a82d`](https://github.com/monochange/monochange/commit/b33a82d8e26da20fb2dfbb94bc5f4040c27f2c67)
341
+
342
+ ## [0.2.0](https://github.com/monochange/monochange/releases/tag/v0.2.0) (2026-04-21)
343
+
344
+ ### Added
345
+
346
+ #### add lint include/exclude path filters with optional gitignore override
347
+
348
+ `[lints]` now supports workspace-level path filters for manifest linting.
349
+
350
+ **New options:**
351
+
352
+ - `include` — optional glob patterns that opt manifest paths into linting
353
+ - `exclude` — glob patterns that remove matching manifest paths from linting
354
+ - `disable_gitignore` — opt back into linting gitignored manifests when needed
355
+
356
+ By default, monochange now skips gitignored manifests during linting while still allowing repositories to explicitly opt them back in.
357
+
358
+ The repository config and bundled linting docs now show how to exclude `examples/**` when example manifests would otherwise trigger false positives.
359
+
360
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #248](https://github.com/monochange/monochange/pull/248) _Introduced in:_ [`b45cb78`](https://github.com/monochange/monochange/commit/b45cb787a75746a95799f957f01d92020d27f72f) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
361
+
362
+ ### Changed
363
+
364
+ #### static npm packages in packages/ directory
365
+
366
+ All npm packages now live as static directories under `packages/` instead of being dynamically generated during the release workflow.
367
+
368
+ **Before:**
369
+
370
+ The `@monochange/cli` and platform packages were generated on-the-fly by `build-packages.mjs` into a temporary directory, then published from there. `@monochange/skill` lived in `npm/skill`.
371
+
372
+ **After:**
373
+
374
+ Package directories are permanently present under `packages/` using the `@scope__name` convention:
375
+
376
+ ```
377
+ packages/monochange__cli/ # @monochange/cli
378
+ packages/monochange__cli-darwin-arm64/ # @monochange/cli-darwin-arm64
379
+ packages/monochange__skill/ # @monochange/skill
380
+ ...
381
+ ```
382
+
383
+ `build-packages.mjs` still runs during release to populate platform binaries into `packages/*/bin/`, but it no longer generates the package structure from scratch. `publish-packages.mjs` now validates that each package has the expected binaries before publishing, preventing accidental empty publishes.
384
+
385
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #204](https://github.com/monochange/monochange/pull/204) _Introduced in:_ [`a90638b`](https://github.com/monochange/monochange/commit/a90638b911d0aca00afcda8c5686da46ead14831) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
386
+
387
+ ### Documentation
388
+
389
+ #### add `mc subagents` for repo-local agent generation
390
+
391
+ `monochange` now ships `mc subagents` so repositories can generate repo-local agent definitions for Claude, VS Code, Copilot, Pi, Codex, and Cursor.
392
+
393
+ Before:
394
+
395
+ ```bash
396
+ mc assist pi
397
+ ```
398
+
399
+ After:
400
+
401
+ ```bash
402
+ mc help subagents
403
+ mc subagents pi
404
+ mc subagents --all
405
+ ```
406
+
407
+ Generated agent instructions are now CLI-first and prefer `mc`, then `monochange`, then `npx -y @monochange/cli`, while still generating optional MCP configuration for supported hosts.
408
+
409
+ `monochange_config` now reserves the `subagents` command name so workspace-defined commands cannot shadow the built-in generator.
410
+
411
+ `@monochange/skill` now teaches host agents to use `mc help subagents` / `mc subagents` instead of the removed `mc assist` flow.
412
+
413
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #254](https://github.com/monochange/monochange/pull/254) _Introduced in:_ [`1b2b412`](https://github.com/monochange/monochange/commit/1b2b41237b194c608c3e521daefd3f15c2729f91) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
414
+
415
+ #### Add `mc skill` for project-local monochange skill installation through the upstream `skills add` workflow.
416
+
417
+ Before:
418
+
419
+ ```bash
420
+ npm install -g @monochange/skill
421
+ monochange-skill --copy ~/.pi/agent/skills/monochange
422
+ ```
423
+
424
+ After:
425
+
426
+ ```bash
427
+ mc help skill
428
+ mc skill
429
+ mc skill -a pi -y
430
+ mc skill --list
431
+ ```
432
+
433
+ `mc skill` auto-detects `npx`, `pnpm dlx`, or `bunx`, forwards the remaining native `skills add` flags, and installs the monochange skill source into the current project by default.
434
+
435
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #257](https://github.com/monochange/monochange/pull/257) _Introduced in:_ [`0a6937a`](https://github.com/monochange/monochange/commit/0a6937ac81dadbc6252e5eac60fd692335cee3a5) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
436
+
437
+ #### add changeset cleanup job guide with mc diagnostics workflow
438
+
439
+ Adds a comprehensive "Changeset cleanup job" section to `skills/changesets.md` that teaches agents how to audit, deduplicate, and clean up changesets before release using `mc diagnostics --format json`.
440
+
441
+ **New workflow includes:**
442
+
443
+ - Step-by-step guide using `mc diagnostics --format json` to export changeset data
444
+ - jq filter examples for finding duplicates, short summaries, missing git context
445
+ - Decision matrix for when to merge, remove, or update changesets
446
+ - Concrete bash examples for merging duplicate changesets
447
+ - Validation checklist for pre-release changeset hygiene
448
+
449
+ Updates the root `SKILL.md` reference to highlight "auditing, cleaning up" alongside creation.
450
+
451
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #242](https://github.com/monochange/monochange/pull/242) _Introduced in:_ [`7342723`](https://github.com/monochange/monochange/commit/7342723dc924b9fd4dd0cdf9ca34da9812e83b70) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
452
+
453
+ #### add artifact-type-aware changeset guides and skill package expansion
454
+
455
+ Introduces three new documents to the skill package and shared mdt template blocks for changeset generation rules:
456
+
457
+ - **CHANGESET-GUIDE.md** — lifecycle management guide covering create, update, replace, and remove workflows with decision matrix
458
+ - **ARTIFACT-TYPES.md** — per-type rules for libraries, applications, CLI tools, and LSP/MCP servers, including UX changelog section configuration and screenshot support
459
+ - **`.templates/changeset.t.md`** — shared mdt template blocks for changeset philosophy, artifact tables, lifecycle rules, granularity rules, templates, and MCP tool integration
460
+
461
+ Key additions:
462
+
463
+ - **UX changelog section** (`type: ux`) for applications and websites, with S3-compatible screenshot upload configuration
464
+ - **LSP/MCP artifact type** added to the artifact type table with protocol-focused changeset guidance
465
+ - **`caused_by` frontmatter field** documented for dependency propagation context (replaces automatic "dependency changed → patch" with human-readable explanation)
466
+ - **`bump: none` with `caused_by`** workflow for `mc affected` packages with no meaningful changes
467
+ - Shared blocks propagate to `SKILL.md`, `REFERENCE.md`, and `docs/agents/changeset-generation.md` via `mdt`
468
+
469
+ **Before:** Skill package had only `SKILL.md` and `REFERENCE.md` with no artifact-type differentiation or lifecycle management guidance.
470
+
471
+ **After:** Agents can follow per-type rules, manage changeset lifecycles, configure UX sections with screenshots, and provide dependency propagation context.
472
+
473
+ > _Owner:_ Ifiok Jr. _Introduced in:_ [`36bb233`](https://github.com/monochange/monochange/commit/36bb2338f182c271679bca1ad14bd3a48bbf5f71) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
474
+
475
+ #### add ecosystem-specific semantic analysis for MCP changeset workflows
476
+
477
+ `monochange_analyze_changes` and `monochange_validate_changeset` now return real semantic analysis for Cargo, npm, Deno, and Dart/Flutter packages instead of placeholder results.
478
+
479
+ **Before (`monochange_analyze_changes`):**
480
+
481
+ ```json
482
+ {
483
+ "ok": true,
484
+ "summary": "Analysis complete - review suggested changesets for each package",
485
+ "analysis": {
486
+ "package_changes": {}
487
+ }
488
+ }
489
+ ```
490
+
491
+ **After (`monochange_analyze_changes`):**
492
+
493
+ ```json
494
+ {
495
+ "ok": true,
496
+ "summary": "Analyzed 1 package(s) and found 6 semantic change(s)",
497
+ "analysis": {
498
+ "packageAnalyses": {
499
+ "core": {
500
+ "semanticChanges": [
501
+ {
502
+ "category": "public_api",
503
+ "kind": "modified",
504
+ "itemPath": "greet"
505
+ },
506
+ {
507
+ "category": "dependency",
508
+ "kind": "added",
509
+ "itemPath": "tracing"
510
+ }
511
+ ]
512
+ }
513
+ }
514
+ }
515
+ }
516
+ ```
517
+
518
+ `monochange_validate_changeset` now validates authored changesets against that semantic diff and can flag stale symbol references or underspecified summaries across all supported ecosystems.
519
+
520
+ Current analyzer coverage includes:
521
+
522
+ - Cargo public Rust API diffs plus `Cargo.toml` dependency and manifest metadata changes
523
+ - npm-family JS/TS exported symbol diffs plus `package.json` exports, commands, dependency, and script changes
524
+ - Deno JS/TS exported symbol diffs plus `deno.json` exports, import aliases, task, and compiler-option changes
525
+ - Dart and Flutter public `lib/` API diffs plus `pubspec.yaml` executables, dependency, environment, and plugin-platform changes
526
+
527
+ **Before (`monochange_validate_changeset`):**
528
+
529
+ ```json
530
+ {
531
+ "ok": true,
532
+ "valid": true,
533
+ "issues": []
534
+ }
535
+ ```
536
+
537
+ **After (`monochange_validate_changeset`):**
538
+
539
+ ```json
540
+ {
541
+ "ok": false,
542
+ "valid": false,
543
+ "lifecycle_status": "stale",
544
+ "issues": [
545
+ {
546
+ "severity": "error",
547
+ "message": "changeset references `OldGreeter` but that item was not found in the current semantic diff"
548
+ }
549
+ ]
550
+ }
551
+ ```
552
+
553
+ `monochange_core` now exposes shared semantic-analysis contracts and diff record types so ecosystem crates can own their analyzers without moving parser logic into the CLI crate.
554
+
555
+ `@monochange/skill` now documents the semantic-analysis-backed MCP workflows and the expanded cross-ecosystem validation guidance for assistant consumers.
556
+
557
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #247](https://github.com/monochange/monochange/pull/247) _Introduced in:_ [`8c96c8f`](https://github.com/monochange/monochange/commit/8c96c8f0a3b9d44bf30148b5a83067d7ce3ab62b) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2) _Closed issues:_ [#243](https://github.com/monochange/monochange/issues/243) _Related issues:_ [#244](https://github.com/monochange/monochange/issues/244)
558
+
559
+ #### expand the agent-facing harness around diagnostics, lint metadata, and repo guidance
560
+
561
+ `monochange` now exposes more of its review and planning surface directly through the repo and MCP so assistants can work from structured data instead of shell-only conventions.
562
+
563
+ **Before:**
564
+
565
+ - assistants could call the MCP server for validation, discovery, change creation, release previews, and affected-package checks
566
+ - lint metadata and changeset diagnostics still depended on `mc lint ...` and `mc diagnostics --format json`
567
+ - the repo guidance lived mostly in `AGENTS.md` and scattered docs without a dedicated plans directory or top-level architecture map
568
+
569
+ **After:**
570
+
571
+ - MCP now includes `monochange_diagnostics`, `monochange_lint_catalog`, and `monochange_lint_explain`
572
+ - the packaged skill and assistant setup docs now list the full MCP surface, including semantic analysis tools
573
+ - the repository now keeps an explicit `ARCHITECTURE.md` map plus `docs/plans/` for active plans, completed plans, and tech-debt tracking
574
+ - `docs:check` now verifies that the agent-facing docs stay aligned with the live MCP tool surface, and `lint:architecture` checks that provider/ecosystem dispatch stays inside the documented allowlist
575
+
576
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #251](https://github.com/monochange/monochange/pull/251) _Introduced in:_ [`47847db`](https://github.com/monochange/monochange/commit/47847db5d8e98e9b8284e72e5f94c184473b4ffd) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
577
+
578
+ #### add lint rule documentation
579
+
580
+ Document the mc check command and all available lint rules for Cargo and NPM ecosystems in SKILL.md and REFERENCE.md.
581
+
582
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #207](https://github.com/monochange/monochange/pull/207) _Introduced in:_ [`a650862`](https://github.com/monochange/monochange/commit/a650862f2dc69b6538f6403bab5b66079f9c1304) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
583
+
584
+ #### reorganize bundled skill docs into lowercased skill paths
585
+
586
+ Moves the bundled deep-dive markdown files under `skills/` and lowercases the published markdown filenames so the installable skill has a more consistent layout.
587
+
588
+ **Updated structure includes:**
589
+
590
+ - top-level `SKILL.md` remains the entrypoint
591
+ - deep-dive guides such as `reference.md`, `changeset-guide.md`, `artifact-types.md`, `trusted-publishing.md`, and `multi-package-publishing.md` now live in `skills/`
592
+ - package and example readme files now use lowercase `readme.md`
593
+ - internal links and published package file paths were updated to match the new structure
594
+
595
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #248](https://github.com/monochange/monochange/pull/248) _Introduced in:_ [`b45cb78`](https://github.com/monochange/monochange/commit/b45cb787a75746a95799f957f01d92020d27f72f) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
596
+
597
+ #### document future automation boundaries for manual registries
598
+
599
+ Adds a short roadmap-style section to the trusted-publishing docs describing where monochange may add stronger automation or validation later for `crates.io`, `jsr`, and `pub.dev`.
600
+
601
+ It also makes the current boundary explicit:
602
+
603
+ - npm is still the only registry with built-in trusted-publishing enrollment
604
+ - manual registries remain guidance- and diagnostics-first today
605
+ - registry-side admin or browser-confirmed steps are still treated as manual unless the registry exposes a safer automation path later
606
+
607
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #223](https://github.com/monochange/monochange/pull/223) _Introduced in:_ [`ed2ae40`](https://github.com/monochange/monochange/commit/ed2ae4009e05a761d7abf24b22b65af7415912bc) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
608
+
609
+ #### improve npm and Deno semantic analysis with parser-backed JS/TS export extraction
610
+
611
+ `monochange_analyze_changes` and `monochange_validate_changeset` now use parser-backed JavaScript and TypeScript export extraction for npm and Deno packages instead of relying primarily on line-based export scanning.
612
+
613
+ This improves semantic diff accuracy for cases such as:
614
+
615
+ - multiline named export blocks
616
+ - namespace re-exports like `export * as toolkit from "./toolkit"`
617
+ - anonymous default exports
618
+ - more complex TypeScript and module export syntax
619
+
620
+ The MCP output shape stays the same, but the semantic evidence for npm and Deno packages is now more robust and closer to the actual module structure.
621
+
622
+ This work also extracts the shared JavaScript and TypeScript export-analysis logic into the new `monochange_ecmascript` crate, so npm and Deno keep their ecosystem-specific manifest analysis while reusing one parser-backed module analyzer.
623
+
624
+ The monochange skill documentation now also teaches the new-package rule: the first changeset for a newly introduced published package or crate should use a `major` bump for that new package entry.
625
+
626
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #250](https://github.com/monochange/monochange/pull/250) _Introduced in:_ [`0dd8460`](https://github.com/monochange/monochange/commit/0dd846060614b2de9d3b2dfb5c1337075774b167) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2) _Related issues:_ [#247](https://github.com/monochange/monochange/issues/247), [#249](https://github.com/monochange/monochange/issues/249)
627
+
628
+ #### prefer official trusted-publishing workflows in the packaged skill
629
+
630
+ The packaged skill now explicitly recommends the registry-maintained GitHub publishing workflows for manual trusted-publishing registries.
631
+
632
+ **Updated guidance:**
633
+
634
+ - prefers `rust-lang/crates-io-auth-action@v1` for `crates.io`
635
+ - prefers `dart-lang/setup-dart/.github/workflows/publish.yml@v1` for `pub.dev`
636
+ - clarifies that `mode = "external"` is often the clearest fit when those workflows should own the publish command directly
637
+
638
+ These recommendations were added to the main skill entrypoint, the configuration deep dive, and the packaged trusted-publishing guide.
639
+
640
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #214](https://github.com/monochange/monochange/pull/214) _Introduced in:_ [`8a8a13a`](https://github.com/monochange/monochange/commit/8a8a13a09520f7549ae15204f69bf1e9357d1662) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
641
+
642
+ #### add an adoption playbook and example indexes to the packaged skill
643
+
644
+ The packaged `@monochange/skill` now includes an interactive adoption guide plus bundled example indexes for choosing how deeply to set up monochange.
645
+
646
+ **Before:** The skill explained commands, configuration, linting, and publishing, but it did not give agents a clear question tree for quickstart vs standard vs full vs migration adoption. It also lacked a dedicated examples surface for pointing users at setup patterns.
647
+
648
+ **After:** The package adds `skills/adoption.md`, a bundled `examples/` folder with condensed scenario summaries, and references to a top-level repository `examples/` index for fuller repo-shaped setups.
649
+
650
+ This makes the skill better at plan-mode interrogation, migration guidance, and recommendation-driven setup conversations.
651
+
652
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #241](https://github.com/monochange/monochange/pull/241) _Introduced in:_ [`05c393c`](https://github.com/monochange/monochange/commit/05c393c72ce88b4c4e1eee99858e33ae72554559) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
653
+
654
+ #### add granular changeset generation guidance to the skill package
655
+
656
+ The packaged `@monochange/skill` guidance now teaches agents how to manage changesets as a lifecycle instead of only telling them to create one.
657
+
658
+ **Before:**
659
+
660
+ The skill told agents to use `mc change` and `mc diagnostics`, but it did not explain when to create a new changeset versus updating, replacing, or removing an existing one. It also did not make granular package-centric changesets a first-class rule.
661
+
662
+ **After:**
663
+
664
+ Agents are now instructed to:
665
+
666
+ - review existing `.changeset/*.md` files before writing a new one
667
+ - keep changesets package-centric and split unrelated features apart
668
+ - combine near-duplicate changesets when the outward change is the same across multiple related packages
669
+ - update an existing changeset only when the same feature expands in scope
670
+ - remove stale changesets when a feature is reverted before release
671
+ - dedicate separate changesets to breaking changes with migration guidance
672
+
673
+ **Skill guidance example:**
674
+
675
+ ```markdown
676
+ # Separate unrelated features
677
+
678
+ ---
679
+
680
+ ## core: minor
681
+
682
+ #### add file diff preview
683
+
684
+ ...
685
+
686
+ ---
687
+
688
+ ## core: minor
689
+
690
+ #### add changelog format detection
691
+
692
+ ...
693
+ ```
694
+
695
+ This makes the packaged skill better aligned with monochange's current agent rules for granular, user-facing release notes.
696
+
697
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #205](https://github.com/monochange/monochange/pull/205) _Introduced in:_ [`467fdff`](https://github.com/monochange/monochange/commit/467fdff63ea036ffc0f38f18a62d23723f007740) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
698
+
699
+ #### add modular skill docs and a full linting guide
700
+
701
+ The packaged `@monochange/skill` docs now split the agent guidance into focused deep dives while keeping `REFERENCE.md` at the top level as the high-context reference document.
702
+
703
+ **Before:**
704
+
705
+ The package centered on `SKILL.md` plus a few top-level docs, but it did not have a dedicated `skills/` folder for focused topics and it did not explain the current workspace lint policy rule by rule.
706
+
707
+ **After:**
708
+
709
+ The package now includes:
710
+
711
+ - `skills/changesets.md` for creating and managing `.changeset/*.md` files
712
+ - `skills/commands.md` for choosing the right `mc` command and command flow
713
+ - `skills/configuration.md` for creating and extending `monochange.toml`
714
+ - `skills/linting.md` for the current rust/clippy rules, why they exist, and what changes with and without them
715
+ - updated `SKILL.md` and `REFERENCE.md` links so agents can jump between the concise entrypoint and the deeper reference material
716
+
717
+ **Skill bundle example:**
718
+
719
+ ```text
720
+ SKILL.md
721
+ REFERENCE.md
722
+ skills/
723
+ README.md
724
+ changesets.md
725
+ commands.md
726
+ configuration.md
727
+ linting.md
728
+ ```
729
+
730
+ This makes the published skill package easier to load incrementally while giving agents a much denser reference surface for current monochange features.
731
+
732
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #210](https://github.com/monochange/monochange/pull/210) _Introduced in:_ [`63de80c`](https://github.com/monochange/monochange/commit/63de80c29e46e88271b5dfe91bbf074a6e4c6135) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2) _Related issues:_ [#209](https://github.com/monochange/monochange/issues/209)
733
+
734
+ #### add a multi-package publishing guide to the packaged skill
735
+
736
+ The packaged skill now includes a dedicated `MULTI-PACKAGE-PUBLISHING.md` guide for repositories that publish multiple public packages from one workspace.
737
+
738
+ It explains:
739
+
740
+ - when one shared post-merge `mc publish` job is a good fit
741
+ - when package-specific jobs or fully external workflows are clearer
742
+ - how to keep tags, workflows, environments, and working directories aligned per package
743
+ - when to use package-level publishing overrides in `monochange.toml`
744
+
745
+ The skill `README.md`, `SKILL.md`, `REFERENCE.md`, and `skills/configuration.md` now point agents to the new guide when publishing strategy depends on monorepo shape rather than only on per-registry trusted-publishing setup.
746
+
747
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #219](https://github.com/monochange/monochange/pull/219) _Introduced in:_ [`df07da7`](https://github.com/monochange/monochange/commit/df07da727967a2ef83f1995197c2159024fb46ad) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
748
+
749
+ #### add trusted publishing setup guidance for supported registries
750
+
751
+ The packaged skill now ships a dedicated `TRUSTED-PUBLISHING.md` guide for setting up GitHub-based trusted publishing / OIDC flows across the registries that monochange supports.
752
+
753
+ **Before:** The skill explained that `publish.trusted_publishing = true` existed, but it did not show the exact registry fields or commands needed to finish setup.
754
+
755
+ **After:** The package now includes step-by-step guidance for:
756
+
757
+ - `npm` trusted publishing, including the exact `npm trust github ...` and `pnpm exec npm trust ...` commands that monochange models
758
+ - `crates.io` trusted publishing fields and the `rust-lang/crates-io-auth-action@v1` workflow pattern
759
+ - `jsr` repository linking and GitHub Actions publishing
760
+ - `pub.dev` automated publishing with repository and tag-pattern requirements
761
+
762
+ The skill README, `SKILL.md`, and `REFERENCE.md` also point agents to the new guide when they need secure package-publishing setup details.
763
+
764
+ The mdBook user guide now mirrors that content in a dedicated trusted-publishing chapter so the same setup guidance is available in both the packaged skill and the docs site.
765
+
766
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #211](https://github.com/monochange/monochange/pull/211) _Introduced in:_ [`38fe09f`](https://github.com/monochange/monochange/commit/38fe09f69f31ab268d7adc37889dacb80bfba2b7) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
767
+
768
+ #### refresh crates.io and pub.dev trusted publishing guidance
769
+
770
+ The packaged trusted-publishing guide now includes more complete GitHub/OIDC setup details for `crates.io` and `pub.dev`.
771
+
772
+ **Updated guidance includes:**
773
+
774
+ - crates.io prerequisites, workflow filename handling, environment matching, and the `rust-lang/crates-io-auth-action@v1` release-job pattern
775
+ - crates.io notes about the short-lived publish token flow and first-publish bootstrap requirements
776
+ - pub.dev prerequisites, tag-push-only requirements, recommended reusable `dart-lang/setup-dart` workflow usage, optional GitHub environment hardening, and multi-package repository guidance
777
+
778
+ The mdBook trusted-publishing chapter was updated to mirror the same information.
779
+
780
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #212](https://github.com/monochange/monochange/pull/212) _Introduced in:_ [`c371be8`](https://github.com/monochange/monochange/commit/c371be8864bc87c7454da4471b2a31d53089bb3d) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)
781
+
782
+ ### Changed
783
+
784
+ #### add `caused_by` changeset context for dependency propagation
785
+
786
+ You can now annotate dependency-only follow-up changesets with `caused_by`, use `mc change --caused-by ...` to author them, inspect the linkage in diagnostics output, and suppress matching automatic dependency propagation during release planning.
787
+
788
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #245](https://github.com/monochange/monochange/pull/245) _Introduced in:_ [`8ec612b`](https://github.com/monochange/monochange/commit/8ec612beb9a8b8100037435695826042bc7361c4) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2) _Closed issues:_ [#208](https://github.com/monochange/monochange/issues/208)
789
+
790
+ #### Add advanced Dart workspace and Flutter lint rules.
791
+
792
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #238](https://github.com/monochange/monochange/pull/238) _Introduced in:_ [`acb4faa`](https://github.com/monochange/monochange/commit/acb4faae2361ac75d01f20824ed85259ed5139a0) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2) _Closed issues:_ [#233](https://github.com/monochange/monochange/issues/233)
793
+
794
+ #### add the first Dart lint suite foundation
795
+
796
+ monochange now wires Dart manifests into the ecosystem-owned lint registry and supports scaffolding Dart lint files with `mc lint new dart/<rule-name>`.
797
+
798
+ This foundation change adds:
799
+
800
+ - a new `monochange_dart::lints` module with target collection for `pubspec.yaml`
801
+ - Dart lint suite registration in the `mc lint` and `mc check` command paths
802
+ - Dart lint scaffolding support in `mc lint new`
803
+ - tests covering managed Dart lint target collection and fixture filtering
804
+
805
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #235](https://github.com/monochange/monochange/pull/235) _Introduced in:_ [`5a7a4fe`](https://github.com/monochange/monochange/commit/5a7a4fed84603f51dd5d152d11e739f30dea2b64) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2) _Closed issues:_ [#230](https://github.com/monochange/monochange/issues/230)
806
+
807
+ #### Add Dart SDK constraint and dependency hygiene lint rules.
808
+
809
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #237](https://github.com/monochange/monochange/pull/237) _Introduced in:_ [`1192d15`](https://github.com/monochange/monochange/commit/1192d1576156c89804373f1ea6b69f94d887f255) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2) _Closed issues:_ [#232](https://github.com/monochange/monochange/issues/232)
810
+
811
+ #### centralize manifest lint configuration and split lint suites by ecosystem
812
+
813
+ monochange now configures manifest linting from a top-level `[lints]` section instead of per-ecosystem `[ecosystems.<name>.lints]` tables, and the runtime engine now loads lint suites from ecosystem crates instead of hard-coding Cargo and npm behavior in `monochange_lint`.
814
+
815
+ **Before (`monochange.toml`):**
816
+
817
+ ```toml
818
+ [ecosystems.cargo.lints]
819
+ "cargo/internal-dependency-workspace" = "error"
820
+
821
+ [ecosystems.npm.lints]
822
+ "npm/workspace-protocol" = "error"
823
+ ```
824
+
825
+ **After:**
826
+
827
+ ```toml
828
+ [lints]
829
+ use = ["cargo/recommended", "npm/recommended"]
830
+
831
+ [lints.rules]
832
+ "cargo/internal-dependency-workspace" = "error"
833
+ "npm/workspace-protocol" = "error"
834
+
835
+ [[lints.scopes]]
836
+ name = "published cargo packages"
837
+ match = { ecosystems = ["cargo"], managed = true, publishable = true }
838
+ rules = { "cargo/required-package-fields" = "error" }
839
+ ```
840
+
841
+ **New CLI surface:**
842
+
843
+ ```bash
844
+ # before
845
+ mc check --ecosystem cargo --format json
846
+
847
+ # after
848
+ mc check --ecosystem cargo --only cargo/internal-dependency-workspace --format json
849
+ mc lint list
850
+ mc lint explain cargo/internal-dependency-workspace
851
+ mc lint new cargo/no-path-dependencies
852
+ ```
853
+
854
+ **Library-facing changes:**
855
+
856
+ ```rust
857
+ // before
858
+ let configuration = load_workspace_configuration(root)?;
859
+ let cargo_rules = configuration.cargo.lints.clone();
860
+
861
+ // after
862
+ let configuration = load_workspace_configuration(root)?;
863
+ let lint_settings = configuration.lints.clone();
864
+ ```
865
+
866
+ ```rust
867
+ // new shared contracts in monochange_core::lint
868
+ pub trait LintSuite: Send + Sync {
869
+ fn suite_id(&self) -> &'static str;
870
+ fn rules(&self) -> Vec<Box<dyn LintRuleRunner>>;
871
+ fn presets(&self) -> Vec<LintPreset>;
872
+ fn collect_targets(
873
+ &self,
874
+ workspace_root: &Path,
875
+ configuration: &WorkspaceConfiguration,
876
+ ) -> MonochangeResult<Vec<LintTarget>>;
877
+ }
878
+ ```
879
+
880
+ This release also adds two new support crates:
881
+
882
+ - `monochange_linting` — authoring helpers for lint-rule metadata and suite construction
883
+ - `monochange_lint_testing` — snapshot-friendly helpers for lint reports and autofix output
884
+
885
+ The Cargo and npm suites now live in `monochange_cargo::lints` and `monochange_npm::lints`, so ecosystem-specific parsing and rule behavior stay with their ecosystem adapters.
886
+
887
+ > _Owner:_ [@ifiokjr](https://github.com/ifiokjr) _Review:_ [PR #228](https://github.com/monochange/monochange/pull/228) _Introduced in:_ [`94f06a0`](https://github.com/monochange/monochange/commit/94f06a057150d26e5f330e2e49a08f71eb12fc92) _Last updated in:_ [`2bd10ab`](https://github.com/monochange/monochange/commit/2bd10abcd34e0eca9f75cebdfafdf6347dc84ca2)