From 8e31375e8dafbb14457ad54135d75d31bf5c0b8b Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Fri, 17 Jul 2026 14:47:00 -0700 Subject: [PATCH] fix(release): merge engine's release with its dependents (mcp, miner) The actual root cause of the mcp/miner v3.1.x release churn: engine's release and its dependents' (mcp, miner both carry a real runtime `dependencies` entry on it) release each landed as SEPARATE PRs/commits. release-please's node-workspace plugin still bumped a dependent's `@loopover/engine` version range the moment engine's version changed, but on the dependent's OWN branch -- so the dependent's package.json ended up requiring an engine version that existed nowhere (not locally, since engine's bump lived on a different unmerged branch; not on npm, since it hadn't published yet). `npm ci` failed with ETARGET until a human manually walked engine through to publish first, then updated the dependent's branch -- confirmed live across #7086/#7087/#7107/#7108. merge: true is the plugin's own purpose-built mechanism for exactly this: it combines a package with the dependents its OWN dependency-bump logic pulled in as candidates into ONE PR/commit, so engine's new version and its dependents' bumped ranges land together atomically. npm workspaces then resolves the dependency from the LOCAL checkout, which always satisfies the range regardless of npm registry publish timing or ordering -- eliminating the failure mode structurally rather than papering over it with an after-the-fact branch-update step. ui-kit has no dependency edge to any other package here, so it's never pulled into the merge and keeps its fully independent release cadence. --- .github/workflows/mcp-release-please.yml | 17 +++++++++++++++++ release-please-config.json | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/mcp-release-please.yml b/.github/workflows/mcp-release-please.yml index 60ed97b42d..dbe0c001c9 100644 --- a/.github/workflows/mcp-release-please.yml +++ b/.github/workflows/mcp-release-please.yml @@ -16,6 +16,23 @@ name: Package Release Please # default, these four packages have genuinely independent release cadences and separate publish # targets/workflows, and bundling them would work against this repo's small-focused-PR convention. # +# node-workspace plugin merge: true (release-please-config.json) -- the exception to the above: +# packages/loopover-mcp and packages/loopover-miner both carry a REAL runtime `dependencies` entry +# on packages/loopover-engine, so they are not actually independent of it. With merge left at its +# prior override (false), the plugin still bumps a dependent's `@loopover/engine` version range the +# moment engine's own version changes, but does so on that dependent's OWN separate branch/PR -- +# meaning the dependent's package.json now requires an engine version that exists NOWHERE (not +# locally on that branch, since engine's bump lives on a different unmerged branch; not on npm +# either, since it hasn't published yet). `npm ci` then fails with ETARGET until a human notices and +# manually walks engine's release through to publish before updating the dependent's branch -- +# confirmed live across several mcp/miner release cycles (#7086/#7087/#7107/#7108). merge: true is +# the plugin's own purpose-built mechanism for exactly this: it combines a package with the +# dependents its OWN dependency-bump logic pulled in as candidates into ONE PR/commit, so engine's +# new version and its dependents' bumped ranges land together atomically -- npm workspaces then +# resolves the dependency from the LOCAL checkout, which always satisfies the range regardless of +# npm registry publish timing or ordering. packages/loopover-ui-kit has no dependency edge to any +# other package here, so it is never pulled into this merge and keeps its fully independent cadence. +# # Runs on every push to main, not just a schedule: release-please is idempotent (it recomputes # purely from conventional-commit history since each component's last release tag), so the extra # runs cost nothing when there's no new commit or merged Release PR to act on. The push trigger is diff --git a/release-please-config.json b/release-please-config.json index 393468d488..4414b6dc88 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -29,7 +29,7 @@ "plugins": [ { "type": "node-workspace", - "merge": false + "merge": true } ], "changelog-sections": [