From 5464cbe905a2bb44148a32e1c0eea469b21241a8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 May 2026 09:34:51 +0000 Subject: [PATCH 1/3] Initial plan From f34ad24bec5f107c27e9342e289655117ea23639 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 May 2026 09:38:38 +0000 Subject: [PATCH 2/3] fix: align skill layer precedence in entry.md with read.md Agent-Logs-Url: https://github.com/microsoft/BCQuality/sessions/5a790e0d-73db-4325-875d-62608497fe01 Co-authored-by: JeremyVyska <35526546+JeremyVyska@users.noreply.github.com> --- skills/entry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/entry.md b/skills/entry.md index d63ca2e..0ca0e07 100644 --- a/skills/entry.md +++ b/skills/entry.md @@ -54,7 +54,7 @@ Narrow the relevant set to the skills that will actually be dispatched: 1. **Goal match.** Score each candidate's `description` and `id` against `task-context.goal`. Drop candidates that do not plausibly address the goal; record them in `skipped` with `reason: "goal-mismatch"`. Scoring is implementation-defined; agents MUST prefer exact keyword overlap before fuzzy signals. 2. **Super-skill precedence.** When a super-skill and any skill listed in its `sub-skills` are both in the remaining set, the super-skill supersedes the sub-skill **only when the goal is a broader match for the super-skill than for the sub-skill**. When the goal specifically names a concern the sub-skill handles (for example, goal = *"performance review"* with `al-code-review` and `al-performance-review` both present), the sub-skill wins and the super-skill is dropped with `reason: "narrower-sub-skill-selected"`. Otherwise the super-skill wins and each listed sub-skill in the set is dropped with `reason: "superseded-by-super-skill"`. The principle is: Entry dispatches the narrowest skill that satisfies the goal. A dropped sub-skill's `skipped` entry MUST carry `superseded-by` naming the super-skill that won; a dropped super-skill's entry MUST carry `superseded-by` naming the winning sub-skill. -3. **Layer precedence.** When two remaining candidates share the same `id` across layers, keep the highest-precedence one. Skill layer precedence is `/custom/` over `/community/` over `/microsoft/` — the same ordering READ defines for knowledge files. Drop the losers with `reason: "layer-precedence"` and `superseded-by` naming the winning path. +3. **Layer precedence.** When two remaining candidates share the same `id` across layers, keep the highest-precedence one. Skill layer precedence is `/custom/` over `/microsoft/` over `/community/` — the same ordering READ defines for knowledge files. Drop the losers with `reason: "layer-precedence"` and `superseded-by` naming the winning path. Each dropped candidate appears in `skipped[]` at most once; record the first reason that caused the drop. From 5596321ba642bbcf361335e173c842eb3a97a889 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 22 May 2026 09:55:35 +0000 Subject: [PATCH 3/3] fix: correct layer precedence to custom > community > microsoft in both entry.md and read.md Agent-Logs-Url: https://github.com/microsoft/BCQuality/sessions/3fac9b79-8598-4dfb-814c-6acbb1afe8a3 Co-authored-by: JeremyVyska <35526546+JeremyVyska@users.noreply.github.com> --- skills/entry.md | 2 +- skills/read.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/skills/entry.md b/skills/entry.md index 0ca0e07..d63ca2e 100644 --- a/skills/entry.md +++ b/skills/entry.md @@ -54,7 +54,7 @@ Narrow the relevant set to the skills that will actually be dispatched: 1. **Goal match.** Score each candidate's `description` and `id` against `task-context.goal`. Drop candidates that do not plausibly address the goal; record them in `skipped` with `reason: "goal-mismatch"`. Scoring is implementation-defined; agents MUST prefer exact keyword overlap before fuzzy signals. 2. **Super-skill precedence.** When a super-skill and any skill listed in its `sub-skills` are both in the remaining set, the super-skill supersedes the sub-skill **only when the goal is a broader match for the super-skill than for the sub-skill**. When the goal specifically names a concern the sub-skill handles (for example, goal = *"performance review"* with `al-code-review` and `al-performance-review` both present), the sub-skill wins and the super-skill is dropped with `reason: "narrower-sub-skill-selected"`. Otherwise the super-skill wins and each listed sub-skill in the set is dropped with `reason: "superseded-by-super-skill"`. The principle is: Entry dispatches the narrowest skill that satisfies the goal. A dropped sub-skill's `skipped` entry MUST carry `superseded-by` naming the super-skill that won; a dropped super-skill's entry MUST carry `superseded-by` naming the winning sub-skill. -3. **Layer precedence.** When two remaining candidates share the same `id` across layers, keep the highest-precedence one. Skill layer precedence is `/custom/` over `/microsoft/` over `/community/` — the same ordering READ defines for knowledge files. Drop the losers with `reason: "layer-precedence"` and `superseded-by` naming the winning path. +3. **Layer precedence.** When two remaining candidates share the same `id` across layers, keep the highest-precedence one. Skill layer precedence is `/custom/` over `/community/` over `/microsoft/` — the same ordering READ defines for knowledge files. Drop the losers with `reason: "layer-precedence"` and `superseded-by` naming the winning path. Each dropped candidate appears in `skipped[]` at most once; record the first reason that caused the drop. diff --git a/skills/read.md b/skills/read.md index 08bce2c..e071d1d 100644 --- a/skills/read.md +++ b/skills/read.md @@ -80,8 +80,8 @@ The default consumption model is **additive**: an action skill sees files from e When two files give **directly contradictory normative guidance**, the conflict is resolved by layer precedence: -1. `/custom/` wins over `/microsoft/` and `/community/`. -2. `/microsoft/` wins over `/community/`. +1. `/custom/` wins over `/community/` and `/microsoft/`. +2. `/community/` wins over `/microsoft/`. A conflict exists when both of the following are true: