← Files Compound EngineeringARCHIVED FILE
docs/solutions/workflow/manual-release-please-github-releases.md
3.76 KB · Oct 5, 2026 · 18:34 UTC
--- title: "Manual release-please with GitHub Releases for plugin and marketplace releases" category: workflow date: 2026-03-17 last_refreshed: 2026-09-02 created: 2026-03-17 severity: medium module: release-automation problem_type: workflow_issue component: release-automation tags: - release-please - github-releases - marketplace - plugin-versioning - ci - automation - release-process --- # Manual release-please with GitHub Releases for plugin and marketplace releases The repo uses release-please manifest mode with one standing release PR: release PR maintenance is automatic on pushes to `main`, the release itself happens only when a maintainer merges that PR, and GitHub Releases (`compound-engineering-vX.Y.Z`, `marketplace-vX.Y.Z`, `cursor-marketplace-vX.Y.Z`) are the canonical release-notes surface. AGENTS.md "Release versioning" and "Commit Conventions" state the contributor-facing rules; this doc keeps the two constraints behind them. ## Why GitHub Releases is canonical: the `..` changelog-path constraint Release-please does not allow a package `changelog-path` that traverses upward with `..`. A multi-component repo therefore cannot force subpackage release entries back into one shared root changelog with `../../CHANGELOG.md` or `../CHANGELOG.md`. Rather than maintain three committed changelogs, GitHub Releases became the canonical surface and root `CHANGELOG.md` is only a pointer to it. `src/release/config.ts` (`validateReleasePleaseConfig`, run by `bun run release:validate`) rejects an upward-relative path so the mistake fails in CI before the workflow reaches GitHub Actions. Do not try to route multi-component release notes back into one committed file. ## Component ownership File paths, not PR-title scopes, decide which component a change bumps (`FILE_COMPONENT_MAP` in `src/release/components.ts`): | Component | Paths | |---|---| | `compound-engineering` (root package = the plugin: CLI, root and native harness manifests, `skills/`) | `skills/`, `src/`, `tests/`, `package.json`, `plugin.json`, `.claude-plugin/plugin.json`, `.cursor-plugin/plugin.json`, `.codex-plugin/`, `.kimi-plugin/plugin.json`, `.grok-plugin/`, `.devin-plugin/plugin.json`, `.opencode/`, `.cline/`, `.pi/`, `.agy/`, `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `README.md`. Extra-files such as `.omp-plugin/marketplace.json` ride a root bump; they do not themselves schedule one. | | `marketplace` | `.claude-plugin/marketplace.json` | | `cursor-marketplace` | `.cursor-plugin/marketplace.json` | Consequences worth knowing: - A `fix:` touching `.codex-plugin/plugin.json`, `.kimi-plugin/plugin.json`, or root `plugin.json` bumps `compound-engineering`, and `release:validate` requires every root package/plugin manifest version to stay aligned. - A marketplace catalog edit bumps only `marketplace`; plugin versions do not bump because the catalog changed. - `refactor:` appears in release notes under Refactoring but is not release-driving unless breaking or explicitly overridden. Docs-only, CI-only, and build-only changes are non-releasable unless a releasable component path also changed. ## Plugin-scoped contributor rule Embedded plugin versions across every root and native manifest, the `compound-engineering` entry in `.claude-plugin/marketplace.json`, and release sections in `CHANGELOG.md` are release-owned. Multiple PRs may merge before a release, so a version guessed inside a feature PR is wrong more often than right and produced the drift in `release-please-version-drift-recovery.md`. Feature PRs change inventory (`README.md` counts and tables, `plugin.json` description) and run `bun run release:validate`; they never pick the version. ## Related docs - `docs/solutions/workflow/release-please-version-drift-recovery.md` - `docs/solutions/adding-converter-target-providers.md` - `AGENTS.md`
SHA-256: c9d9edc6b1324e2c44441376650cc279c120520c91575d7376e4c7f14c1e426a