Repository navigation
feat(#1159): register ci-failure-analyst in canary-rings.json (PR-2) - #659
Conversation
PR-2 of versioning ci-failure-analyst. With PR-1 (#1165) landed, cut ci-failure-analyst/v1.0.0 + next/ring0/ring1/stable (all aligned on cc0bc61 = main HEAD) and now register it so the canary engine manages it. It's hosted in petry-projects/.github-private, so it mirrors dev-lead's ring + gate structure (next=$host=.github-private, ring0=$org_infra=.github, ring1= TalkTerm+bmad, stable=*) — standard organic-traffic model (no synthetic-canary fields), run_workflow="CI Failure Analyst" (the consumer caller workflow name). Validated (read-only vs live tags): evaluate → COMPLETE (all channels on v1.0.0); drift 3 → 2 unregistered (ci-failure-analyst removed; feature-ideation #614 + idea-enhancer #515 remain). canary_rollout.bats green (+onboarding shape test). Remaining for #1159: repin the 4 consumers (TalkTerm, bmad, google-app-scripts, .github-private template) from raw SHA → @ci-failure-analyst/stable. Refs #1159. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Warning Review limit reached
Next review available in: 45 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (2)
✨ Finishing Touches🧪 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.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds a new ci-failure-analyst agent definition to the canary rollout “rings” standard and validates its shape via Bats tests.
Changes:
- Add
ci-failure-analystagent entry tostandards/canary-rings.jsonwith standard rings and #548 gate defaults. - Add a new Bats test asserting the agent’s host/reusable/workflow name, ordered rings, and gate shape.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| tests/canary_rollout.bats | Adds a test verifying the new ci-failure-analyst agent is correctly represented in canary-rings.json. |
| standards/canary-rings.json | Introduces the ci-failure-analyst agent configuration (rings + gate defaults). |
Comments suppressed due to low confidence (1)
standards/canary-rings.json:1
benign_failure_classes[].workflowis set to"Dev-Lead Agent"under theci-failure-analystgate, but this agent’srun_workflowis"CI Failure Analyst". If the matching logic keys off workflow name, these entries will never match and the allowlist won’t take effect. Updateworkflowto match"CI Failure Analyst"(or use an intentional regex that matches the intended workflow names) or remove these classes if they’re not applicable to this agent.
{
| run bash -c "jq -r '.agents[\"ci-failure-analyst\"].rings | sort_by(.order) | map(.channel) | join(\",\")' '$RINGS'" | ||
| [ "$output" = "next,ring0,ring1,stable" ] |
|
There was a problem hiding this comment.
Code Review
This pull request onboards the ci-failure-analyst agent to the canary rings configuration and adds corresponding integration tests. The review feedback highlights a critical issue where copy-pasted benign_failure_classes still reference the Dev-Lead Agent workflow instead of CI Failure Analyst, which would prevent benign failures from being correctly matched. Additionally, a minor optimization is suggested in the test suite to run jq directly rather than spawning an unnecessary subshell with bash -c.
| "benign_failure_classes": [ | ||
| { | ||
| "id": "dependabot-context-dispatch", | ||
| "workflow": "Dev-Lead Agent", | ||
| "step": "[Dd]ependabot", | ||
| "reason": "#864 \u2014 a Dev-Lead run dispatched in a Dependabot context cannot read repo secrets; version-independent benign failure, not a candidate regression." | ||
| }, | ||
| { | ||
| "id": "fix-review-git-push-permission", | ||
| "workflow": "Dev-Lead Agent", | ||
| "step": "[Pp]ush", | ||
| "reason": "fix-review git push denied by branch protection / missing write scope; version-independent benign failure, not a candidate regression." | ||
| } | ||
| ], |
There was a problem hiding this comment.
The benign_failure_classes configuration for ci-failure-analyst was copy-pasted from dev-lead and still references "workflow": "Dev-Lead Agent". Since the run_workflow for ci-failure-analyst is "CI Failure Analyst", these benign failure classes will never match, causing any benign failures to block the rollout. Update the workflow fields (and optionally the reason descriptions) to reference "CI Failure Analyst".
| "benign_failure_classes": [ | |
| { | |
| "id": "dependabot-context-dispatch", | |
| "workflow": "Dev-Lead Agent", | |
| "step": "[Dd]ependabot", | |
| "reason": "#864 \u2014 a Dev-Lead run dispatched in a Dependabot context cannot read repo secrets; version-independent benign failure, not a candidate regression." | |
| }, | |
| { | |
| "id": "fix-review-git-push-permission", | |
| "workflow": "Dev-Lead Agent", | |
| "step": "[Pp]ush", | |
| "reason": "fix-review git push denied by branch protection / missing write scope; version-independent benign failure, not a candidate regression." | |
| } | |
| ], | |
| "benign_failure_classes": [ | |
| { | |
| "id": "dependabot-context-dispatch", | |
| "workflow": "CI Failure Analyst", | |
| "step": "[Dd]ependabot", | |
| "reason": "#864 — a CI Failure Analyst run dispatched in a Dependabot context cannot read repo secrets; version-independent benign failure, not a candidate regression." | |
| }, | |
| { | |
| "id": "fix-review-git-push-permission", | |
| "workflow": "CI Failure Analyst", | |
| "step": "[Pp]ush", | |
| "reason": "fix-review git push denied by branch protection / missing write scope; version-independent benign failure, not a candidate regression." | |
| } | |
| ], |
| [ "$status" -eq 0 ] | ||
| run jq -e '.agents["ci-failure-analyst"].run_workflow == "CI Failure Analyst"' "$RINGS" | ||
| [ "$status" -eq 0 ] | ||
| run bash -c "jq -r '.agents[\"ci-failure-analyst\"].rings | sort_by(.order) | map(.channel) | join(\",\")' '$RINGS'" |
…659) PR-2 of versioning ci-failure-analyst. With PR-1 (#1165) landed, cut ci-failure-analyst/v1.0.0 + next/ring0/ring1/stable (all aligned on cc0bc61 = main HEAD) and now register it so the canary engine manages it. It's hosted in petry-projects/.github-private, so it mirrors dev-lead's ring + gate structure (next=$host=.github-private, ring0=$org_infra=.github, ring1= TalkTerm+bmad, stable=*) — standard organic-traffic model (no synthetic-canary fields), run_workflow="CI Failure Analyst" (the consumer caller workflow name). Validated (read-only vs live tags): evaluate → COMPLETE (all channels on v1.0.0); drift 3 → 2 unregistered (ci-failure-analyst removed; feature-ideation #614 + idea-enhancer #515 remain). canary_rollout.bats green (+onboarding shape test). Remaining for #1159: repin the 4 consumers (TalkTerm, bmad, google-app-scripts, .github-private template) from raw SHA → @ci-failure-analyst/stable. Refs #1159. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…659) PR-2 of versioning ci-failure-analyst. With PR-1 (#1165) landed, cut ci-failure-analyst/v1.0.0 + next/ring0/ring1/stable (all aligned on cc0bc61 = main HEAD) and now register it so the canary engine manages it. It's hosted in petry-projects/.github-private, so it mirrors dev-lead's ring + gate structure (next=$host=.github-private, ring0=$org_infra=.github, ring1= TalkTerm+bmad, stable=*) — standard organic-traffic model (no synthetic-canary fields), run_workflow="CI Failure Analyst" (the consumer caller workflow name). Validated (read-only vs live tags): evaluate → COMPLETE (all channels on v1.0.0); drift 3 → 2 unregistered (ci-failure-analyst removed; feature-ideation #614 + idea-enhancer #515 remain). canary_rollout.bats green (+onboarding shape test). Remaining for #1159: repin the 4 consumers (TalkTerm, bmad, google-app-scripts, .github-private template) from raw SHA → @ci-failure-analyst/stable. Refs #1159. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…659) PR-2 of versioning ci-failure-analyst. With PR-1 (#1165) landed, cut ci-failure-analyst/v1.0.0 + next/ring0/ring1/stable (all aligned on cc0bc61 = main HEAD) and now register it so the canary engine manages it. It's hosted in petry-projects/.github-private, so it mirrors dev-lead's ring + gate structure (next=$host=.github-private, ring0=$org_infra=.github, ring1= TalkTerm+bmad, stable=*) — standard organic-traffic model (no synthetic-canary fields), run_workflow="CI Failure Analyst" (the consumer caller workflow name). Validated (read-only vs live tags): evaluate → COMPLETE (all channels on v1.0.0); drift 3 → 2 unregistered (ci-failure-analyst removed; feature-ideation #614 + idea-enhancer #515 remain). canary_rollout.bats green (+onboarding shape test). Remaining for #1159: repin the 4 consumers (TalkTerm, bmad, google-app-scripts, .github-private template) from raw SHA → @ci-failure-analyst/stable. Refs #1159. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…659) PR-2 of versioning ci-failure-analyst. With PR-1 (#1165) landed, cut ci-failure-analyst/v1.0.0 + next/ring0/ring1/stable (all aligned on cc0bc61 = main HEAD) and now register it so the canary engine manages it. It's hosted in petry-projects/.github-private, so it mirrors dev-lead's ring + gate structure (next=$host=.github-private, ring0=$org_infra=.github, ring1= TalkTerm+bmad, stable=*) — standard organic-traffic model (no synthetic-canary fields), run_workflow="CI Failure Analyst" (the consumer caller workflow name). Validated (read-only vs live tags): evaluate → COMPLETE (all channels on v1.0.0); drift 3 → 2 unregistered (ci-failure-analyst removed; feature-ideation #614 + idea-enhancer #515 remain). canary_rollout.bats green (+onboarding shape test). Remaining for #1159: repin the 4 consumers (TalkTerm, bmad, google-app-scripts, .github-private template) from raw SHA → @ci-failure-analyst/stable. Refs #1159. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…659) PR-2 of versioning ci-failure-analyst. With PR-1 (#1165) landed, cut ci-failure-analyst/v1.0.0 + next/ring0/ring1/stable (all aligned on cc0bc61 = main HEAD) and now register it so the canary engine manages it. It's hosted in petry-projects/.github-private, so it mirrors dev-lead's ring + gate structure (next=$host=.github-private, ring0=$org_infra=.github, ring1= TalkTerm+bmad, stable=*) — standard organic-traffic model (no synthetic-canary fields), run_workflow="CI Failure Analyst" (the consumer caller workflow name). Validated (read-only vs live tags): evaluate → COMPLETE (all channels on v1.0.0); drift 3 → 2 unregistered (ci-failure-analyst removed; feature-ideation #614 + idea-enhancer #515 remain). canary_rollout.bats green (+onboarding shape test). Remaining for #1159: repin the 4 consumers (TalkTerm, bmad, google-app-scripts, .github-private template) from raw SHA → @ci-failure-analyst/stable. Refs #1159. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>



PR-2 of #1159. With PR-1 (combsmith/.github-private#1165) landed, I cut
ci-failure-analyst/v1.0.0+next/ring0/ring1/stable(all aligned oncc0bc61= main HEAD) and now register it so the canary engine manages it.Hosted in
.github-private, so it mirrors dev-lead's ring + gate structure (host-relative$host/$org_infratokens; ring1 = TalkTerm+bmad; stable = *) — standard organic-traffic model (no synthetic-canary fields),run_workflow="CI Failure Analyst".Validated (read-only vs live tags):
evaluate→ COMPLETE (all channels on v1.0.0);drift3 → 2 (ci-failure-analyst removed; onlyfeature-ideation#614 +idea-enhancer#515 remain).canary_rollout.bats96/96.Remaining for #1159: repin the 4 consumers (TalkTerm, bmad, google-app-scripts,
.github-privatetemplate) from raw SHA →@ci-failure-analyst/stable.🤖 Generated with Claude Code