Skip to content

[Fan-out] Convert consumers' pr-review to @pr-review/stable callers (ring-staged) #536

Closed

Description

@don-petry

Parent: #497 · Work type: Infra · Fan-out (B), ring-staged.

Convert the 4 consumer repos (bmad-bgreat-suite, google-app-scripts, markets, ContentTwin) from vendored copies (the deploy clobber) to thin reusable callers pinned to @pr-review/stable (and @dev-lead/stable). Stage by ring: ring 1 = one low-traffic consumer first, validate healthy, then ring 2 = the rest.

Acceptance: no consumer runs @main or a vendored copy; each pins a channel tag; DON_PETRY_BOT_GH_PAT_CLASSIC (visibility=all) reaches them. Retire deploy-pr-review.yml/force-deploy-pr-review.yml once converted.

Blocked-by dev-lead self-host (so dev-lead/stable is a real pinned release before consumers reference it).

Activity

  1. changed the title [-][Fan-out] Convert 4 consumer repos to @stable reusable callers (ring-staged)[/-] [+][Fan-out] Convert consumers' pr-review to @pr-review/stable callers (ring-staged)[/+] on Jun 10, 2026
  2. don-petry commented on Jun 10, 2026

    @don-petry
    CollaboratorAuthor

    Re-scoped + unblocked from #535. Consumers already call the wrapper pr-review-reusable.yml@main with secrets: inherit, but the wrapper (a) pins pr-review.yml@main (bleeding), (b) passes no agent_ref (scripts unpinned, #506), and (c) drops DON_PETRY_BOT_GH_PAT_CLASSIC (its explicit secret list omits it) → consumers can't approve. Fix per consumer: call pr-review.yml@pr-review/stable directly with agent_ref: pr-review/stable + secrets: inherit (mirrors .github-private's pr-review-trigger.yml). Ring 1 = one low-traffic consumer, validate, then ring 2. The dev-lead consumer pinning (@dev-lead/stable) is tracked separately and stays gated on #535.

  3. don-petry commented on Jun 10, 2026

    @don-petry
    CollaboratorAuthor

    Ring-1 (markets) surfaced a real bug (the value of ring-staging): pr-review.yml's 'Checkout agent repo' cloned the caller's repo (no repository:), so consumer runs tried markets@pr-review/stable (no such ref) → checkout failure. Worked for self-host only because the caller was .github-private. Fixed in PR #538 (explicit repository: petry-projects/.github-private). Will promote to v1.5.0 and re-validate markets#261 before ring-2.

  4. don-petry commented on Jun 10, 2026

    @don-petry
    CollaboratorAuthor

    Ring-2 fan-out progress (2026-06-10)

    Ring-1 (validated earlier): markets → @pr-review/stable (markets#262, merged). 3 latent fleet bugs caught & fixed: #538 (agent-repo checkout), #539 (own-check filter by workflowName), wrapper's dropped classic-PAT/triggers.

    Ring-2 lead — bmad-bgreat-suite (definitive fresh-approval validation):

    Ring-2 rollout status:

    Repo PR State
    ContentTwin #251 ✅ merged to main (all required checks green; OrgAdmin bypass)
    google-app-scripts #377 ✅ merged to main (all required checks green)
    bmad-bgreat-suite #290 ⚠️ validated & ready, merge-blocked by broken CodeQL required check (advanced/default conflict, #272) — no ruleset bypass for required status checks, and CodeQL never reports

    Acceptance: 3/4 consumers (markets, ContentTwin, google-app-scripts) now run @pr-review/stable directly — no @main, no vendored copy. bmad blocked only by pre-existing CodeQL infra debt (#272), not the conversion.

    Observation (latent, not actioned): the agent's CI gate treats non-required failing checks (e.g. SonarCloud Code Analysis, which isn't in any ruleset's required list) as ci-failing, so it won't self-approve mergeable PRs. Candidate hardening: align the gate to required checks only.

    🤖 Generated with Claude Code

  5. don-petry commented on Jun 10, 2026

    @don-petry
    CollaboratorAuthor

    Ring-2 COMPLETE — all 4 consumers on @pr-review/stable (2026-06-10)

    Repo PR State
    markets #262 ✅ merged (ring-1)
    ContentTwin #251 ✅ merged + smoke-validated on main
    google-app-scripts #377 ✅ merged + smoke-validated on main
    bmad-bgreat-suite #290 ✅ merged + smoke-validated on main

    Acceptance met: no consumer runs @main or a vendored copy; each pins the pr-review/stable channel with agent_ref; DON_PETRY_BOT_GH_PAT_CLASSIC reaches them via secrets: inherit. Promotions now roll out by moving the channel tag centrally — zero caller churn.

    bmad unblock (side quest): bmad#290 was deadlocked because the required CodeQL check had no producer (default-setup not-configured, no codeql.yml), and the rulesets have no bypass for required status checks — so every bmad PR was stuck. Fixed by enabling CodeQL default setup (actions language) via the code-scanning API. This is exactly what issue #47 / PR #239 (codeql-default-setup-not-configured) targeted — those, plus competing PR #281 (advanced codeql.yml) and #272, should be reconciled/closed now that default setup is live. This unblocks bmad's full PR backlog (~30 PRs), not just the conversion.

    Still open (Phase-1 remainder, not ring-2):

    🤖 Generated with Claude Code

  6. don-petry commented on Jun 10, 2026

    @don-petry
    CollaboratorAuthor

    #536 acceptance fully met ✅

    Cleanup complete (#542, merged): retired deploy-pr-review.yml, force-deploy-pr-review.yml, and the orphaned pr-review-reusable.yml wrapper. The vendor-clobber/indirection delivery mechanism is gone; channel-tag promotion replaces it.

    Notably, #542 self-approved through the ring-0 agent (fresh donpetry-bot APPROVED @ 12:39:29Z) and auto-merged on green — the self-host loop now works end-to-end on .github-private without admin override (it just needed the #534-thrash-cancelled dev-lead checks re-run first).

    Acceptance checklist

    • No consumer runs @main or a vendored copy — all 4 pin @pr-review/stable with agent_ref
    • DON_PETRY_BOT_GH_PAT_CLASSIC reaches them via secrets: inherit
    • Retire deploy-pr-review.yml / force-deploy-pr-review.yml (+ pr-review-reusable.yml)

    Surfaced for follow-up (separate issues)

    Ready to close once you've eyeballed it.

    🤖 Generated with Claude Code

  7. 33 remaining items

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    initiativeEpic / initiative tracking issue

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions