feat: add triage-board skill for the Fluent Unified project board#36250
Draft
tudorpopams wants to merge 2 commits into
Draft
feat: add triage-board skill for the Fluent Unified project board#36250tudorpopams wants to merge 2 commits into
tudorpopams wants to merge 2 commits into
Conversation
Introduces a new agent skill that triages items on the org-level
GitHub Project at microsoft/projects/395 ("Fluent UI - Unified").
The skill is deliberately distinct from the existing `triage-issues`
skill — that one handles repo-level Shield triage (labels + area
owner on `Needs: Triage 🔍`), while this one operates at the
project-board layer: it sets the `Team` single-select field on
board items and, when CODEOWNERS names a specific user, adds that
user as a GitHub-issue assignee. Neither skill touches the other's
surface.
Works cross-repo against microsoft/fluentui,
microsoft/fluentui-system-icons, and microsoft/fluentui-contrib.
CODEOWNERS is the source of truth for both team and individual
routing; the skill caches the three CODEOWNERS files per session
and maps team handles (@microsoft/cxe-prg, @microsoft/teams-prg,
@microsoft/fui-wc, etc.) to the board's fixed Team options via a
confident-vs-ambiguous mapping table in references/team-mapping.md.
Ambiguous handles (charting-team, northstar, etc.) are flagged for
human review rather than auto-routed.
Codifies two rules learned from the first real run against the
live board:
1. **View 6 mirroring.** The board's canonical "By team" triage
view (view 6) excludes items labeled `Resolution: Soft Close`,
`Type: Epic`, `Help Wanted ✨`, and `Needs: Triage 🔍`, plus
Status=Done, PRs, and closed state. The skill filters the same
set client-side so it only proposes team assignments for items
the human is actually looking at. Without this, soft-closed
stale v8 bugs got into the triage pool on the first run — they
shouldn't.
2. **v9 never routes to cxe-red.** cxe-red owns v8; v9 ownership
is cxe-prg (or teams-prg for specific packages). When
CODEOWNERS resolves to cxe-red but the issue carries the v9
label, the skill reroutes to the next mapped team (or cxe-prg)
and flags for human confirmation.
Also adds a two-part preflight at the top of the workflow: checks
both account permission on the repos (EMU vs non-EMU) and the
`project` OAuth scope on the active token (read:project is not
enough for `updateProjectV2ItemFieldValue`). Each failure mode has
its own surfaced message so the user can fix it without trial and
error.
Field and option IDs for the Team single-select are documented in
references/team-mapping.md as of this commit; a refresh query is
included so the skill can re-discover them if they ever rotate.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…preflight Address PR review feedback: - Move the paginated board fetch (GraphQL query + bash pagination loop + embedded Python filter heredocs) into scripts/fetch-untriaged.js. The inline bash+Python soup in graphql-snippets.md was the genuinely complex part and deserves to be code. - Keep the set/clear Team mutations inline in SKILL.md Step 5 since each is a single gh api graphql invocation. Wrapping these in scripts moved complexity rather than reducing it and made the skill less transparent to readers. - Delete references/graphql-snippets.md (now empty after the moves; surviving one-liners were already inlined in SKILL.md). - Add an explicit preflight check that the GitHub CLI is installed before running the auth/scope checks. - Replace absolute /Users/doidor/... CODEOWNERS paths in triage-board and triage-issues SKILL.md with repo-relative .github/CODEOWNERS so the examples work on any machine. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
tudorpopams
added a commit
to tudorpopams/fluentui
that referenced
this pull request
May 26, 2026
Removes the triage-board skill files from this PR so it can be reviewed independently as microsoft#36250. Addresses Hotell's review feedback that the combined PR was over 1k additions and easier to review in two pieces. The triage-board skill itself is unchanged, just relocated to its own branch (feat/triage-board-skill) and PR. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Splits the
triage-boardskill out of #36012 into its own PR, per Hotell's review feedback that the original PR was over 1k additions and would be easier to review in two pieces.What's here
.agents/skills/triage-board/SKILL.md— full skill definition for triaging the Fluent UI Unified org-level project board (microsoft/projects/395)..agents/skills/triage-board/references/team-mapping.md— CODEOWNERS prefix → Team field value table..agents/skills/triage-board/scripts/fetch-untriaged.js— paginated GraphQL fetch for items missing a Team value (originally inlined in SKILL.md; extracted out for testability)..claude/skills/triage-board/SKILL.md— Claude Code symlink.What's not here (deferred / out of scope)
evals/evals.json— removed; was not wired up to a runner. Will reintroduce when a real eval harness exists. See the same discussion in #36012.AGENTS.md— that file no longer lives in master, so the original add was dropped during cherry-pick.Relationship to #36012
After this lands, #36012 will be reduced to the
triage-issuesskill, thevisual-testdoc fixes, and thecontributing.mdchange. Thetriage-boardfiles will be removed from that branch in a follow-up force-push.Commits
Both commits cherry-picked from
feat/triage-issues-skill:b9acf75c7ffeat: add triage-board skill for the Fluent Unified project boardc5c8121baarefactor(triage-board): extract paginated fetch into script + harden preflightThe original
feat:commit added a 195-linereferences/graphql-snippets.md; therefactor:commit replaced it with the extracted script.