feat(standards): all reusable workflows pin the moving stable channel tag#440
Conversation
… agentic reusables The dev-lead and pr-review agents (in .github-private) are self-hosting — they build, review, and ship changes to themselves. Pinning callers @main lets a broken change gate its own fix (the self-host circular dependency); a frozen @vn strands security fixes behind a manual re-pin of every caller. Ratify the moving per-agent channel-tag model: callers pin once to @<agent>/stable (@dev-lead/stable, @pr-review/stable); releases are cut as immutable @<agent>/vX.Y.Z audit/rollback tags and promoted by moving the channel tag centrally — no caller churn, single-tag-move rollback. Callers thread agent_ref: <agent>/stable so the agent's own scripts run at the pinned channel. This was implemented and validated across the fleet in petry-projects/.github-private (release-strategy initiative #495): ring-0 self-host pins + all 4 consumers on @pr-review/stable and @dev-lead/stable. Changes: - standards/ci-standards.md: replace the stale 'dev-lead tracks @main' exception with the ratified self-host channel model (tiers note, pinning-policy example, Dev-Lead Agent §Pin). - standards/workflows/dev-lead.yml: template now pins @dev-lead/stable + agent_ref. - scripts/compliance-audit.sh: check_dev_lead_stub now requires @dev-lead/stable (keeps the audit in sync — consumers already converted would otherwise be flagged non-compliant). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThe pull request updates the dev-lead reusable workflow pinning strategy from ChangesReusable Workflow Stable-Channel Versioning
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request transitions the self-hosted agentic reusables (dev-lead and pr-review) from pinning to @main to using moving per-agent channel tags (e.g., @dev-lead/stable). This standard prevents circular dependencies where a broken change could gate its own fix. The compliance audit script, CI standards documentation, and the dev-lead.yml workflow stub have been updated to reflect this change. Review feedback focuses on improving shell script safety by using printf instead of echo to output decoded content, as well as minor grammatical and phrasing enhancements in the documentation and workflow comments to ensure a professional tone.
There was a problem hiding this comment.
Pull request overview
This PR updates org CI standards and templates to ratify the per-agent moving channel tag model for self-hosted agentic reusable workflows (notably dev-lead), replacing the prior @main pinning guidance.
Changes:
- Updates
standards/ci-standards.mdto document and standardize the moving channel tag approach (@dev-lead/stable,@pr-review/stable) and the associatedagent_refthreading. - Updates the
standards/workflows/dev-lead.ymlTier-1 stub to pin@dev-lead/stableand passwith: agent_ref: dev-lead/stable. - Updates
scripts/compliance-audit.shsocheck_dev_lead_stubenforces the new canonicaluses:ref (@dev-lead/stable).
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| standards/workflows/dev-lead.yml | Updates the canonical dev-lead stub to use the dev-lead/stable channel tag and pass agent_ref consistently. |
| standards/ci-standards.md | Replaces the prior dev-lead @main exception with the ratified moving per-agent channel tag standard and updates examples/pinning guidance. |
| scripts/compliance-audit.sh | Aligns the compliance audit’s dev-lead stub pin validation with the new @dev-lead/stable standard. |
Dev-Lead — review-changes (applied)Changes committed and pushed. |
Dev-Lead — waiting on PR blockers (intent: fix-reviews)PR: #440 |
…nel' Rewrite the versioning guidance as a single generic standard for ALL reusable workflows (any host repo, any caller): pin the moving <name>/stable channel tag — never @main (a branch, no version boundary) and never a frozen @vX.Y.Z (a version, needs a per-caller edit to roll out). Spell out the benefits and the cut → validate → promote → rollback release process, and note incremental migration. Drop the workflow-specific framing from the standard prose; the dev-lead section and template remain as the reference implementation. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
stable channel tag
Dev-Lead — waiting on PR blockers (intent: review-changes)PR: #440 |
|
Note @don-petry I reviewed this PR and no code changes were needed, but it still has blocking checks or reviews (failing or cancelled checks, or changes-requested reviews), so I cannot mark it done yet. I'll re-check automatically. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/compliance-audit.sh`:
- Around line 836-842: The current check in check_dev_lead_stub only verifies
the reusable `uses:` ref but doesn't confirm the stub provides `with.agent_ref:
dev-lead/stable`; add a second test against the same decoded content to ensure
the stub contains an explicit agent_ref pinned to dev-lead/stable (e.g. grep -qE
for a line like "agent_ref:[[:space:]]*dev-lead/stable" or a "with:" block
containing that key). If the pattern is missing, call add_finding (similar style
to the existing block) with a new error key such as "dev-lead-stub-agent-ref"
and a message instructing to pin `with.agent_ref: dev-lead/stable`. Reference
the existing variable decoded and the function name check_dev_lead_stub when
adding this check.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 6627370a-07fe-46d6-bedf-52b7db8a172d
📒 Files selected for processing (3)
scripts/compliance-audit.shstandards/ci-standards.mdstandards/workflows/dev-lead.yml
Add the 'Staged promotion through concentric rings' subsection: a release reaches stable by passing through ordered ring channels (next/canary → ring1 → … → stable), advancing one ring at a time only after the inner ring soaks healthy. Callers pin one ring's channel and never move; the release moves through the rings. Bounds blast radius and contains regressions to an inner ring. Notes Phase-1 (stable, single-hop) vs Phase-2 (ring channels + automated soak-gated promotion) rollout status. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Empty commit so don-petry is the last pusher, letting the donpetry-bot org-leads pr-review agent supply the required CODEOWNER approval (the agent authored the prior commit and can't approve its own last push). Also prompts a fresh CodeRabbit pass on the addressed agent_ref check.
|
@donpetry-bot please review — the agent_ref enforcement check requested by CodeRabbit is in place (a5463bd) and all required checks are green. |
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
|
@don-petry I'm on it — starting a fresh review now. Results will appear in a few minutes. |
Dev-Lead — waiting on PR blockers (intent: review-changes)PR: #440 |
|
Note @don-petry I reviewed this PR and no code changes were needed, but it still has blocking checks or reviews (failing or cancelled checks, or changes-requested reviews), so I cannot mark it done yet. I'll re-check automatically. |
Dev-Lead — fix-reviews (no-changes)Agent reasoning |
donpetry-bot
left a comment
There was a problem hiding this comment.
Automated review — APPROVED ✓
Risk: LOW
Reviewed commit: 10ede4cb578ff700f35395d9553ca3a9ebb405c9
Review mode: triage-approved (single reviewer)
Summary
Standards / docs / audit-only change formalizing the moving <name>/stable channel-tag pinning model for reusable workflows. Reference implementation is the dev-lead.yml template (pins @dev-lead/stable + threads agent_ref: dev-lead/stable), and scripts/compliance-audit.sh is tightened to require both. Triage flagged as low-risk; confirming on the merits.
Linked issue analysis
No linked issue (closingIssuesReferences empty). PR body anchors the work to the ongoing release-strategy initiative (petry-projects/.github-private#495) and explicitly frames dev-lead/pr-review as the already-proven reference implementation being ratified into the org standard. Appropriate for a standards PR.
Findings
No blocking findings.
standards/ci-standards.md— new "Reusable workflow versioning — thestablechannel" section (policy, why-not-@main, why-not-frozen-@vX.Y.Z, benefits, release process, concentric-ring promotion table, migration). Tier-table and Action Pinning Policy / Internal Reusable Workflow References examples are genericized to the channel model and the priordev-lead @mainexception is removed. Consistent throughout — no stale references to the old policy spotted.standards/workflows/dev-lead.yml— reference caller stub now pins…/dev-lead-reusable.yml@dev-lead/stableand passeswith: agent_ref: dev-lead/stable. Comment cross-linksci-standards.md#dev-lead-agent. Matches what the audit now enforces.scripts/compliance-audit.sh(check_dev_lead_stub) — expected pin changed from@mainto@dev-lead/stable; new check requiresagent_ref: dev-lead/stableinwith:; existing concurrency /statuses: readchecks renumbered to #3/#4 and their numbered comments updated to match. Defensive nit handled: the two new checks useprintf '%s\n' "$decoded" | grep …rather thanecho "$decoded" | grep …, avoidingechobackslash/option pitfalls on decoded YAML — a small hardening upgrade over the priorecho-based checks. Regex patterns escape.correctly and anchor with^[[:space:]]*…([[:space:]]|$)end markers; the literal/indev-lead/stabledoes not need escaping in ERE. ShellCheck CI is green.
CI status
All required checks SUCCESS (Lint, ShellCheck, Agent Security Scan, Secret scan (gitleaks), CodeQL Analyze (actions), SonarCloud, AgentShield, CodeRabbit, dev-lead / dispatch, pr-auto-review / check-and-dispatch). Per-language Dependency-audit jobs SKIPPED — no manifest changes. CodeRabbit's final review state is APPROVED on this SHA. mergeStateStatus: BLOCKED reflects the outstanding petry-projects/org-leads team review request (org policy gate for standards changes), not a CI failure.
Reviewed automatically by the PR-review agent (single-reviewer mode: opus 4.7). Reply if you need a human review.
…el tag (#440) * feat(standards): ratify per-agent channel-tag pinning for self-hosted agentic reusables The dev-lead and pr-review agents (in .github-private) are self-hosting — they build, review, and ship changes to themselves. Pinning callers @main lets a broken change gate its own fix (the self-host circular dependency); a frozen @vn strands security fixes behind a manual re-pin of every caller. Ratify the moving per-agent channel-tag model: callers pin once to @<agent>/stable (@dev-lead/stable, @pr-review/stable); releases are cut as immutable @<agent>/vX.Y.Z audit/rollback tags and promoted by moving the channel tag centrally — no caller churn, single-tag-move rollback. Callers thread agent_ref: <agent>/stable so the agent's own scripts run at the pinned channel. This was implemented and validated across the fleet in petry-projects/.github-private (release-strategy initiative #495): ring-0 self-host pins + all 4 consumers on @pr-review/stable and @dev-lead/stable. Changes: - standards/ci-standards.md: replace the stale 'dev-lead tracks @main' exception with the ratified self-host channel model (tiers note, pinning-policy example, Dev-Lead Agent §Pin). - standards/workflows/dev-lead.yml: template now pins @dev-lead/stable + agent_ref. - scripts/compliance-audit.sh: check_dev_lead_stub now requires @dev-lead/stable (keeps the audit in sync — consumers already converted would otherwise be flagged non-compliant). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * chore: apply manual instructions [skip ci-relay] * refactor(standards): generalize to 'all reusables pin the stable channel' Rewrite the versioning guidance as a single generic standard for ALL reusable workflows (any host repo, any caller): pin the moving <name>/stable channel tag — never @main (a branch, no version boundary) and never a frozen @vX.Y.Z (a version, needs a per-caller edit to roll out). Spell out the benefits and the cut → validate → promote → rollback release process, and note incremental migration. Drop the workflow-specific framing from the standard prose; the dev-lead section and template remain as the reference implementation. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs(standards): document concentric-ring staged promotion Add the 'Staged promotion through concentric rings' subsection: a release reaches stable by passing through ordered ring channels (next/canary → ring1 → … → stable), advancing one ring at a time only after the inner ring soaks healthy. Callers pin one ring's channel and never move; the release moves through the rings. Bounds blast radius and contains regressions to an inner ring. Notes Phase-1 (stable, single-hop) vs Phase-2 (ring channels + automated soak-gated promotion) rollout status. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs(standards): wrap long release-process list items under MD013 (200) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(reviews): address review comments [skip ci-relay] * chore(standards): re-trigger review after agent fix (a5463bd) Empty commit so don-petry is the last pusher, letting the donpetry-bot org-leads pr-review agent supply the required CODEOWNER approval (the agent authored the prior commit and can't approve its own last push). Also prompts a fresh CodeRabbit pass on the addressed agent_ref check. --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com>
PR #265 (Compliance: non-stub-dev-lead.yml, issue #216) repointed this stub to petry-projects/.github/.github/workflows/dev-lead-reusable.yml@v1 — a reusable that does NOT exist (the dev-lead reusable lives in .github-private). Every markets dev-lead run has failed at startup (jobs:[], unresolvable reusable) since #265 merged at 09:22Z. Restore the correct pin set by #264 and required by the ratified standard (petry-projects/.github#440): .github-private/...@dev-lead/stable + agent_ref. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…266) PR #265 (Compliance: non-stub-dev-lead.yml, issue #216) repointed this stub to petry-projects/.github/.github/workflows/dev-lead-reusable.yml@v1 — a reusable that does NOT exist (the dev-lead reusable lives in .github-private). Every markets dev-lead run has failed at startup (jobs:[], unresolvable reusable) since #265 merged at 09:22Z. Restore the correct pin set by #264 and required by the ratified standard (petry-projects/.github#440): .github-private/...@dev-lead/stable + agent_ref. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
…266) PR #265 (Compliance: non-stub-dev-lead.yml, issue #216) repointed this stub to petry-projects/.github/.github/workflows/dev-lead-reusable.yml@v1 — a reusable that does NOT exist (the dev-lead reusable lives in .github-private). Every markets dev-lead run has failed at startup (jobs:[], unresolvable reusable) since #265 merged at 09:22Z. Restore the correct pin set by #264 and required by the ratified standard (petry-projects/.github#440): .github-private/...@dev-lead/stable + agent_ref. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>



What
Establish a single, generic org standard for versioning every reusable workflow: callers pin the reusable's moving
stablechannel tag (uses: …/<name>-reusable.yml@<name>/stable) — never@main(a branch) and never a frozen@vX.Y.Z(a version). Applies to all reusable workflows regardless of which repo hosts them (public or private) or which repo calls them (downstream consumer or the reusable's own self-host duty).Why
@main(a branch) has no version boundary — a bad commit is instantly live for every caller; for a self-hosting reusable it lets a broken change gate its own fix (circular dependency, fails closed).@vX.Y.Zis immutable, so rolling out a change means editing every caller — a fan-out PR per release, partial-fleet states, security fixes stuck behind churn.stablechannel is pinned once and rolled out / back by moving the tag centrally — no caller churn, instant uniform rollback, health-gated promotion, single source of version truth, and it breaks self-host circular dependencies.Release process (now documented in the standard)
main.<name>/vX.Y.Z(audit + rollback target).<name>/stable→ the validatedvX.Y.Z(gated central tag move).<name>/stableback to the priorvX.Y.Z.Changes
standards/ci-standards.md— new generic Reusable workflow versioning — thestablechannel standard (policy, benefits, release process, migration); tier-table and action-pinning-policy references genericized to the channel model.standards/workflows/dev-lead.yml— reference implementation: pins@dev-lead/stable+agent_ref.scripts/compliance-audit.sh—check_dev_lead_stubenforces the channel pin (keeps the audit in sync with the already-migrated dev-lead consumers).Migration is incremental: a reusable not yet publishing a
stablechannel keeps its current pin until it migrates, when its callers re-pin once and the audit tightens for that reusable.dev-lead/pr-revieware the reference implementation, proven end-to-end inpetry-projects/.github-private(release-strategy initiative #495).🤖 Generated with Claude Code
Summary by CodeRabbit
Documentation
Tests
Chores