mcpbeat Sign in

Cherry Pick To Release Agent Skill

Cherry-pick a merged main-branch PR onto a MsQuic release branch (release/X.Y).

3k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
4746
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/microsoft/msquic --skill cherry-pick-to-release

The instruction itself

18 sections, as written by the author

Cherry-Pick to MsQuic Release Branch

You are helping a maintainer back-port a fix from main to one or more

MsQuic release branches (release/2.4, release/2.5, etc.).

This skill encodes the patterns the project uses.

When This Skill Activates

The user asks to cherry-pick / back-port / "CP" a PR or commit from main

onto a release branch. Typical requests:

  • "Cherry-pick #5942 to release/2.4 and release/2.5"
  • "Back-port the ACK underflow fix to 2.5"
  • "CP this commit to the 2.4 release branch"

Inputs You Need

Before doing anything, make sure you know:

  • Source: a PR number on main (preferred) or a commit SHA on origin/main.
  • Target release branch(es): e.g. release/2.4, release/2.5. If the

user is ambiguous (e.g. "to the release branches"), ask whether they want

one branch or both, and which.

  • Whether to push / open a PR. You must never push a branch or open a PR

without explicit permission. Stop and ask before any git push or gh pr create.

If anything is missing, ask before proceeding.

Project Conventions (must follow)

PR Title

[CP] <Original PR title> (#<original_pr_number>)

Examples actually used on the release branches:

  • [CP] Fix underflow in ACK frame parsing #5942 (→ PR #5943 on 2.5, #5944 on 2.4)
  • [CP] Fix SAL annotation placement on function templates (#5895)
  • [CP] Free AES 256 GCM algorithm handle on cleanup (#5526)
  • [CP] Fix double deref in connection pool error path (#5597)

When the same fix targets multiple release branches, the title is identical

across PRs; only the target branch differs. After squash-merge, GitHub

appends the new PR number, producing commits like

[CP] Fix underflow in ACK frame parsing #5942 (#5943) on the release

branch — this is expected and required (it makes traceability trivial).

Do not invent new prefixes; stick to [CP] unless asked.

PR Body

Use the exact body of the original PR, verbatim, including the

## Description, ## Testing, and ## Documentation sections as the

original author wrote them. Do not rewrite, summarize, or augment them

with cherry-pick commentary.

No additions or modification of the original description is acceptable.

Branch Naming

Project convention (observed on most recent cherry-pick PRs):

<user>/cp_<short_description>_<target_version>_copilot

The <short_description> is a snake_case summary of the fix, mirroring

prior branches like cp_conn_pool_deref, cp_free_aes_256_gcm_handle,

underflow_fix_cp.

Use one branch per target release branch (do not try to land both

release branches from a single branch / PR).

Commits Inside the PR

  • Almost always one commit — the cherry-picked commit, with its

original message preserved.

  • Occasionally a second commit is acceptable if needed to make the

release branch build/pass tests (merge conflict resolutions and build fixes).

Keep these tightly scoped to enabling the cherry-pick; do not sneak in unrelated changes.

  • Squash-merge erases the multi-commit structure on the release branch.
  • Do not add (cherry picked from commit X) trailers — the project

doesn't use git cherry-pick -x; traceability comes from the PR title

containing the original PR number.

Workflow

Follow these steps in order. Do not skip a phase.

Phase 1 — Identify the source commit on main

  • If given a PR number, find its squash-merge commit on origin/main:
   gh pr view <orig_pr> --repo microsoft/msquic --json mergeCommit,state,title,body,baseRefName

Verify state == MERGED and baseRefName == main. If not merged, stop and tell the user — never cherry-pick an unmerged change.

  • If given a SHA, confirm it is reachable from origin/main:
   git --no-pager log -1 --format="%H %s" <sha>
   git --no-pager branch -r --contains <sha> | Select-String "origin/main"
  • Capture the original PR title and body — you'll reuse them.

Phase 2 — Prepare the local branch

Repeat for each target release branch.

  • Make sure the working tree is clean (git status). If not, stop and ask.
  • Fetch latest refs: git fetch origin --prune.
  • Create the branch from the tip of the release branch:
   git checkout -b <user>/cp_<short_desc>_2_5_copilot origin/release/2.5

Phase 3 — Apply the cherry-pick

  • Run git cherry-pick <commit_sha> (no -x).
  • On conflicts:
  • Resolve them, keeping the spirit of the original fix.
  • If the conflict is non-trivial, briefly summarize the resolution in the PR body under ## Description so reviewers know what differs from main.
  • If the fix depends on code that doesn't exist on the release branch, stop and ask the user how to proceed (skip, adapt, or pull in additional commits) — do not silently rewrite the fix.

Phase 4 — Regenerate derived files (only if applicable)

Check whether the cherry-pick touches things that require regeneration. CI

will fail otherwise (check-clog.yml, check-dotnet.yml).

  • Trace / log macro changes (QuicTraceLogInfo, QuicTraceEvent,

etc., or anything under src/manifest/):

  ./scripts/update-sidecar.ps1

Commit any changes under src/generated/ and src/manifest/clog.sidecar as part of the same commit (or amend).

  • Public C API surface changes (anything under src/inc/, especially msquic.h):
  ./scripts/generate-dotnet.ps1

Commit any changes under src/cs/.

If neither applies, skip this phase.

Phase 5 — Build and run tests locally (REQUIRED)

Build and run tests locally before pushing. This is **required for every

cherry-pick**, regardless of whether the git cherry-pick was clean or

required conflict resolution. Do not skip this phase.

  • Build with the default TLS provider for the platform you're on:
   ./scripts/build.ps1 -Tls schannel    # Windows
   pwsh ./scripts/build.ps1 -Tls openssl # Linux
  • Run the tests that exercise the cherry-picked code. Use a

GoogleTest --Filter to keep the runtime short:

   ./scripts/test.ps1 -Tls schannel -Filter '<TestSuite>.<TestPattern>*'

At minimum, run:

  • the tests that were added or modified by the cherry-pick, and
  • the tests directly covering the changed code paths (e.g.

TlsTest.* for src/platform/tls_*, ApiTest.* for src/inc/

surface changes, HandshakeTest.* for src/core/ handshake logic).

  • If the build or the relevant tests fail on the release branch but

pass on main, stop and ask the user — do not push a broken

cherry-pick. Likely causes: missing prerequisite commits, API drift

between branches, or test infra changes that didn't get back-ported.

Capture the build and test outcome (pass/fail, number of tests run) to

mention briefly when you ask for permission to push.

Phase 6 — Push and open the PR (gated on explicit user permission)

Stop here and show a summary of the cherry-pick to the user:

original PR, target branch, branch name, PR title, build and test status.

Confirm with the user before pushing. Then:

  • Push the branch:
   git push -u origin <user>/cp_<short_desc>_2_5_copilot
  • Open the PR as a draft (per the user's standing rule, unless they say otherwise):
   gh pr create --repo microsoft/msquic `
     --base release/2.5 `
     --head <user>/cp_<short_desc>_2_5_copilot `
     --draft `
     --title "[CP] <Original title> (#<orig_pr>)" `
     --body-file <path_to_body.md>
  • --base must be the release branch (release/2.4, release/2.5, …), not main.
  • If cherry-picking to multiple release branches, repeat phases 2–6 for each branch. Open one PR per branch; mention the sibling PR number in each body so reviewers can correlate them (e.g. Companion PR for release/2.4: #5944).

Self-Verification Checklist

Before telling the user the cherry-pick is ready:

  • [ ] PR --base is the correct release/X.Y branch (never main).
  • [ ] PR title is [CP] <orig title> (#<orig_pr>) (or an explicitly approved variant).
  • [ ] PR body uses the exact body of the original PR verbatim with no additions.
  • [ ] Branch name follows <user>/cp_<short_desc>_<X_Y>_copilot.
  • [ ] PR is opened as a draft.
  • [ ] Only the cherry-picked commit (+ optional minimal build-fix commits) is on the branch — no unrelated changes.
  • [ ] Local build succeeded on the release branch with the cherry-pick applied (Phase 5).
  • [ ] Relevant tests were run locally and pass (Phase 5). The exact test filter and result are mentioned when asking the user for permission to push.
  • [ ] If trace/log macros were touched → scripts/update-sidecar.ps1 was run and generated files committed.
  • [ ] If src/inc/ public headers were touched → scripts/generate-dotnet.ps1 was run and generated files committed.
  • [ ] You obtained explicit user permission before pushing and opening the PR.

Anti-Patterns to Avoid

  • Don't cherry-pick a PR that isn't merged on main yet.
  • Don't use git cherry-pick -x — the project doesn't include

(cherry picked from commit X) trailers in the final commit message.

  • Don't bundle unrelated fixes into the same cherry-pick PR. If you

see a related-but-distinct issue, open a separate cherry-pick.

  • Don't invent a new title prefix (e.g. [BACKPORT 2.5]) — stick to

[CP] to stay consistent with the last ~2 years of cherry-pick PRs.

  • Don't silently drop test changes.
  • Don't rewrite, summarize, or paraphrase the original PR's

description. The body must contain the original PR's body verbatim without additions.

  • Don't skip the local build / test step (Phase 5), even when the

cherry-pick applied with no conflicts. Auto-merged hunks can still

produce subtly wrong code.

  • Don't push or open a PR without explicit user permission.
  • Don't bump the version number as part of a cherry-pick PR —

version bumps (Bump version to v2.5.X) are separate PRs done at

release time.

Non-Goals

  • Triaging whether a fix *should* be cherry-picked. The user decides

that; this skill just executes the cherry-pick cleanly.

  • Releasing / tagging / publishing artifacts. Those are separate

processes handled outside this skill.

Other skills for the same job

different authors, same section of the catalogue
MCP Builder
by anthropics
vendor ×13

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

30k tokens scripts
Changelog Generator
by frostant
×9

Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.

774 tokens
Finishing A Development Branch
by ZhanlinCui
×7

Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup

1k tokens
MCP Builder
by JayZeeDesign
×7

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

37k tokens scripts
Vercel React Native Skills
by vercel-labs
vendor ×6

React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.

39k tokens
Vercel React Best Practices
by ratacat
×5

React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.

34k tokens
Next Best Practices
by vercel-labs
vendor ×4

Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling

20k tokens
Using Git Worktrees
by ZhanlinCui
×4

Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification

1k tokens

How to use it

Copy the folder

Take microsoft/cherry-pick-to-release from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.