diff --git a/.github/release-please-config.json b/.github/release-please-config.json index 65affef..931fe9a 100644 --- a/.github/release-please-config.json +++ b/.github/release-please-config.json @@ -5,7 +5,7 @@ ".": { "release-type": "simple", "package-name": "cli", - "changelog-path": "CHANGELOG.md", + "skip-changelog": true, "extra-files": [ { "type": "json", @@ -17,7 +17,7 @@ "plugins/compound-engineering": { "release-type": "simple", "package-name": "compound-engineering", - "changelog-path": "../../CHANGELOG.md", + "skip-changelog": true, "extra-files": [ { "type": "json", @@ -34,7 +34,7 @@ "plugins/coding-tutor": { "release-type": "simple", "package-name": "coding-tutor", - "changelog-path": "../../CHANGELOG.md", + "skip-changelog": true, "extra-files": [ { "type": "json", @@ -51,7 +51,7 @@ ".claude-plugin": { "release-type": "simple", "package-name": "marketplace", - "changelog-path": "../CHANGELOG.md", + "skip-changelog": true, "extra-files": [ { "type": "json", diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index 3dfa933..2c2b3fe 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -39,7 +39,7 @@ jobs: - name: Maintain release PR id: release - uses: googleapis/release-please-action@v4 + uses: googleapis/release-please-action@v4.4.0 with: token: ${{ secrets.GITHUB_TOKEN }} config-file: .github/release-please-config.json diff --git a/AGENTS.md b/AGENTS.md index 00ab95c..a82b3c0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -22,7 +22,7 @@ bun run release:validate # check plugin/marketplace consistency - **Branching:** Create a feature branch for any non-trivial change. If already on the correct branch for the task, keep using it; do not create additional branches or worktrees unless explicitly requested. - **Safety:** Do not delete or overwrite user data. Avoid destructive commands. - **Testing:** Run `bun test` after changes that affect parsing, conversion, or output. -- **Release versioning:** Releases are prepared by release automation, not normal feature PRs. The repo now has multiple release components (`cli`, `compound-engineering`, `coding-tutor`, `marketplace`) and one canonical root `CHANGELOG.md`. Use conventional titles such as `feat:` and `fix:` so release automation can classify change intent, but do not hand-bump release-owned versions or changelog entries in routine PRs. +- **Release versioning:** Releases are prepared by release automation, not normal feature PRs. The repo now has multiple release components (`cli`, `compound-engineering`, `coding-tutor`, `marketplace`). GitHub release PRs and GitHub Releases are the canonical release-notes surface for new releases; root `CHANGELOG.md` is only a pointer to that history. Use conventional titles such as `feat:` and `fix:` so release automation can classify change intent, but do not hand-bump release-owned versions or hand-author release notes in routine PRs. - **Output Paths:** Keep OpenCode output at `opencode.json` and `.opencode/{agents,skills,plugins}`. For OpenCode, command go to `~/.config/opencode/commands/.md`; `opencode.json` is deep-merged (never overwritten wholesale). - **ASCII-first:** Use ASCII unless the file already contains Unicode. @@ -53,7 +53,7 @@ When changing `plugins/compound-engineering/` content: - Update substantive docs like `plugins/compound-engineering/README.md` when the plugin behavior, inventory, or usage changes. - Do not hand-bump release-owned versions in plugin or marketplace manifests. -- Do not hand-add canonical release entries to the root `CHANGELOG.md`. +- Do not hand-add release entries to `CHANGELOG.md` or treat it as the canonical source for new releases. - Run `bun run release:validate` if agents, commands, skills, MCP servers, or release-owned descriptions/counts may have changed. Useful validation commands: diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b20f08..07fb63b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,356 +1,14 @@ # Changelog -This is the canonical changelog for the repository. +Release notes now live in GitHub Releases for this repository: -Historical entries below reflect the older repo-wide release model. After the release-please migration cutover, new entries are written here as component-scoped headings such as `compound-engineering vX.Y.Z - YYYY-MM-DD` and `cli vX.Y.Z - YYYY-MM-DD`. +https://github.com/EveryInc/compound-engineering-plugin/releases -All notable changes to the `@every-env/compound-plugin` CLI tool and other release-owned repo components will be documented in this file. +Multi-component releases are published under component-specific tags such as: -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +- `cli-vX.Y.Z` +- `compound-engineering-vX.Y.Z` +- `coding-tutor-vX.Y.Z` +- `marketplace-vX.Y.Z` -Historical release numbering below follows the older repository `v*` tag line. Older entries remain intact for continuity. - -# [2.42.0](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.41.1...v2.42.0) (2026-03-17) - - -### Bug Fixes - -* add disable-model-invocation to beta skills and refine descriptions ([72d4b0d](https://github.com/EveryInc/compound-engineering-plugin/commit/72d4b0dfd231d48f63bdf222b07d37ecc5456004)) -* beta skill naming, plan file suffixes, and promotion checklist ([ac53635](https://github.com/EveryInc/compound-engineering-plugin/commit/ac53635737854c5dd30f8ce083d8a6c6cdfbee99)) -* preserve skill-style document-review handoffs ([b2b23dd](https://github.com/EveryInc/compound-engineering-plugin/commit/b2b23ddbd336b1da072ede6a728d2c472c39da80)) -* review fixes — stale refs, skill counts, and validation guidance ([a83e11e](https://github.com/EveryInc/compound-engineering-plugin/commit/a83e11e982e1b5b0b264b6ab63bc74e3a50f7c28)) - - -### Features - -* add ce:plan-beta and deepen-plan-beta as standalone beta skills ([ad53d3d](https://github.com/EveryInc/compound-engineering-plugin/commit/ad53d3d657ec73712c934b13fa472f8566fbe88f)) -* align ce-plan question tool guidance ([df4c466](https://github.com/EveryInc/compound-engineering-plugin/commit/df4c466b42a225f0f227a307792d387c21944983)) -* rewrite ce:plan to separate planning from implementation ([38a47b1](https://github.com/EveryInc/compound-engineering-plugin/commit/38a47b11cae60c0a0baa308ca7b1617685bcf8cf)) -* teach ce:work to consume decision-first plans ([859ef60](https://github.com/EveryInc/compound-engineering-plugin/commit/859ef601b2908437478c248a204a50b20c832b7e)) - -## [2.41.1](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.41.0...v2.41.1) (2026-03-17) - - -### Bug Fixes - -* sync plugin version to 2.41.0 and correct skill counts ([5bc3a0f](https://github.com/EveryInc/compound-engineering-plugin/commit/5bc3a0f469acd6be8100e3ecca7bc9f7e5512af5)) - -# [2.41.0](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.40.3...v2.41.0) (2026-03-17) - - -### Bug Fixes - -* tune ce:ideate volume model and presentation format ([3023bfc](https://github.com/EveryInc/compound-engineering-plugin/commit/3023bfc8c1ffba3130db1d53752ba0246866625d)) - - -### Features - -* add issue-grounded ideation mode to ce:ideate ([0fc6717](https://github.com/EveryInc/compound-engineering-plugin/commit/0fc6717542f05e990becb5f5674411efc8a6a710)) -* refine ce:ideate skill with per-agent volume model and cross-cutting synthesis ([b762c76](https://github.com/EveryInc/compound-engineering-plugin/commit/b762c7647cffb9a6a1ba27bc439623f59b088ec9)) - -## [2.40.3](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.40.2...v2.40.3) (2026-03-17) - - -### Bug Fixes - -* research agents prefer native tools over shell for repo exploration ([b290690](https://github.com/EveryInc/compound-engineering-plugin/commit/b2906906555810fca176fa4e0153bf080446c486)) - -## [2.40.2](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.40.1...v2.40.2) (2026-03-17) - - -### Bug Fixes - -* harden codex copied skill rewriting ([#285](https://github.com/EveryInc/compound-engineering-plugin/issues/285)) ([6f561f9](https://github.com/EveryInc/compound-engineering-plugin/commit/6f561f94b4397ca6df2ab163e6f1253817bd7cea)) - -## [2.40.1](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.40.0...v2.40.1) (2026-03-17) - - -### Bug Fixes - -* **kiro:** parse .mcp.json wrapper key and support remote MCP servers ([#259](https://github.com/EveryInc/compound-engineering-plugin/issues/259)) ([dfff20e](https://github.com/EveryInc/compound-engineering-plugin/commit/dfff20e1adab891b4645a53d0581d4b20577e3f1)) - -# [2.40.0](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.39.0...v2.40.0) (2026-03-17) - - -### Features - -* specific model/harness/version in PR attribution ([#283](https://github.com/EveryInc/compound-engineering-plugin/issues/283)) ([fdbd584](https://github.com/EveryInc/compound-engineering-plugin/commit/fdbd584bac40ca373275b1b339ab81db65ac0958)) - -# [2.39.0](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.38.0...v2.39.0) (2026-03-16) - - -### Bug Fixes - -* drop 'CLI' suffix from Codex and Gemini platform names ([ec8d685](https://github.com/EveryInc/compound-engineering-plugin/commit/ec8d68580f3da65852e72c127cccc6e66326369b)) -* make brainstorm handoff auto-chain and cross-platform ([637653d](https://github.com/EveryInc/compound-engineering-plugin/commit/637653d2edf89c022b9e312ea02c0ac1a305d741)) -* restore 'wait for the user's reply' fallback language ([fca3a40](https://github.com/EveryInc/compound-engineering-plugin/commit/fca3a4019c55c76b9f1ad326cc3d284f5007b8f4)) - - -### Features - -* add leverage check to brainstorm skill ([0100245](https://github.com/EveryInc/compound-engineering-plugin/commit/01002450cd077b800a917625c5eb6d12da061d0b)) -* instruct brainstorm skill to use platform blocking question tools ([d2c4cee](https://github.com/EveryInc/compound-engineering-plugin/commit/d2c4cee6f9774a5fb2c8ca325c389dadb4a72b1c)) -* refactor brainstorm skill into requirements-first workflow ([4d80a59](https://github.com/EveryInc/compound-engineering-plugin/commit/4d80a59e51b4b2e99ff8c2443e2a1b039d7475c9)) - -# [2.38.0](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.37.1...v2.38.0) (2026-03-16) - - -### Bug Fixes - -* **skill:** align compound-refresh question tool guidance ([c2582fa](https://github.com/EveryInc/compound-engineering-plugin/commit/c2582fab675fe1571f32730634e66411aadc1820)) -* **skills:** allow direct commit on main as non-default option ([0c333b0](https://github.com/EveryInc/compound-engineering-plugin/commit/0c333b08c9369d359613d030aba0fe16e929a665)) -* **skills:** autonomous mode adapts to available permissions ([684814d](https://github.com/EveryInc/compound-engineering-plugin/commit/684814d9514a72c59da4d8f309f73ff0f7661d58)) -* **skills:** enforce branch creation when committing on main ([6969014](https://github.com/EveryInc/compound-engineering-plugin/commit/696901453212aa43cff2400a75cfc6629e79939e)) -* **skills:** enforce full report output in autonomous mode ([2ae6fc4](https://github.com/EveryInc/compound-engineering-plugin/commit/2ae6fc44580093ff6162fcb48145901a54138e9f)) -* **skills:** improve ce:compound-refresh interaction and auto-archive behavior ([0dff943](https://github.com/EveryInc/compound-engineering-plugin/commit/0dff9431ceec8a24e576712c48198e8241c24752)) -* **skills:** include tool constraint in subagent task prompts ([db8c84a](https://github.com/EveryInc/compound-engineering-plugin/commit/db8c84acb4f72c4ce3e1612365ff912fdfe3cea1)) -* **skills:** prevent auto-archive when problem domain is still active ([4201361](https://github.com/EveryInc/compound-engineering-plugin/commit/42013612bde6e13152ade806ba7f861ce5d38e03)) -* **skills:** remove prescriptive branch naming in compound-refresh ([e3e7748](https://github.com/EveryInc/compound-engineering-plugin/commit/e3e7748c564a24e74d86fdf847dd499284404cc8)) -* **skills:** require specific branch names based on what was refreshed ([b7e4391](https://github.com/EveryInc/compound-engineering-plugin/commit/b7e43910fb1a2173e857c4c6b7fa6af9f9ca1be7)) -* **skills:** specify markdown format for autonomous report output ([c271bd4](https://github.com/EveryInc/compound-engineering-plugin/commit/c271bd4729793de8f3ec2e47dd5fe3e8de65c305)) -* **skills:** steer compound-refresh subagents toward file tools over shell commands ([187571c](https://github.com/EveryInc/compound-engineering-plugin/commit/187571ce97ca8c840734b4677cceb0a4c37c84bb)) -* **skills:** strengthen autonomous mode to prevent blocking on user input ([d3aff58](https://github.com/EveryInc/compound-engineering-plugin/commit/d3aff58d9e48c44266f09cf765d85b41bf95a110)) -* **skills:** use actual branch name in commit options instead of 'this branch' ([a47f7d6](https://github.com/EveryInc/compound-engineering-plugin/commit/a47f7d67a25ff23ce8c2bb85e92fdce85bed3982)) - - -### Features - -* **skills:** add autonomous mode to ce:compound-refresh ([699f484](https://github.com/EveryInc/compound-engineering-plugin/commit/699f484033f3c895c35fea49e147dd1742bc3d43)) -* **skills:** add ce:compound-refresh skill for learning and pattern maintenance ([bd3088a](https://github.com/EveryInc/compound-engineering-plugin/commit/bd3088a851a3dec999d13f2f78951dfed5d9ac8c)) -* **skills:** add Phase 5 commit workflow to ce:compound-refresh ([d4c12c3](https://github.com/EveryInc/compound-engineering-plugin/commit/d4c12c39fd04526c05cf484a512f9f73e91f5c3d)) -* **skills:** add smart triage, drift classification, and replacement subagents to ce:compound-refresh ([95ad09d](https://github.com/EveryInc/compound-engineering-plugin/commit/95ad09d3e7d96367324c6ec7a10767e51d5788e8)) - -## [2.37.1](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.37.0...v2.37.1) (2026-03-16) - - -### Bug Fixes - -* **compound:** remove overly defensive context budget precheck ([#278](https://github.com/EveryInc/compound-engineering-plugin/issues/278)) ([#279](https://github.com/EveryInc/compound-engineering-plugin/issues/279)) ([84ca52e](https://github.com/EveryInc/compound-engineering-plugin/commit/84ca52efdb198c7c8ae6c94ca06fc02d2c3ef648)) - -# [2.37.0](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.36.5...v2.37.0) (2026-03-15) - - -### Features - -* sync agent-browser skill with upstream vercel-labs/agent-browser ([24860ec](https://github.com/EveryInc/compound-engineering-plugin/commit/24860ec3f1f1e7bfdee0f4408636ada1a3bb8f75)) - -## [2.36.5](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.36.4...v2.36.5) (2026-03-15) - - -### Bug Fixes - -* **create-agent-skills:** remove literal dynamic context directives that break skill loading ([4b4d1ae](https://github.com/EveryInc/compound-engineering-plugin/commit/4b4d1ae2707895d6d4fd2e60a64d83ca50f094a6)), closes [anthropics/claude-code#27149](https://github.com/anthropics/claude-code/issues/27149) [#13655](https://github.com/EveryInc/compound-engineering-plugin/issues/13655) - -## [2.36.4](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.36.3...v2.36.4) (2026-03-14) - - -### Bug Fixes - -* **skills:** use fully-qualified agent namespace in Task invocations ([026602e](https://github.com/EveryInc/compound-engineering-plugin/commit/026602e6247d63a83502b80e72cd318232a06af7)), closes [#251](https://github.com/EveryInc/compound-engineering-plugin/issues/251) - -## [2.36.3](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.36.2...v2.36.3) (2026-03-13) - - -### Bug Fixes - -* **targets:** nest colon-separated command names into directories ([a84682c](https://github.com/EveryInc/compound-engineering-plugin/commit/a84682cd35e94b0408f6c6a990af0732c2acf03f)), closes [#226](https://github.com/EveryInc/compound-engineering-plugin/issues/226) - -## [2.36.2](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.36.1...v2.36.2) (2026-03-13) - - -### Bug Fixes - -* **plan:** remove deprecated /technical_review references ([0ab9184](https://github.com/EveryInc/compound-engineering-plugin/commit/0ab91847f278efba45477462d8e93db5f068e058)), closes [#244](https://github.com/EveryInc/compound-engineering-plugin/issues/244) - -## [2.36.1](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.36.0...v2.36.1) (2026-03-13) - - -### Bug Fixes - -* **agents:** update learnings-researcher model from haiku to inherit ([30852b7](https://github.com/EveryInc/compound-engineering-plugin/commit/30852b72937091b0a85c22b7c8c45d513ab49fd1)), closes [#249](https://github.com/EveryInc/compound-engineering-plugin/issues/249) - -# [2.36.0](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.35.0...v2.36.0) (2026-03-11) - - -### Bug Fixes - -* **hooks:** wrap PreToolUse handlers in try-catch to prevent parallel tool call crashes ([598222e](https://github.com/EveryInc/compound-engineering-plugin/commit/598222e11cb2206a2e3347cb5dd38cacdc3830df)), closes [#85](https://github.com/EveryInc/compound-engineering-plugin/issues/85) -* **install:** merge config instead of overwriting on opencode target ([1db7680](https://github.com/EveryInc/compound-engineering-plugin/commit/1db76800f91fefcc1bb9c1798ef273ddd0b65f5c)), closes [#125](https://github.com/EveryInc/compound-engineering-plugin/issues/125) -* **review:** add serial mode to prevent context limit crashes ([d96671b](https://github.com/EveryInc/compound-engineering-plugin/commit/d96671b9e9ecbe417568b2ce7f7fa4d379c2bec2)), closes [#166](https://github.com/EveryInc/compound-engineering-plugin/issues/166) - - -### Features - -* **compound:** add context budget precheck and compact-safe mode ([c4b1358](https://github.com/EveryInc/compound-engineering-plugin/commit/c4b13584312058cb8db3ad0f25674805bbb91b2d)), closes [#198](https://github.com/EveryInc/compound-engineering-plugin/issues/198) -* **plan:** add daily sequence number to plan filenames ([e94ca04](https://github.com/EveryInc/compound-engineering-plugin/commit/e94ca0409671efcfa2d4a8fcb2d60b79a848fd85)), closes [#135](https://github.com/EveryInc/compound-engineering-plugin/issues/135) -* **plugin:** release v2.39.0 with community contributions ([d2ab6c0](https://github.com/EveryInc/compound-engineering-plugin/commit/d2ab6c076882a4dacaa787c0a6f3c9d555d38af0)) - -# [2.35.0](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.34.7...v2.35.0) (2026-03-10) - - -### Bug Fixes - -* **test-browser:** detect dev server port from project config ([94aedd5](https://github.com/EveryInc/compound-engineering-plugin/commit/94aedd5a7b6da4ce48de994b5a137953c0fd21c3)), closes [#164](https://github.com/EveryInc/compound-engineering-plugin/issues/164) - - -### Features - -* **compound:** add context budget precheck and compact-safe mode ([7266062](https://github.com/EveryInc/compound-engineering-plugin/commit/726606286873c4059261a8c5f1b75c20fe11ac77)), closes [#198](https://github.com/EveryInc/compound-engineering-plugin/issues/198) -* **plan:** add daily sequence number to plan filenames ([4fc6ddc](https://github.com/EveryInc/compound-engineering-plugin/commit/4fc6ddc5db3e2b4b398c0ffa0c156e1177b35d05)), closes [#135](https://github.com/EveryInc/compound-engineering-plugin/issues/135) - -## [2.34.7](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.34.6...v2.34.7) (2026-03-10) - - -### Bug Fixes - -* **test-browser:** detect dev server port from project config ([50cb89e](https://github.com/EveryInc/compound-engineering-plugin/commit/50cb89efde7cee7d6dcd42008e6060e1bec44fcc)), closes [#164](https://github.com/EveryInc/compound-engineering-plugin/issues/164) - -## [2.34.6](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.34.5...v2.34.6) (2026-03-10) - - -### Bug Fixes - -* **mcp:** add API key auth support for Context7 server ([c649cfc](https://github.com/EveryInc/compound-engineering-plugin/commit/c649cfc17f895b58babf737dfdec2f6cc391e40a)), closes [#153](https://github.com/EveryInc/compound-engineering-plugin/issues/153) - -## [2.34.5](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.34.4...v2.34.5) (2026-03-10) - - -### Bug Fixes - -* **lfg:** enforce plan phase with explicit step gating ([b07f43d](https://github.com/EveryInc/compound-engineering-plugin/commit/b07f43ddf59cd7f2fe54b2e0a00d2b5b508b7f11)), closes [#227](https://github.com/EveryInc/compound-engineering-plugin/issues/227) - -## [2.34.4](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.34.3...v2.34.4) (2026-03-04) - - -### Bug Fixes - -* **openclaw:** emit empty configSchema in plugin manifests ([4e9899f](https://github.com/EveryInc/compound-engineering-plugin/commit/4e9899f34693711b8997cf73eaa337f0da2321d6)), closes [#224](https://github.com/EveryInc/compound-engineering-plugin/issues/224) - -## [2.34.3](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.34.2...v2.34.3) (2026-03-03) - - -### Bug Fixes - -* **release:** keep changelog header stable ([2fd29ff](https://github.com/EveryInc/compound-engineering-plugin/commit/2fd29ff6ed99583a8539b7a1e876194df5b18dd6)) - -## [2.34.2](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.34.1...v2.34.2) (2026-03-03) - -### Bug Fixes - -* **release:** add package repository metadata ([eab77bc](https://github.com/EveryInc/compound-engineering-plugin/commit/eab77bc5b5361dc73e2ec8aa4678c8bb6114f6e7)) - -## [2.34.1](https://github.com/EveryInc/compound-engineering-plugin/compare/v2.34.0...v2.34.1) (2026-03-03) - -### Bug Fixes - -* **release:** align cli versioning with repo tags ([7c58eee](https://github.com/EveryInc/compound-engineering-plugin/commit/7c58eeeec6cf33675cbe2b9639c7d69b92ecef60)) - -## [2.34.0] - 2026-03-03 - -### Added - -- **Sync parity across supported providers** — `sync` now uses a shared target registry and supports MCP sync for Codex, Droid, Gemini, Copilot, Pi, Windsurf, Kiro, and Qwen, with OpenClaw kept validation-gated for skills-only sync. -- **Personal command sync** — Personal Claude commands from `~/.claude/commands/` now sync into provider-native command surfaces, including Codex prompts and generated skills, Gemini TOML commands, OpenCode command markdown, Windsurf workflows, and converted skills where that is the closest available equivalent. - -### Changed - -- **Global user config targets** — Copilot sync now writes to `~/.copilot/` and Gemini sync writes to `~/.gemini/`, matching current documented user-level config locations. -- **Gemini skill deduplication** — Gemini sync now avoids mirroring skills that Gemini already resolves from `~/.agents/skills`, preventing duplicate skill conflict warnings after sync. - -### Fixed - -- **Safe skill sync replacement** — When a real directory already exists at a symlink target (for example `~/.config/opencode/skills/proof`), sync now logs a warning and skips instead of throwing an error. - ---- - -## [0.12.0] - 2026-03-01 - -### Added - -- **Auto-detect install targets** — `install --to all` and `convert --to all` auto-detect installed AI coding tools and install to all of them in one command -- **Gemini sync** — `sync --target gemini` symlinks personal skills to `.gemini/skills/` and merges MCP servers into `.gemini/settings.json` -- **Sync all targets** — `sync --target all` syncs personal config to all detected tools -- **Tool detection utility** — Checks config directories for OpenCode, Codex, Droid, Cursor, Pi, and Gemini - ---- - -## [0.11.0] - 2026-03-01 - -### Added - -- **OpenClaw target** — `--to openclaw` converts plugins to OpenClaw format. Agents become `.md` files, commands become `.md` files, pass-through skills copy unchanged, and MCP servers are written to `openclaw-extension.json`. Output goes to `~/.openclaw/extensions//` by default. Use `--openclaw-home` to override. ([#217](https://github.com/EveryInc/compound-engineering-plugin/pull/217)) — thanks [@TrendpilotAI](https://github.com/TrendpilotAI)! -- **Qwen Code target** — `--to qwen` converts plugins to Qwen Code extension format. Agents become `.yaml` files with Qwen-compatible fields, commands become `.md` files, MCP servers write to `qwen-extension.json`, and a `QWEN.md` context file is generated. Output goes to `~/.qwen/extensions//` by default. Use `--qwen-home` to override. ([#220](https://github.com/EveryInc/compound-engineering-plugin/pull/220)) — thanks [@rlam3](https://github.com/rlam3)! -- **Windsurf target** — `--to windsurf` converts plugins to Windsurf format. Claude agents become Windsurf skills (`skills/{name}/SKILL.md`), commands become flat workflows (`global_workflows/{name}.md` for global scope, `workflows/{name}.md` for workspace), and pass-through skills copy unchanged. MCP servers write to `mcp_config.json` (machine-readable, merged with existing config). ([#202](https://github.com/EveryInc/compound-engineering-plugin/pull/202)) — thanks [@rburnham52](https://github.com/rburnham52)! -- **Global scope support** — New `--scope global|workspace` flag (generic, Windsurf as first adopter). `--to windsurf` defaults to global scope (`~/.codeium/windsurf/`), making installed skills, workflows, and MCP servers available across all projects. Use `--scope workspace` for project-level `.windsurf/` output. -- **`mcp_config.json` integration** — Windsurf converter writes proper machine-readable MCP config supporting stdio, Streamable HTTP, and SSE transports. Merges with existing config (user entries preserved, plugin entries take precedence). Written with `0o600` permissions. -- **Shared utilities** — Extracted `resolveTargetOutputRoot` to `src/utils/resolve-output.ts` and `hasPotentialSecrets` to `src/utils/secrets.ts` to eliminate duplication. - -### Fixed - -- **OpenClaw code injection** — `generateEntryPoint` now uses `JSON.stringify()` for all string interpolation (was escaping only `"`, leaving `\n`/`\\` unguarded). -- **Qwen `plugin.manifest.name`** — context file header was `# undefined` due to using `plugin.name` (which doesn't exist on `ClaudePlugin`); fixed to `plugin.manifest.name`. -- **Qwen remote MCP servers** — curl fallback removed; HTTP/SSE servers are now skipped with a warning (Qwen only supports stdio transport). -- **`--openclaw-home` / `--qwen-home` CLI flags** — wired through to `resolveTargetOutputRoot` so custom home directories are respected. - ---- - -## [0.9.1] - 2026-02-20 - -### Changed - -- **Remove docs/reports and docs/decisions directories** — only `docs/plans/` is retained as living documents that track implementation progress -- **OpenCode commands as Markdown** — commands are now `.md` files with deep-merged config, permissions default to none ([#201](https://github.com/EveryInc/compound-engineering-plugin/pull/201)) — thanks [@0ut5ider](https://github.com/0ut5ider)! -- **Fix changelog GitHub link** ([#215](https://github.com/EveryInc/compound-engineering-plugin/pull/215)) — thanks [@XSAM](https://github.com/XSAM)! -- **Update Claude Code install command in README** ([#218](https://github.com/EveryInc/compound-engineering-plugin/pull/218)) — thanks [@ianguelman](https://github.com/ianguelman)! - ---- - -## [0.9.0] - 2026-02-17 - -### Added - -- **Kiro CLI target** — `--to kiro` converts plugins to `.kiro/` format with custom agent JSON configs, prompt files, skills, steering files, and `mcp.json`. Only stdio MCP servers are supported ([#196](https://github.com/EveryInc/compound-engineering-plugin/pull/196)) — thanks [@krthr](https://github.com/krthr)! - ---- - -## [0.8.0] - 2026-02-17 - -### Added - -- **GitHub Copilot target** — `--to copilot` converts plugins to `.github/` format with `.agent.md` files, `SKILL.md` skills, and `copilot-mcp-config.json`. Also supports `sync --target copilot` ([#192](https://github.com/EveryInc/compound-engineering-plugin/pull/192)) — thanks [@brayanjuls](https://github.com/brayanjuls)! -- **Native Cursor plugin support** — Cursor now installs via `/add-plugin compound-engineering` using Cursor's native plugin system instead of CLI conversion ([#184](https://github.com/EveryInc/compound-engineering-plugin/pull/184)) — thanks [@ericzakariasson](https://github.com/ericzakariasson)! - -### Removed - -- Cursor CLI conversion target (`--to cursor`) — replaced by native Cursor plugin install - ---- - -## [0.6.0] - 2026-02-12 - -### Added - -- **Droid sync target** — `sync --target droid` symlinks personal skills to `~/.factory/skills/` -- **Cursor sync target** — `sync --target cursor` symlinks skills to `.cursor/skills/` and merges MCP servers into `.cursor/mcp.json` -- **Pi target** — First-class `--to pi` converter with MCPorter config and subagent compatibility ([#181](https://github.com/EveryInc/compound-engineering-plugin/pull/181)) — thanks [@gvkhosla](https://github.com/gvkhosla)! - -### Fixed - -- **Bare Claude model alias resolution** — Fixed OpenCode converter not resolving bare model aliases like `claude-sonnet-4-5-20250514` ([#182](https://github.com/EveryInc/compound-engineering-plugin/pull/182)) — thanks [@waltbeaman](https://github.com/waltbeaman)! - -### Changed - -- Extracted shared `expandHome` / `resolveTargetHome` helpers to `src/utils/resolve-home.ts`, removing duplication across `convert.ts`, `install.ts`, and `sync.ts` - ---- - -## [0.5.2] - 2026-02-09 - -### Fixed - -- Fix cursor install defaulting to cwd instead of opencode config dir - -## [0.5.1] - 2026-02-08 - -- Initial npm publish +Do not add new release entries here. New release notes are managed by release automation in GitHub. diff --git a/docs/solutions/adding-converter-target-providers.md b/docs/solutions/adding-converter-target-providers.md index 8936f55..0555544 100644 --- a/docs/solutions/adding-converter-target-providers.md +++ b/docs/solutions/adding-converter-target-providers.md @@ -650,7 +650,7 @@ Use this checklist when adding a new target provider: ### Documentation - [ ] Create `docs/specs/{target}.md` with format specification - [ ] Update `README.md` with target in list and usage examples -- [ ] Do not hand-add a release entry; release automation owns canonical changelog updates +- [ ] Do not hand-add release notes; release automation owns GitHub release notes and release-owned versions ### Version Bumping - [ ] Use a conventional `feat:` or `fix:` title so release automation can infer the right bump @@ -687,6 +687,6 @@ Use this checklist when adding a new target provider: ## Related Files - `plugins/compound-engineering/.claude-plugin/plugin.json` — Version and component counts -- `CHANGELOG.md` — Recent additions and patterns +- `CHANGELOG.md` — Pointer to canonical GitHub release history - `README.md` — Usage examples for all targets - `docs/solutions/plugin-versioning-requirements.md` — Checklist for releases diff --git a/docs/solutions/plugin-versioning-requirements.md b/docs/solutions/plugin-versioning-requirements.md index 73feb5e..0575a93 100644 --- a/docs/solutions/plugin-versioning-requirements.md +++ b/docs/solutions/plugin-versioning-requirements.md @@ -18,9 +18,9 @@ This document applies to release-owned plugin metadata and changelog surfaces fo The broader repo-level release model now lives in: -- `docs/solutions/workflow/manual-release-please-and-centralized-changelog.md` +- `docs/solutions/workflow/manual-release-please-github-releases.md` -That doc covers the standing release PR, component ownership across `cli`, `compound-engineering`, `coding-tutor`, and `marketplace`, and the canonical root changelog model. This document stays narrower: it is the plugin-scoped reminder for contributors changing `plugins/compound-engineering/**`. +That doc covers the standing release PR, component ownership across `cli`, `compound-engineering`, `coding-tutor`, and `marketplace`, and the GitHub Releases model for published release notes. This document stays narrower: it is the plugin-scoped reminder for contributors changing `plugins/compound-engineering/**`. ## Solution @@ -59,7 +59,7 @@ Before committing changes to compound-engineering plugin: - Plugin version is release-owned: `plugins/compound-engineering/.claude-plugin/plugin.json` - Marketplace entry is release-owned: `.claude-plugin/marketplace.json` -- Changelog release sections are release-owned: root `CHANGELOG.md` +- Release notes are release-owned: GitHub release PRs and GitHub Releases - Readme: `plugins/compound-engineering/README.md` ## Example Workflow @@ -68,7 +68,7 @@ When adding a new agent: 1. Create the agent file in `plugins/compound-engineering/agents/[category]/` 2. Update `plugins/compound-engineering/README.md` -3. Leave plugin version selection and canonical changelog generation to release automation +3. Leave plugin version selection and canonical release-note generation to release automation 4. Run `bun run release:validate` ## Prevention @@ -86,4 +86,4 @@ This documentation serves as a reminder. When maintainers or agents work on this - `plugins/compound-engineering/README.md` - `package.json` - `CHANGELOG.md` -- `docs/solutions/workflow/manual-release-please-and-centralized-changelog.md` +- `docs/solutions/workflow/manual-release-please-github-releases.md` diff --git a/docs/solutions/workflow/manual-release-please-and-centralized-changelog.md b/docs/solutions/workflow/manual-release-please-github-releases.md similarity index 70% rename from docs/solutions/workflow/manual-release-please-and-centralized-changelog.md rename to docs/solutions/workflow/manual-release-please-github-releases.md index 0c22a2f..308c4eb 100644 --- a/docs/solutions/workflow/manual-release-please-and-centralized-changelog.md +++ b/docs/solutions/workflow/manual-release-please-github-releases.md @@ -1,5 +1,5 @@ --- -title: "Manual release-please migration for multi-component plugin and marketplace releases" +title: "Manual release-please with GitHub Releases for multi-component plugin and marketplace releases" category: workflow date: 2026-03-17 created: 2026-03-17 @@ -8,7 +8,7 @@ component: release-automation tags: - release-please - semantic-release - - changelog + - github-releases - marketplace - plugin-versioning - ci @@ -16,7 +16,7 @@ tags: - release-process --- -# Manual release-please migration for multi-component plugin and marketplace releases +# Manual release-please with GitHub Releases for multi-component plugin and marketplace releases ## Problem @@ -25,13 +25,13 @@ The repo had one automated release path for the npm CLI, but the actual release - root-only `semantic-release` - a local maintainer workflow via `release-docs` - multiple version-bearing metadata files -- inconsistent changelog ownership +- inconsistent release-note ownership -That made it hard to batch merges on `main`, hard for multiple maintainers to share release responsibility, and easy for changelogs, plugin manifests, marketplace metadata, and computed counts to drift out of sync. +That made it hard to batch merges on `main`, hard for multiple maintainers to share release responsibility, and easy for release notes, plugin manifests, marketplace metadata, and computed counts to drift out of sync. ## Root Cause -Release intent, component ownership, changelog ownership, and metadata synchronization were split across different systems: +Release intent, component ownership, release-note ownership, and metadata synchronization were split across different systems: - PRs merged to `main` were too close to an actual publish event - only the root CLI had a real CI-owned release path @@ -53,11 +53,31 @@ Key decisions: - `marketplace` - Keep release timing manual: the actual release happens when the generated release PR is merged. - Keep release PR maintenance automatic on pushes to `main`. -- Keep one canonical root `CHANGELOG.md`. -- Replace `release-docs` with repo-owned scripts for preview, metadata sync, validation, and root changelog rendering. +- Use GitHub release PRs and GitHub Releases as the canonical release-notes surface for new releases. +- Replace `release-docs` with repo-owned scripts for preview, metadata sync, and validation. - Keep PR title scopes optional; use file paths to determine affected components. - Make `AGENTS.md` canonical and reduce root `CLAUDE.md` to a compatibility shim. +## Critical Constraint Discovered + +`release-please` does not allow package changelog paths that traverse upward with `..`. + +The failed first live run exposed this directly: + +- `release-please failed: illegal pathing characters in path: plugins/compound-engineering/../../CHANGELOG.md` + +That means a multi-component repo cannot force subpackage release entries back into one shared root changelog file using `changelog-path` values like: + +- `../../CHANGELOG.md` +- `../CHANGELOG.md` + +The practical fix was: + +- set `skip-changelog: true` for all components in `.github/release-please-config.json` +- treat GitHub Releases as the canonical release-notes surface +- reduce `CHANGELOG.md` to a simple pointer file +- add repo validation to catch illegal upward changelog paths before merge + ## Resulting Release Process After the migration: @@ -68,6 +88,7 @@ After the migration: 4. Maintainers can inspect the standing release PR or run the manual preview flow. 5. The actual release happens only when the generated release PR is merged. 6. npm publish runs only when the `cli` component is part of that release. +7. Component-specific release notes are published via GitHub releases such as `cli-vX.Y.Z` and `compound-engineering-vX.Y.Z`. ## Component Rules @@ -117,6 +138,17 @@ This keeps titles simple while still letting the release system decide the corre - They use the preview/release override path instead of making fake commits - The release still goes through the same CI-owned process +## Release Notes Model + +- Pending release state is visible in one standing release PR. +- Published release history is canonical in GitHub Releases. +- Component identity is carried by component-specific tags such as: + - `cli-vX.Y.Z` + - `compound-engineering-vX.Y.Z` + - `coding-tutor-vX.Y.Z` + - `marketplace-vX.Y.Z` +- Root `CHANGELOG.md` is only a pointer to GitHub Releases and is not the canonical source for new releases. + ## Key Files - `.github/release-please-config.json` @@ -128,7 +160,6 @@ This keeps titles simple while still letting the release system decide the corre - `src/release/metadata.ts` - `scripts/release/preview.ts` - `scripts/release/sync-metadata.ts` -- `scripts/release/render-root-changelog.ts` - `scripts/release/validate.ts` - `AGENTS.md` - `CLAUDE.md` @@ -138,7 +169,8 @@ This keeps titles simple while still letting the release system decide the corre - Keep release authority in CI only. - Do not reintroduce local maintainer-only release flows or hand-managed version bumps. - Keep `AGENTS.md` canonical. If a tool still needs `CLAUDE.md`, use it only as a compatibility shim. -- Preserve one canonical root `CHANGELOG.md`. +- Do not try to force multi-component release notes back into one committed changelog file if the tool does not support it natively. +- Validate `.github/release-please-config.json` in CI so unsupported changelog-path values fail before the workflow reaches GitHub Actions. - Run `bun run release:validate` whenever plugin inventories, release-owned descriptions, or marketplace entries may have changed. - Prefer maintained CI actions over custom validation when a generic concern does not need repo-specific logic. @@ -155,7 +187,7 @@ After merging release-system changes to `main`: - Verify exactly one standing release PR is created or updated. - Confirm ordinary merges to `main` do not publish npm directly. -- Inspect the release PR for correct component selection, versions, metadata updates, and root changelog behavior. +- Inspect the release PR for correct component selection, versions, and metadata updates. Before merging a generated release PR: @@ -167,7 +199,7 @@ After merging a generated release PR: - Confirm npm publish runs only when `cli` is part of the release. - Confirm no recursive follow-up release PR appears containing only generated churn. -- Confirm root `CHANGELOG.md` and release-owned metadata match the released components. +- Confirm the expected component GitHub releases were created and that release-owned metadata matches the released components. ## Related Docs diff --git a/scripts/release/render-root-changelog.ts b/scripts/release/render-root-changelog.ts deleted file mode 100644 index e921852..0000000 --- a/scripts/release/render-root-changelog.ts +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bun -import { updateRootChangelog } from "../../src/release/metadata" -import type { ReleaseComponent } from "../../src/release/types" - -type EntryInput = { - component: ReleaseComponent - version: string - date: string - sections: Record -} - -function parseEntries(argv: string[]): EntryInput[] { - const jsonIndex = argv.findIndex((arg) => arg === "--entries") - if (jsonIndex === -1) return [] - const raw = argv[jsonIndex + 1] - if (!raw) return [] - return JSON.parse(raw) as EntryInput[] -} - -const write = process.argv.includes("--write") -const entries = parseEntries(process.argv.slice(2)) - -if (entries.length === 0) { - console.error("No changelog entries provided. Pass --entries ''.") - process.exit(1) -} - -const result = await updateRootChangelog({ - entries, - write, -}) - -console.log(`${result.changed ? "update" : "keep"} ${result.path}`) diff --git a/scripts/release/validate.ts b/scripts/release/validate.ts index 665a00c..d1867a7 100644 --- a/scripts/release/validate.ts +++ b/scripts/release/validate.ts @@ -1,16 +1,32 @@ #!/usr/bin/env bun +import path from "path" +import { validateReleasePleaseConfig } from "../../src/release/config" import { syncReleaseMetadata } from "../../src/release/metadata" +import { readJson } from "../../src/utils/files" +const releasePleaseConfig = await readJson<{ packages: Record }>( + path.join(process.cwd(), ".github", "release-please-config.json"), +) +const configErrors = validateReleasePleaseConfig(releasePleaseConfig) const result = await syncReleaseMetadata({ write: false }) const changed = result.updates.filter((update) => update.changed) -if (changed.length === 0) { +if (configErrors.length === 0 && changed.length === 0) { console.log("Release metadata is in sync.") process.exit(0) } -console.error("Release metadata drift detected:") -for (const update of changed) { - console.error(`- ${update.path}`) +if (configErrors.length > 0) { + console.error("Release configuration errors detected:") + for (const error of configErrors) { + console.error(`- ${error}`) + } +} + +if (changed.length > 0) { + console.error("Release metadata drift detected:") + for (const update of changed) { + console.error(`- ${update.path}`) + } } process.exit(1) diff --git a/src/release/config.ts b/src/release/config.ts new file mode 100644 index 0000000..e2e74ca --- /dev/null +++ b/src/release/config.ts @@ -0,0 +1,29 @@ +import path from "path" + +type ReleasePleasePackageConfig = { + "changelog-path"?: string + "skip-changelog"?: boolean +} + +type ReleasePleaseConfig = { + packages: Record +} + +export function validateReleasePleaseConfig(config: ReleasePleaseConfig): string[] { + const errors: string[] = [] + + for (const [packagePath, packageConfig] of Object.entries(config.packages)) { + const changelogPath = packageConfig["changelog-path"] + if (!changelogPath) continue + + const normalized = path.posix.normalize(changelogPath) + const segments = normalized.split("/") + if (segments.includes("..")) { + errors.push( + `Package "${packagePath}" uses an unsupported changelog-path "${changelogPath}". release-please does not allow upward-relative paths like "../".`, + ) + } + } + + return errors +} diff --git a/src/release/metadata.ts b/src/release/metadata.ts index ae3a10c..745300c 100644 --- a/src/release/metadata.ts +++ b/src/release/metadata.ts @@ -180,39 +180,3 @@ export async function syncReleaseMetadata(options: SyncOptions = {}): Promise }> - write?: boolean -}): Promise<{ path: string; changed: boolean; content: string }> { - const root = options.root ?? process.cwd() - const changelogPath = path.join(root, "CHANGELOG.md") - const existing = await readText(changelogPath) - const renderedEntries = options.entries - .map((entry) => renderChangelogEntry(entry.component, entry.version, entry.date, entry.sections)) - .join("\n\n") - const next = `${existing.trimEnd()}\n\n${renderedEntries}\n` - const changed = next !== existing - if (options.write && changed) { - await writeText(changelogPath, next) - } - return { path: changelogPath, changed, content: next } -} - -export function renderChangelogEntry( - component: ReleaseComponent, - version: string, - date: string, - sections: Record, -): string { - const lines = [`## ${component} v${version} - ${date}`] - for (const [section, items] of Object.entries(sections)) { - if (items.length === 0) continue - lines.push("", `### ${section}`) - for (const item of items) { - lines.push(`- ${item}`) - } - } - return lines.join("\n") -} diff --git a/tests/release-config.test.ts b/tests/release-config.test.ts new file mode 100644 index 0000000..4b2a746 --- /dev/null +++ b/tests/release-config.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from "bun:test" +import { validateReleasePleaseConfig } from "../src/release/config" + +describe("release-please config validation", () => { + test("rejects upward-relative changelog paths", () => { + const errors = validateReleasePleaseConfig({ + packages: { + ".": { + "changelog-path": "CHANGELOG.md", + }, + "plugins/compound-engineering": { + "changelog-path": "../../CHANGELOG.md", + }, + }, + }) + + expect(errors).toHaveLength(1) + expect(errors[0]).toContain('Package "plugins/compound-engineering"') + expect(errors[0]).toContain("../../CHANGELOG.md") + }) + + test("allows package-local changelog paths and skipped changelogs", () => { + const errors = validateReleasePleaseConfig({ + packages: { + ".": { + "changelog-path": "CHANGELOG.md", + }, + "plugins/compound-engineering": { + "skip-changelog": true, + }, + ".claude-plugin": { + "changelog-path": "CHANGELOG.md", + }, + }, + }) + + expect(errors).toEqual([]) + }) +}) diff --git a/tests/release-metadata.test.ts b/tests/release-metadata.test.ts index c904574..25b3e9e 100644 --- a/tests/release-metadata.test.ts +++ b/tests/release-metadata.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "bun:test" -import { buildCompoundEngineeringDescription, renderChangelogEntry } from "../src/release/metadata" +import { buildCompoundEngineeringDescription } from "../src/release/metadata" describe("release metadata", () => { test("builds the current compound-engineering manifest description from repo counts", async () => { @@ -8,16 +8,4 @@ describe("release metadata", () => { "AI-powered development tools. 29 agents, 44 skills, 1 MCP server for code review, research, design, and workflow automation.", ) }) - - test("renders root changelog entries with component-version headings", () => { - const entry = renderChangelogEntry("compound-engineering", "2.43.0", "2026-04-10", { - Features: ["Add release preview"], - Fixes: ["Correct changelog rendering"], - }) - - expect(entry).toContain("## compound-engineering v2.43.0 - 2026-04-10") - expect(entry).toContain("### Features") - expect(entry).toContain("- Add release preview") - expect(entry).toContain("### Fixes") - }) })