Skip to content

feat: add triage-board skill for the Fluent Unified project board#36250

Draft
tudorpopams wants to merge 2 commits into
microsoft:masterfrom
tudorpopams:feat/triage-board-skill
Draft

feat: add triage-board skill for the Fluent Unified project board#36250
tudorpopams wants to merge 2 commits into
microsoft:masterfrom
tudorpopams:feat/triage-board-skill

Conversation

@tudorpopams
Copy link
Copy Markdown
Contributor

Splits the triage-board skill 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-issues skill, the visual-test doc fixes, and the contributing.md change. The triage-board files will be removed from that branch in a follow-up force-push.

Commits

Both commits cherry-picked from feat/triage-issues-skill:

  • b9acf75c7f feat: add triage-board skill for the Fluent Unified project board
  • c5c8121baa refactor(triage-board): extract paginated fetch into script + harden preflight

The original feat: commit added a 195-line references/graphql-snippets.md; the refactor: commit replaced it with the extracted script.

tudorpopams and others added 2 commits May 26, 2026 14:20
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant