From c6edae0dda930b41354adfe063e9c69ead427849 Mon Sep 17 00:00:00 2001 From: bot Date: Tue, 19 May 2026 16:58:08 -0600 Subject: [PATCH 1/4] Clarify SR vs preview channel mapping in dependency-flow skill Servicing release branches (release/X.0.Yxx-srN) all map to the single general .NET X.0.Yxx SDK channel. Only -previewN branches get dedicated per-preview channels. The skill previously implied preview channels were the only special case, leading to confusion about whether SR releases have their own channels (they do not). Adds: - Explicit branch -> channel mapping rules for SR, preview, and main/dev - A guard telling the agent to verify against a sibling SR before constructing an add-default-channel command - A worked example for adding a new SR branch via darc add-default-channel Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/dependency-flow/SKILL.md | 26 ++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/skills/dependency-flow/SKILL.md b/.github/skills/dependency-flow/SKILL.md index e0b767362fd1..4e1a400b01b7 100644 --- a/.github/skills/dependency-flow/SKILL.md +++ b/.github/skills/dependency-flow/SKILL.md @@ -34,7 +34,31 @@ MAUI uses two types of channels: ### SDK Channels (automatic) Pattern: `.NET X.0.Yxx SDK` (e.g., `.NET 10.0.1xx SDK`) -These are configured via default channel mappings — builds are **automatically** added when they complete on a mapped branch. Preview releases use `.NET X.0.Yxx SDK Preview N`. +These are configured via default channel mappings — builds are **automatically** added when they complete on a mapped branch. + +**Branch → channel mapping rules:** +- **Servicing release branches** (`release/X.0.Yxx-srN`) all map to the **single** general SDK channel for that band (e.g., `release/10.0.1xx-sr6`, `release/10.0.1xx-sr7`, etc. all map to `.NET 10.0.1xx SDK`). There is **no** `.NET X.0.Yxx SDK SRn` channel — do not invent one. +- **Preview release branches** (`release/X.0.Yxx-previewN`) map to dedicated per-preview channels (e.g., `release/11.0.1xx-preview3` → `.NET 11.0.1xx SDK Preview 3`). +- **Main/development branches** (`main`, `netN.0`, `release/X.0.Yxx`) map to the general SDK channel for that band. + +**Always verify by listing existing mappings before constructing a command:** +```bash +darc get-default-channels --source-repo https://github.com/dotnet/maui +``` +Find a sibling branch (e.g., the previous SR) and copy its channel exactly. + +### Adding a new branch to the default channel mapping + +Common case: a new servicing release branch is created (e.g., `release/10.0.1xx-sr7`) and needs to be added so its builds flow automatically. + +```bash +darc add-default-channel \ + --channel ".NET 10.0.1xx SDK" \ + --branch release/10.0.1xx-sr7 \ + --repo https://github.com/dotnet/maui +``` + +⚠️ `add-default-channel` is in the explicit-confirmation list below. Show the user the exact command and wait for approval before running. ### Workload Release Channels (manual promotion) Pattern: `.NET X Workload Release` (e.g., `.NET 10 Workload Release`) From 8bdac516d3bf9bf688dc22db4d326e19599d90cc Mon Sep 17 00:00:00 2001 From: bot Date: Wed, 20 May 2026 10:48:36 -0600 Subject: [PATCH 2/4] Address review feedback: move confirmation gate above command, broaden channel patterns - Move the explicit-confirmation warning ABOVE the darc add-default-channel code block to match the pattern established in the 'Promote a build' workflow (lines 156-159), so agents that snippet-extract the fenced command can't miss the gate. - Reframe 'Branch -> channel mapping rules' as 'Common branch -> channel patterns (not exhaustive)' and add coverage for RC branches and other shapes (-rc2.1, -preview6.1, inflight/*, vendor-suffixed branches), so the list doesn't read as a complete enumeration. The 'always verify' guardrail remains immediately below the bullets. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/dependency-flow/SKILL.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/skills/dependency-flow/SKILL.md b/.github/skills/dependency-flow/SKILL.md index 4e1a400b01b7..6410b832dbe0 100644 --- a/.github/skills/dependency-flow/SKILL.md +++ b/.github/skills/dependency-flow/SKILL.md @@ -36,21 +36,25 @@ Pattern: `.NET X.0.Yxx SDK` (e.g., `.NET 10.0.1xx SDK`) These are configured via default channel mappings — builds are **automatically** added when they complete on a mapped branch. -**Branch → channel mapping rules:** +**Common branch → channel patterns (not exhaustive — always verify with the command below):** - **Servicing release branches** (`release/X.0.Yxx-srN`) all map to the **single** general SDK channel for that band (e.g., `release/10.0.1xx-sr6`, `release/10.0.1xx-sr7`, etc. all map to `.NET 10.0.1xx SDK`). There is **no** `.NET X.0.Yxx SDK SRn` channel — do not invent one. - **Preview release branches** (`release/X.0.Yxx-previewN`) map to dedicated per-preview channels (e.g., `release/11.0.1xx-preview3` → `.NET 11.0.1xx SDK Preview 3`). +- **RC release branches** (`release/X.0.Yxx-rcN`) map to dedicated per-RC channels (e.g., `.NET 10.0.1xx SDK RC 2`). MAUI defaults for these are only active during the corresponding pre-release cycle. - **Main/development branches** (`main`, `netN.0`, `release/X.0.Yxx`) map to the general SDK channel for that band. +- **Other shapes** also exist in dotnet/maui from time to time — point-sub-release branches (`-rc2.1`, `-preview6.1`), `inflight/*` mirrors, and vendor-suffixed branches (e.g., `release/10.0.1xx-meaipreview1`). Do not assume the four bullets above are complete — always check. **Always verify by listing existing mappings before constructing a command:** ```bash darc get-default-channels --source-repo https://github.com/dotnet/maui ``` -Find a sibling branch (e.g., the previous SR) and copy its channel exactly. +Find a sibling branch (e.g., the previous SR, the previous RC, or the previous preview) and copy its channel exactly. ### Adding a new branch to the default channel mapping Common case: a new servicing release branch is created (e.g., `release/10.0.1xx-sr7`) and needs to be added so its builds flow automatically. +⚠️ `add-default-channel` is in the explicit-confirmation list below. Show the user the exact command and wait for approval before running: + ```bash darc add-default-channel \ --channel ".NET 10.0.1xx SDK" \ @@ -58,8 +62,6 @@ darc add-default-channel \ --repo https://github.com/dotnet/maui ``` -⚠️ `add-default-channel` is in the explicit-confirmation list below. Show the user the exact command and wait for approval before running. - ### Workload Release Channels (manual promotion) Pattern: `.NET X Workload Release` (e.g., `.NET 10 Workload Release`) From fd2ca2db45fae9591c86fc19db28fe634511c466 Mon Sep 17 00:00:00 2001 From: bot Date: Wed, 20 May 2026 11:13:20 -0600 Subject: [PATCH 3/4] Address review round 2: tighten RC bullet and sibling-find guidance The round-1 RC bullet used present-tense 'map to' even though dotnet/maui has zero active RC default-channel mappings right now (verified via 'darc get-default-channels --source-repo https://github.com/dotnet/maui'). The sibling-find verify step also listed 'the previous RC' as a hint, which silently returns nothing for RC branches outside an active cycle and leaves the agent without a fallback. - Reword the RC bullet to 'use ... only while their cycle is active', explicitly note that mappings are removed after the RC ships, and add an explicit 'stop and ask release engineering' escalation. - Drop 'the previous RC' from the sibling examples in the verify step and replace with a no-sibling escalation clause covering RC and any other branch shape that lacks an active mapping. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/dependency-flow/SKILL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/skills/dependency-flow/SKILL.md b/.github/skills/dependency-flow/SKILL.md index 6410b832dbe0..2f879e46d723 100644 --- a/.github/skills/dependency-flow/SKILL.md +++ b/.github/skills/dependency-flow/SKILL.md @@ -39,7 +39,7 @@ These are configured via default channel mappings — builds are **automatically **Common branch → channel patterns (not exhaustive — always verify with the command below):** - **Servicing release branches** (`release/X.0.Yxx-srN`) all map to the **single** general SDK channel for that band (e.g., `release/10.0.1xx-sr6`, `release/10.0.1xx-sr7`, etc. all map to `.NET 10.0.1xx SDK`). There is **no** `.NET X.0.Yxx SDK SRn` channel — do not invent one. - **Preview release branches** (`release/X.0.Yxx-previewN`) map to dedicated per-preview channels (e.g., `release/11.0.1xx-preview3` → `.NET 11.0.1xx SDK Preview 3`). -- **RC release branches** (`release/X.0.Yxx-rcN`) map to dedicated per-RC channels (e.g., `.NET 10.0.1xx SDK RC 2`). MAUI defaults for these are only active during the corresponding pre-release cycle. +- **RC release branches** (`release/X.0.Yxx-rcN`) use dedicated per-RC channels (e.g., `.NET 10.0.1xx SDK RC 2`) **only while their cycle is active** — these default mappings are removed after the RC ships, so `get-default-channels` will show no RC sibling to copy from. If you can't find a sibling, stop and ask release engineering rather than guessing the channel name. - **Main/development branches** (`main`, `netN.0`, `release/X.0.Yxx`) map to the general SDK channel for that band. - **Other shapes** also exist in dotnet/maui from time to time — point-sub-release branches (`-rc2.1`, `-preview6.1`), `inflight/*` mirrors, and vendor-suffixed branches (e.g., `release/10.0.1xx-meaipreview1`). Do not assume the four bullets above are complete — always check. @@ -47,7 +47,7 @@ These are configured via default channel mappings — builds are **automatically ```bash darc get-default-channels --source-repo https://github.com/dotnet/maui ``` -Find a sibling branch (e.g., the previous SR, the previous RC, or the previous preview) and copy its channel exactly. +Find a sibling branch (e.g., the previous SR or the previous preview) and copy its channel exactly. If no sibling exists (common for RC branches outside an active cycle), stop and ask release engineering — do not guess the channel name. ### Adding a new branch to the default channel mapping From fdb1359b940b5abe9a488d2fb2330d03aa80e962 Mon Sep 17 00:00:00 2001 From: bot Date: Wed, 20 May 2026 11:24:53 -0600 Subject: [PATCH 4/4] Address review round 3: align RC escalation with file's 'tell the user' pattern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The phrase 'ask release engineering' (introduced in round 2) is operationally undefined for an LLM agent — the agent has no direct channel to release engineering. Everywhere else this skill escalates it tells the agent what to do with the user as the directly addressable principal (lines 56, 98, 144, 159 all use 'show the user' / 'tell the user'). Reword both new sentences to match: - Line 42: 'stop and tell the user to escalate to release engineering' - Line 50: 'stop and tell the user that release engineering needs to configure the channel mapping' Closes the residual gap where an agent could plausibly halt silently, hallucinate having contacted someone, or fall back to guessing the channel name. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .github/skills/dependency-flow/SKILL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/skills/dependency-flow/SKILL.md b/.github/skills/dependency-flow/SKILL.md index 2f879e46d723..a23c5fe7e1c4 100644 --- a/.github/skills/dependency-flow/SKILL.md +++ b/.github/skills/dependency-flow/SKILL.md @@ -39,7 +39,7 @@ These are configured via default channel mappings — builds are **automatically **Common branch → channel patterns (not exhaustive — always verify with the command below):** - **Servicing release branches** (`release/X.0.Yxx-srN`) all map to the **single** general SDK channel for that band (e.g., `release/10.0.1xx-sr6`, `release/10.0.1xx-sr7`, etc. all map to `.NET 10.0.1xx SDK`). There is **no** `.NET X.0.Yxx SDK SRn` channel — do not invent one. - **Preview release branches** (`release/X.0.Yxx-previewN`) map to dedicated per-preview channels (e.g., `release/11.0.1xx-preview3` → `.NET 11.0.1xx SDK Preview 3`). -- **RC release branches** (`release/X.0.Yxx-rcN`) use dedicated per-RC channels (e.g., `.NET 10.0.1xx SDK RC 2`) **only while their cycle is active** — these default mappings are removed after the RC ships, so `get-default-channels` will show no RC sibling to copy from. If you can't find a sibling, stop and ask release engineering rather than guessing the channel name. +- **RC release branches** (`release/X.0.Yxx-rcN`) use dedicated per-RC channels (e.g., `.NET 10.0.1xx SDK RC 2`) **only while their cycle is active** — these default mappings are removed after the RC ships, so `get-default-channels` will show no RC sibling to copy from. If you can't find a sibling, stop and tell the user to escalate to release engineering — do not guess the channel name. - **Main/development branches** (`main`, `netN.0`, `release/X.0.Yxx`) map to the general SDK channel for that band. - **Other shapes** also exist in dotnet/maui from time to time — point-sub-release branches (`-rc2.1`, `-preview6.1`), `inflight/*` mirrors, and vendor-suffixed branches (e.g., `release/10.0.1xx-meaipreview1`). Do not assume the four bullets above are complete — always check. @@ -47,7 +47,7 @@ These are configured via default channel mappings — builds are **automatically ```bash darc get-default-channels --source-repo https://github.com/dotnet/maui ``` -Find a sibling branch (e.g., the previous SR or the previous preview) and copy its channel exactly. If no sibling exists (common for RC branches outside an active cycle), stop and ask release engineering — do not guess the channel name. +Find a sibling branch (e.g., the previous SR or the previous preview) and copy its channel exactly. If no sibling exists (common for RC branches outside an active cycle), stop and tell the user that release engineering needs to configure the channel mapping — do not guess the channel name. ### Adding a new branch to the default channel mapping