Skip to content

infra[notask]: add multi-repo coverage to DevOps PR status skill#2500

Merged
Proletter merged 9 commits into
mainfrom
infra/devops-pr-status-extra-repos
Jun 10, 2026
Merged

infra[notask]: add multi-repo coverage to DevOps PR status skill#2500
Proletter merged 9 commits into
mainfrom
infra/devops-pr-status-extra-repos

Conversation

@Proletter

@Proletter Proletter commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

🎯 What problem does this PR solve?

  • The qv-devops-pr-status dashboard only ever scanned the primary monorepo (tetherto/qvac), even though the SKILL.md prose advertised extraRepos multi-repo coverage that was never implemented in code. The DevOps pod owns work across ~two dozen ops/dev/research repos and had no single view of open PRs across them.
  • Supersedes the closed infra[notask]: extend qv-devops-pr-status to scan qvac-*/github-ops/oss-actions repos #2183, which attempted the same feature on a now-stale branch using a qvac-* glob + oss-actions. This PR uses an explicit curated extraRepos list (keeping glob support available for anyone who prefers it).

📝 How does it solve it?

  • Adds an optional extraRepos list to .github/teams/<pod>.json (validated in team.mjs, defaults to []). In --mode team, collectPRActivity scans the primary repo (path-filtered by ownedPaths) plus every open PR in each extra repo, where the pod is treated as the sole owner.
  • resolveExtraRepos accepts plain owner/name entries and owner/prefix-* globs (resolved per run via gh repo list). Repos the caller cannot read are skipped with a one-line stderr reason instead of aborting the run.
  • pr-status.mjs emits a Repos: scope header and renders extra-repo PRs as owner/repo#<num> (the monorepo keeps bare #<num>) across the active sections, the Excluded section, and JSON output.
  • --mode review / --mode my are unchanged (primary repo only), so qv-pr-mine and the daily-work-update consumer are unaffected.
  • Hardening from review:
    • The Excluded section is capped at 10 PRs per repo with a … +N more in <repo> summary, so a busy sole-owner extra repo can't bury the dashboard (--json still carries the full list).
    • gh repo list glob resolution warns when it hits the 1000-repo cap instead of silently missing repos.
    • extraRepos specs must be exactly owner/name; multi-segment specs (owner/group/name) are now rejected with a warning rather than silently truncated.
    • Team-dashboard re-review dedup is keyed on the repo-qualified prRef, so same-numbered PRs in different repos no longer mask each other.

🧪 How was it tested?

  • Ran node .cursor/skills/_lib/pr-skills/pr-status.mjs --pod devops --mode team --authors pod against the live curated list: scanned the monorepo + 19 reachable extra repos; the 7 unreachable qvac-research-* / qvac-model-tools repos were skipped with Could not resolve to a Repository reasons and the run continued.
  • Verified the per-repo Excluded cap: tetherto/qvac-workbench (11 excluded PRs) rendered 10 entries + … +1 more in tetherto/qvac-workbench — use --json for the full list.
  • Confirmed extra-repo PRs render as owner/repo#<num> and monorepo PRs stay bare #<num>; the Repos: header lists the primary repo + 19 extra.
  • Sanity-checked --mode my still scans only the primary repo.
  • node --check clean on the edited scripts; no linter errors.

Scope note: the curated extraRepos list has 26 entries; 7 (qvac-research-*, qvac-model-tools) are currently unreachable for the runner's account (private/no-access or renamed) and auto-activate once reachable.

🤖 Regenerated with Cursor (skill: /qv-devops-pr-create)

The pr-skills team dashboard only ever scanned the primary monorepo, even
though the qv-devops-pr-status SKILL.md described extraRepos coverage that
was never implemented. Build that coverage so the DevOps pod can see PR
activity across the ops/dev/research repos it owns, not just tetherto/qvac.

- team.mjs: parse optional extraRepos (validated string array, defaults [])
- pr-activity.mjs: fetch open PRs from primary repo + each extraRepos entry
  (pod is sole owner there, all PRs in-scope regardless of path), resolve
  glob entries via gh repo list, tag each PR with repo/prRef, and skip
  unreachable repos with a meaningful stderr reason
- pr-status.mjs: emit a Repos: summary header and render owner/repo#<num>
  refs for extra-repo PRs (primary repo keeps bare #<num>), incl. JSON
- devops.json: add the curated extraRepos list (qvac stays primary)
- SKILL.md + README.md: reconcile docs with the implemented behavior

review/my modes are unchanged (primary repo only), so qv-pr-mine and the
daily-work-update consumer are unaffected.
@Proletter Proletter requested review from a team as code owners June 9, 2026 12:43
Proletter and others added 5 commits June 9, 2026 13:47
tetherto/oss-actions is a DevOps-owned shared GitHub Actions repo that was
missing from the curated extraRepos list. Add it (and update the SKILL.md
Ops listing) so the dashboard scans it alongside github-ops.
Extend the DevOps extraRepos list with the org/qvac ops + CI repos the pod
owns: qvac-actions, qvac-devops, qvac-testops, release-ops, data-github-ops.
Update the SKILL.md Ops listing to match. Validated: all five resolve and
are scanned (19 reachable extras total).
classifyTeamPRs de-duped the re-review vs stale/active buckets using a Set
keyed on the bare PR number. Now that the dashboard spans multiple repos via
extraRepos, numbers are no longer unique, so a re-review PR could mask a
same-numbered stale/active PR in a different repo and silently drop it from
every section. Key the set on the repo-qualified prRef instead.
Address review findings on the multi-repo DevOps PR-status dashboard:

- pr-status.mjs: cap the Excluded section at 10 rendered PRs per repo with a
  "+N more in <repo>" summary, so a busy sole-owner extraRepos entry (or a pile
  of bot PRs) can't bury the dashboard. --json still carries the full list.
  Drop the now-inaccurate "touches pod paths" wording from the section header.
- pr-activity.mjs: warn when an org's `gh repo list` hits the 1000-repo cap so
  glob resolution can no longer silently miss repos; require extraRepos specs to
  be exactly owner/name (reject "owner/group/name" instead of truncating it).
- README.md: document the per-repo Excluded cap.
@github-actions

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Tier-based Approval Status

**PR Tier:** TIER1

**Current Status:** ✅ APPROVED

**Requirements:**
- 1 Team Member approval ✅ (2/1)
- 1 Team Lead OR Management approval ✅ (1/1)



---
*This comment is automatically updated when reviews change.*

@Proletter

Copy link
Copy Markdown
Collaborator Author

/review

@Proletter Proletter merged commit 8ae2741 into main Jun 10, 2026
9 checks passed
@Proletter Proletter deleted the infra/devops-pr-status-extra-repos branch June 10, 2026 10:49
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.

4 participants