From 1a4401e31eb84aaee59ec0f0dfac335f4be12b0d Mon Sep 17 00:00:00 2001 From: Steve Pfister Date: Fri, 6 Feb 2026 07:56:26 -0500 Subject: [PATCH 1/8] Add backport email template Adds a template for emailing Tactics to request approval for backports to release branches, with standard sections for Customer Impact, Regression, Testing, and Risk. --- .github/BACKPORT_EMAIL_TEMPLATE.md | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .github/BACKPORT_EMAIL_TEMPLATE.md diff --git a/.github/BACKPORT_EMAIL_TEMPLATE.md b/.github/BACKPORT_EMAIL_TEMPLATE.md new file mode 100644 index 00000000000000..543356ad9d7f8a --- /dev/null +++ b/.github/BACKPORT_EMAIL_TEMPLATE.md @@ -0,0 +1,39 @@ +# Backport Email Template + +Use this template when emailing Tactics to request approval for a backport to a release branch. + +--- + +**Subject:** [release/X.0] Backport request: (#) + +--- + +Hello Tactics, + +Please consider https://github.com/dotnet/runtime/pull/ for backporting into release/X.0. + +## Customer Impact + +- [ ] Customer reported +- [ ] Found internally + + + +Fixes https://github.com/dotnet/runtime/issues/ + +## Regression + +- [ ] Yes +- [ ] No + + + +## Testing + + + +## Risk + + + + From 91712b3b2fb02277aa73de632dc4403ab31dc6a8 Mon Sep 17 00:00:00 2001 From: Steve Pfister Date: Fri, 6 Feb 2026 08:12:28 -0500 Subject: [PATCH 2/8] Improve email template formatting for email clients --- .github/BACKPORT_EMAIL_TEMPLATE.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/BACKPORT_EMAIL_TEMPLATE.md b/.github/BACKPORT_EMAIL_TEMPLATE.md index 543356ad9d7f8a..4acef39b31d387 100644 --- a/.github/BACKPORT_EMAIL_TEMPLATE.md +++ b/.github/BACKPORT_EMAIL_TEMPLATE.md @@ -2,6 +2,8 @@ Use this template when emailing Tactics to request approval for a backport to a release branch. +> **Note:** Most email clients (Outlook, Gmail, etc.) don't render Markdown. Copy the template below and the section headers will display as bold text. If your email client supports rich text, you can manually increase the header font size. + --- **Subject:** [release/X.0] Backport request: (#) @@ -12,7 +14,7 @@ Hello Tactics, Please consider https://github.com/dotnet/runtime/pull/ for backporting into release/X.0. -## Customer Impact +**CUSTOMER IMPACT** - [ ] Customer reported - [ ] Found internally @@ -21,18 +23,18 @@ Please consider https://github.com/dotnet/runtime/pull/ for backporti Fixes https://github.com/dotnet/runtime/issues/ -## Regression +**REGRESSION** - [ ] Yes - [ ] No -## Testing +**TESTING** -## Risk +**RISK** From 6c813d55480c49d7d791460153b4978c2b9b61ad Mon Sep 17 00:00:00 2001 From: Steve Pfister Date: Fri, 6 Feb 2026 15:24:25 -0500 Subject: [PATCH 3/8] Update backport email template to use PR description verbatim Per feedback, the email content should come directly from the backport PR description to ensure consistency. Updated template to: - Explicitly instruct users to copy sections from their PR - Add DESCRIPTION and main PR sections to match servicing template - Standardize placeholder format to UPPERCASE_WITH_UNDERSCORES --- .github/BACKPORT_EMAIL_TEMPLATE.md | 31 ++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/.github/BACKPORT_EMAIL_TEMPLATE.md b/.github/BACKPORT_EMAIL_TEMPLATE.md index 4acef39b31d387..c3e2ee6a28cff6 100644 --- a/.github/BACKPORT_EMAIL_TEMPLATE.md +++ b/.github/BACKPORT_EMAIL_TEMPLATE.md @@ -2,11 +2,16 @@ Use this template when emailing Tactics to request approval for a backport to a release branch. -> **Note:** Most email clients (Outlook, Gmail, etc.) don't render Markdown. Copy the template below and the section headers will display as bold text. If your email client supports rich text, you can manually increase the header font size. +> **Important:** The email content should come directly from your backport PR description +> (see `servicing_pull_request_template.md`). Do not write different text for the email — +> copy the sections verbatim from the PR to ensure consistency. + +> **Note:** Most email clients (Outlook, Gmail, etc.) don't render Markdown. The section +> headers use `**bold**` syntax which appears with asterisks in plain-text emails. --- -**Subject:** [release/X.0] Backport request: (#) +**Subject:** [release/X.0] Backport request: (#) --- @@ -14,28 +19,34 @@ Hello Tactics, Please consider https://github.com/dotnet/runtime/pull/ for backporting into release/X.0. +Fixes https://github.com/dotnet/runtime/issues/ + +main PR: + + + +**DESCRIPTION** + + + **CUSTOMER IMPACT** - [ ] Customer reported - [ ] Found internally - - -Fixes https://github.com/dotnet/runtime/issues/ + **REGRESSION** - [ ] Yes - [ ] No - + **TESTING** - + **RISK** - - - + From 5d301dedb5ed70d69c6928f30a32729bfb387d46 Mon Sep 17 00:00:00 2001 From: Steve Pfister Date: Fri, 6 Feb 2026 22:26:58 -0500 Subject: [PATCH 4/8] Add backport-email skill --- .github/skills/backport-email/SKILL.md | 81 ++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 .github/skills/backport-email/SKILL.md diff --git a/.github/skills/backport-email/SKILL.md b/.github/skills/backport-email/SKILL.md new file mode 100644 index 00000000000000..a4dc24b87d010b --- /dev/null +++ b/.github/skills/backport-email/SKILL.md @@ -0,0 +1,81 @@ +--- +name: backport-email +description: Generate a backport email from a PR for sending to Tactics. Use when asked to create or generate a backport email. +--- + +# Backport Email Generation + +Generate a formatted email for requesting backport approval from Tactics. + +## Required Input + +Ask the user for the **backport PR URL** if not provided. Example: +- `https://github.com/dotnet/runtime/pull/124058` + +## Process + +1. **Fetch the backport PR** using the GitHub MCP tools to get: + - PR number and title + - Target release branch (e.g., `release/9.0`) + - PR description containing the servicing template sections + +2. **Extract from the PR description:** + - Link to the original main PR + - Link to the issue being fixed + - DESCRIPTION section + - CUSTOMER IMPACT section (including checkboxes) + - REGRESSION section (including checkboxes) + - TESTING section + - RISK section + +3. **Generate the email** following the template at `.github/BACKPORT_EMAIL_TEMPLATE.md` + +## Output Format + +Output the email as **plain text** (not markdown) since email clients don't render markdown. + +``` +Subject: [release/X.0] Backport request: (#<PR_NUMBER>) + +Hello Tactics, + +Please consider https://github.com/dotnet/runtime/pull/<PR_NUMBER> for backporting into release/X.0. + +Fixes https://github.com/dotnet/runtime/issues/<ISSUE_NUMBER> + +main PR: <MAIN_PR_LINK> + +**DESCRIPTION** + +<description text> + +**CUSTOMER IMPACT** + +- [ ] Customer reported +- [ ] Found internally + +<customer impact text> + +**REGRESSION** + +- [ ] Yes +- [ ] No + +<regression text> + +**TESTING** + +<testing text> + +**RISK** + +<risk text> +``` + +## Important Notes + +- **Do NOT attempt to open the email in Outlook or any email client.** Just output the formatted text for the user to copy. +- Preserve the `**bold**` section headers as they appear reasonably well in plain-text emails. +- Preserve the checkbox format `- [ ]` or `- [x]` from the PR description. +- Extract the release branch version (e.g., `9.0`) from the PR's base branch. +- If any section is missing from the PR description, note it and leave a placeholder. From 26c1a9d9298a1978783f62cd0dc6e20949479fab Mon Sep 17 00:00:00 2001 From: Steve Pfister <steve.pfister@microsoft.com> Date: Sat, 7 Feb 2026 15:50:18 -0500 Subject: [PATCH 5/8] Simplify backport email template to use PR description verbatim Instead of duplicating the servicing PR template sections in the email template, just instruct to copy the PR description verbatim. The servicing_pull_request_template.md remains the single source of truth for section structure. --- .github/BACKPORT_EMAIL_TEMPLATE.md | 36 ++------------------- .github/skills/backport-email/SKILL.md | 45 +++++--------------------- 2 files changed, 10 insertions(+), 71 deletions(-) diff --git a/.github/BACKPORT_EMAIL_TEMPLATE.md b/.github/BACKPORT_EMAIL_TEMPLATE.md index c3e2ee6a28cff6..9a16dc1559898e 100644 --- a/.github/BACKPORT_EMAIL_TEMPLATE.md +++ b/.github/BACKPORT_EMAIL_TEMPLATE.md @@ -1,13 +1,7 @@ # Backport Email Template Use this template when emailing Tactics to request approval for a backport to a release branch. - -> **Important:** The email content should come directly from your backport PR description -> (see `servicing_pull_request_template.md`). Do not write different text for the email — -> copy the sections verbatim from the PR to ensure consistency. - -> **Note:** Most email clients (Outlook, Gmail, etc.) don't render Markdown. The section -> headers use `**bold**` syntax which appears with asterisks in plain-text emails. +The body of the email should be the PR description verbatim (from `servicing_pull_request_template.md`). --- @@ -23,30 +17,4 @@ Fixes https://github.com/dotnet/runtime/issues/<ISSUE_NUMBER> main PR: <MAIN_PR_LINK> -<!-- Copy the following sections verbatim from your backport PR description --> - -**DESCRIPTION** - -<Copy from PR: Description section> - -**CUSTOMER IMPACT** - -- [ ] Customer reported -- [ ] Found internally - -<Copy from PR: Customer Impact section> - -**REGRESSION** - -- [ ] Yes -- [ ] No - -<Copy from PR: Regression section> - -**TESTING** - -<Copy from PR: Testing section> - -**RISK** - -<Copy from PR: Risk section> +<Copy the PR description verbatim> diff --git a/.github/skills/backport-email/SKILL.md b/.github/skills/backport-email/SKILL.md index a4dc24b87d010b..ea9232ac2bb0ad 100644 --- a/.github/skills/backport-email/SKILL.md +++ b/.github/skills/backport-email/SKILL.md @@ -17,18 +17,14 @@ Ask the user for the **backport PR URL** if not provided. Example: 1. **Fetch the backport PR** using the GitHub MCP tools to get: - PR number and title - Target release branch (e.g., `release/9.0`) - - PR description containing the servicing template sections + - PR description (filled in from `servicing_pull_request_template.md`) -2. **Extract from the PR description:** - - Link to the original main PR - - Link to the issue being fixed - - DESCRIPTION section - - CUSTOMER IMPACT section (including checkboxes) - - REGRESSION section (including checkboxes) - - TESTING section - - RISK section +2. **Read the email template** at `.github/BACKPORT_EMAIL_TEMPLATE.md` -3. **Generate the email** following the template at `.github/BACKPORT_EMAIL_TEMPLATE.md` +3. **Generate the email** by: + - Filling in the subject line with the release branch, PR title, and PR number + - Extracting the issue link and main PR link from the PR description + - Copying the PR description verbatim as the email body ## Output Format @@ -45,37 +41,12 @@ Fixes https://github.com/dotnet/runtime/issues/<ISSUE_NUMBER> main PR: <MAIN_PR_LINK> -**DESCRIPTION** - -<description text> - -**CUSTOMER IMPACT** - -- [ ] Customer reported -- [ ] Found internally - -<customer impact text> - -**REGRESSION** - -- [ ] Yes -- [ ] No - -<regression text> - -**TESTING** - -<testing text> - -**RISK** - -<risk text> +<PR description verbatim> ``` ## Important Notes - **Do NOT attempt to open the email in Outlook or any email client.** Just output the formatted text for the user to copy. -- Preserve the `**bold**` section headers as they appear reasonably well in plain-text emails. -- Preserve the checkbox format `- [ ]` or `- [x]` from the PR description. +- Copy the PR description verbatim — do not rewrite or restructure it. - Extract the release branch version (e.g., `9.0`) from the PR's base branch. - If any section is missing from the PR description, note it and leave a placeholder. From 2ca2a09bbb88c1b7ddc46cedb89c857a6c4b562c Mon Sep 17 00:00:00 2001 From: Steve Pfister <steve.pfister@microsoft.com> Date: Sat, 7 Feb 2026 16:12:50 -0500 Subject: [PATCH 6/8] Move backport email template into skill directory --- .github/{ => skills/backport-email}/BACKPORT_EMAIL_TEMPLATE.md | 0 .github/skills/backport-email/SKILL.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename .github/{ => skills/backport-email}/BACKPORT_EMAIL_TEMPLATE.md (100%) diff --git a/.github/BACKPORT_EMAIL_TEMPLATE.md b/.github/skills/backport-email/BACKPORT_EMAIL_TEMPLATE.md similarity index 100% rename from .github/BACKPORT_EMAIL_TEMPLATE.md rename to .github/skills/backport-email/BACKPORT_EMAIL_TEMPLATE.md diff --git a/.github/skills/backport-email/SKILL.md b/.github/skills/backport-email/SKILL.md index ea9232ac2bb0ad..30069a0f930c54 100644 --- a/.github/skills/backport-email/SKILL.md +++ b/.github/skills/backport-email/SKILL.md @@ -19,7 +19,7 @@ Ask the user for the **backport PR URL** if not provided. Example: - Target release branch (e.g., `release/9.0`) - PR description (filled in from `servicing_pull_request_template.md`) -2. **Read the email template** at `.github/BACKPORT_EMAIL_TEMPLATE.md` +2. **Read the email template** at `.github/skills/backport-email/BACKPORT_EMAIL_TEMPLATE.md` 3. **Generate the email** by: - Filling in the subject line with the release branch, PR title, and PR number From c5c81c1fe4f72740813725cde582289c1ae309d5 Mon Sep 17 00:00:00 2001 From: Steve Pfister <steve.pfister@microsoft.com> Date: Sat, 7 Feb 2026 16:35:03 -0500 Subject: [PATCH 7/8] Move backport email template to templates/ subdirectory --- .github/skills/backport-email/SKILL.md | 2 +- .../backport-email/{ => templates}/BACKPORT_EMAIL_TEMPLATE.md | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename .github/skills/backport-email/{ => templates}/BACKPORT_EMAIL_TEMPLATE.md (100%) diff --git a/.github/skills/backport-email/SKILL.md b/.github/skills/backport-email/SKILL.md index 30069a0f930c54..eb2cf141321706 100644 --- a/.github/skills/backport-email/SKILL.md +++ b/.github/skills/backport-email/SKILL.md @@ -19,7 +19,7 @@ Ask the user for the **backport PR URL** if not provided. Example: - Target release branch (e.g., `release/9.0`) - PR description (filled in from `servicing_pull_request_template.md`) -2. **Read the email template** at `.github/skills/backport-email/BACKPORT_EMAIL_TEMPLATE.md` +2. **Read the email template** at `.github/skills/backport-email/templates/BACKPORT_EMAIL_TEMPLATE.md` 3. **Generate the email** by: - Filling in the subject line with the release branch, PR title, and PR number diff --git a/.github/skills/backport-email/BACKPORT_EMAIL_TEMPLATE.md b/.github/skills/backport-email/templates/BACKPORT_EMAIL_TEMPLATE.md similarity index 100% rename from .github/skills/backport-email/BACKPORT_EMAIL_TEMPLATE.md rename to .github/skills/backport-email/templates/BACKPORT_EMAIL_TEMPLATE.md From 803f36e0b44a3458a21139a4825d6520c6943b86 Mon Sep 17 00:00:00 2001 From: Steve Pfister <steve.pfister@microsoft.com> Date: Sat, 7 Feb 2026 18:33:32 -0500 Subject: [PATCH 8/8] Update backport-email skill to reference backport.yml template --- .github/skills/backport-email/SKILL.md | 2 +- .../skills/backport-email/templates/BACKPORT_EMAIL_TEMPLATE.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/skills/backport-email/SKILL.md b/.github/skills/backport-email/SKILL.md index eb2cf141321706..6a15fe6001ef20 100644 --- a/.github/skills/backport-email/SKILL.md +++ b/.github/skills/backport-email/SKILL.md @@ -17,7 +17,7 @@ Ask the user for the **backport PR URL** if not provided. Example: 1. **Fetch the backport PR** using the GitHub MCP tools to get: - PR number and title - Target release branch (e.g., `release/9.0`) - - PR description (filled in from `servicing_pull_request_template.md`) + - PR description (filled in from the `pr_description_template` in `.github/workflows/backport.yml`) 2. **Read the email template** at `.github/skills/backport-email/templates/BACKPORT_EMAIL_TEMPLATE.md` diff --git a/.github/skills/backport-email/templates/BACKPORT_EMAIL_TEMPLATE.md b/.github/skills/backport-email/templates/BACKPORT_EMAIL_TEMPLATE.md index 9a16dc1559898e..35d4836e353904 100644 --- a/.github/skills/backport-email/templates/BACKPORT_EMAIL_TEMPLATE.md +++ b/.github/skills/backport-email/templates/BACKPORT_EMAIL_TEMPLATE.md @@ -1,7 +1,7 @@ # Backport Email Template Use this template when emailing Tactics to request approval for a backport to a release branch. -The body of the email should be the PR description verbatim (from `servicing_pull_request_template.md`). +The body of the email should be the PR description verbatim (based on the `pr_description_template` in `.github/workflows/backport.yml`). ---