Repository navigation
ci: cherry-pick a stacked PR's change, not its empty merge commit - #1070
Conversation
When a native stack merged, #1056's change landed on release/1.11.x as its own commit (2a43a8b) and its merge commit (29920b4) was empty. The workflow cherry-picked the empty commit, found nothing to commit, and reported that main already had the change, which it didn't. scripts/cherry-pick-commits.mjs walks back from the merge commit through the commits with the PR's (#N) suffix and prints those that change files. The workflow cherry-picks those.
|
Caution Review failedThe pull request is closed. Walkthrough
Merge Risk:
|
Cherry-pick CreatedA cherry-pick PR to Please review and merge if this change should also be in If the cherry-pick is not needed, close the PR. |
Performance Test ResultsStatus: ✅ All tests passed Summary
Total: 101 tests across 21 projects 📊 View full report in workflow run Generated at: 2026-11-04T11:53:52.113Z |
What and why
When stack #1057 merged, #1056's change landed on
release/1.11.xas its own commit,2a43a8b66, and #1056's merge commit,29920b485, was empty.cherry-pick-prompt.ymlcherry-picksmerge_commit_sha, so it picked the empty commit. That left nothing to commit, so it commented on #1056 thatmainalready had the change.maindidn't; #1069 back-ports it by hand.scripts/cherry-pick-commits.mjs <merge-sha> <pr-number>prints the commits that hold a PR's change, oldest first:(#N)suffix, as GitHub's squash commits do;commits, falling back to the merge commit with a warning if the script fails;Original commit:line, the "No cherry-pick needed" comment and the conflict issue's instructions name them.CLAUDE.md: the stacked-PR note describes this case.This is the bottom of the skill-search stack, so the stack's own cherry-picks use it when it merges.
Tests
scripts/cherry-pick-commits.test.mjs, 6 tests on a temporary repository laid out likerelease/1.11.x:release/1.11.xhistory: the script gives2a43a8b66for fix(sdk): httpRespond.redirect() takes a path, and an @HttpRoute output that fails its schema answers 500 #1056 (merge commit29920b485), and the merge commit itself for fix(sdk): @frontmcp/sdk exports JobAdmission, jobRunUri and mayAccessRun, which a custom job host needs #1054, fix(sdk): createDirect() and create() keep the headers http.forwardHeaders names on in-process calls #1055, fix(sdk): no empty _meta['frontmcp/trace'] on an answer for which no hook ran #1046 and fix(sdk): a browser starts the guard on a caller's redis.client, and on per-instance counters with fallback: 'memory' #1047.origin/main: fix(sdk): httpRespond.redirect() takes a path, and an @HttpRoute output that fails its schema answers 500 #1056 gives 18 files to cherry-pick, the same as Cherry-pick: fix(sdk): httpRespond.redirect() takes a path, and an @HttpRoute output that fails its schema answers 500 #1069, and fix(sdk): createDirect() and create() keep the headers http.forwardHeaders names on in-process calls #1055 is reported as already applied (Cherry-pick: fix(sdk): createDirect() and create() keep the headers http.forwardHeaders names on in-process calls #1063 carried it).Summary by CodeRabbit