Skip to content

feat(#1159): register ci-failure-analyst in canary-rings.json (PR-2) - #659

Merged
don-petry merged 1 commit into
mainfrom
register-1159-ci-failure-analyst
Jul 11, 2026
Merged

don-petry merged 1 commit into
mainfrom
register-1159-ci-failure-analyst

Conversation

@don-petry

Copy link
Copy Markdown
Contributor

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 on cc0bc61 = 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_infra tokens; 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); drift 3 → 2 (ci-failure-analyst removed; only feature-ideation #614 + idea-enhancer #515 remain). canary_rollout.bats 96/96.

Remaining for #1159: repin the 4 consumers (TalkTerm, bmad, google-app-scripts, .github-private template) from raw SHA → @ci-failure-analyst/stable.

🤖 Generated with Claude Code

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>
@don-petry
don-petry requested a review from a team as a code owner July 11, 2026 02:45
Copilot AI review requested due to automatic review settings July 11, 2026 02:45
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@don-petry
don-petry merged commit 70ca583 into main Jul 11, 2026
14 checks passed
@don-petry
don-petry deleted the register-1159-ci-failure-analyst branch July 11, 2026 02:45
@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@don-petry, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 45 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 277eaea8-d614-44a4-a9a4-dd3ec92ba83c

📥 Commits

Reviewing files that changed from the base of the PR and between 79fd96c and 81fa81c.

📒 Files selected for processing (2)
  • standards/canary-rings.json
  • tests/canary_rollout.bats
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch register-1159-ci-failure-analyst

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot stopped reviewing on behalf of don-petry due to an error July 11, 2026 02:45

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-analyst agent entry to standards/canary-rings.json with 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[].workflow is set to "Dev-Lead Agent" under the ci-failure-analyst gate, but this agent’s run_workflow is "CI Failure Analyst". If the matching logic keys off workflow name, these entries will never match and the allowlist won’t take effect. Update workflow to 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.
{

Comment thread tests/canary_rollout.bats
Comment on lines +211 to +212
run bash -c "jq -r '.agents[\"ci-failure-analyst\"].rings | sort_by(.order) | map(.channel) | join(\",\")' '$RINGS'"
[ "$output" = "next,ring0,ring1,stable" ]
@sonarqubecloud

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment on lines +635 to +648
"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."
}
],

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

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".

Suggested change
"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."
}
],

Comment thread tests/canary_rollout.bats
[ "$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'"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

low

Avoid spawning an unnecessary subshell with bash -c to run jq. You can invoke jq directly within the run wrapper, which is cleaner and more efficient.

  run jq -r '.agents["ci-failure-analyst"].rings | sort_by(.order) | map(.channel) | join(",")' "$RINGS"

don-petry added a commit that referenced this pull request Aug 3, 2026
…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>
don-petry added a commit that referenced this pull request Aug 7, 2026
…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>
don-petry added a commit that referenced this pull request Aug 7, 2026
…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>
don-petry added a commit that referenced this pull request Aug 31, 2026
…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>
don-petry added a commit that referenced this pull request Sep 7, 2026
…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>
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.

2 participants