Files
awesome-copilot/.github/review-routing.yml
T
0c54bcee82 Phase 1: distributed CODEOWNERS and automated reviewer routing (#4184) (#4189)
* Phase 1: distributed CODEOWNERS and automated reviewer routing (#4184)

- Replace the individual default CODEOWNERS owner with the core-maintainer
  team and add domain team ownership for extensions, plugins, content,
  hooks, workflows, .github, and eng.
- Add .github/review-routing.yml as the single source of truth for reviewer
  pools, routes, labels, and SLA settings (ships in dry-run mode).
- Add eng/review-routing.mjs (+ unit tests) with business-day math,
  least-loaded reviewer selection, routing and escalation planning, and
  workflow_run artifact validation.
- Add Review Routing (workflow_run/dispatch/schedule), Review Routing Request
  (read-only needs-reviewer reader), and Review Escalation (weekday schedule)
  workflows.
- Add needs-reviewer, review-overdue, review-escalated to setup-labels.
- Document the model in docs/maintainers/review-routing.md.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Address review feedback on reviewer routing and escalation

- Escalate at routedOn + escalation business days (Mon -> Fri)
- Leave labels untouched when requestReviewers fails and fail the job
- Serialize read/plan/apply per PR across routing and escalation
- Treat Label PR Intent artifact labels as authoritative
- Re-route to an uncovered pool on head changes without restarting SLA
- Use the due-label timestamp as the review boundary
- Fall back to pool/escalation teams and report what was requested

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Address second-round review feedback on review routing (#4184)

- CODEOWNERS: route /hooks/ and /workflows/ to content reviewers, drop the
  separate /.github/workflows/ rule, and leave per-resource owner lines as on
  main (their removal is deferred to a separate cleanup).
- Routing: ignore pending requests for unavailable reviewers when checking
  coverage; needs-reviewer excludes prior reviewers and changes nothing when no
  new reviewer can be requested.
- Escalation comments show the actual routing date.
- Cap sweep matrices at 256 targets and defer the remainder.
- Docs: best-effort load balancing, matrix cap, and needs-reviewer semantics.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Route workflow and hooks labels to the content pool (#4184)

Drop the workflow-security reviewer pool per maintainer feedback: agentic
workflows and hooks are reviewed like other content, and the repository's
own GitHub Actions workflows stay with core maintainers.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Pin routing contract in tests; make CONTRIBUTING routing note dry-run aware

- Assert the exact label-to-pool mapping and priority order, pool set, and default/escalation pools for the shipped config.
- CONTRIBUTING.md: describe automatic routing as active only once dry_run is turned off.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* Simplify dry_run validation condition

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Aaron Powell <me@aaron-powell.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-10-01 00:51:10 +00:00

86 lines
2.9 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Review routing configuration — single source of truth for reviewer pools.
#
# Read by eng/review-routing.mjs from the Review Routing and Review Escalation
# workflows. See docs/maintainers/review-routing.md for the full operating model.
#
# Handles are GitHub logins without the leading "@". Team values use the
# "<org>/<team-slug>" form. Keep every pool at three or more reviewers with
# cross-time-zone coverage before turning off dry_run.
version: 1
# When true, workflows only log the actions they would take (no reviewer
# requests, labels, or comments). Set to false once the teams and pools below
# are populated.
dry_run: true # TODO: set to false after the reviewer pools are staffed.
sla:
# Business days (Monday–Friday, UTC, excluding holidays) after routing by
# which a first review is expected. The date is shown in the review-due label.
first_review_business_days: 2
# Business days after routing before the PR escalates to the core pool.
escalation_business_days: 4
# Optional non-working days (YYYY-MM-DD, UTC) skipped by business-day math.
holidays: []
labels:
needs_reviewer: needs-reviewer
due_prefix: "review-due:"
overdue: review-overdue
escalated: review-escalated
# Pool that receives escalations and acts as the last-resort fallback.
escalation_pool: core-maintainers
# Pool used when no intent label matches a route below.
default_pool: core-maintainers
pools:
core-maintainers:
team: github/awesome-copilot-core-maintainers
reviewers: [] # TODO: add at least three core maintainers.
backup: [] # TODO: optional; escalation already targets this pool.
canvas:
team: github/awesome-copilot-canvas-reviewers
reviewers: [] # TODO: add at least three canvas reviewers.
backup: [] # TODO: add backup reviewers for canvas extensions.
plugin:
team: github/awesome-copilot-plugin-reviewers
reviewers: [] # TODO: add at least three plugin reviewers.
backup: [] # TODO: add backup reviewers for plugins.
content:
team: github/awesome-copilot-content-reviewers
reviewers: [] # TODO: add at least three reviewers for skills, agents, and instructions.
backup: [] # TODO: add backup content reviewers.
# Intent labels (applied by .github/workflows/label-pr-intent*.yml) mapped to
# pools. Order is priority: the first route whose label is on the PR wins.
routes:
- label: canvas-extension
pool: canvas
- label: external-plugin
pool: plugin
- label: plugin
pool: plugin
- label: skills
pool: content
- label: agent
pool: content
- label: instructions
pool: content
- label: workflow
pool: content
- label: hooks
pool: content
- label: website-update
pool: core-maintainers
# Reviewers temporarily unavailable (vacation, leave). They are never selected.
unavailable: []
# PR authors that are never routed (for example, automation accounts).
skip_authors: []
# PRs carrying any of these labels are not routed or escalated.
skip_labels: []