Repository navigation
ci(fleet-ci-fail-alert): page once per (PR, failing tests) on merge-queue reds (t_70f92e0b) - #1375
Conversation
…queue reds; name PR + test on line 1 (t_70f92e0b) The queue rebuilds a group every time a PR ahead of it is ejected, so one broken test re-failed the same PR 3-6x and paged #alerts each time (pr-1332: 6 pages 19:34-20:36Z; pr-1328/1333/1344: 2 each on the #1350 red). Route step: for a merge_group red, signature = pytest node ids annotated 'FAILED (not quarantined)' (fallback: failed job names minus slice number). If an earlier failed merge_group run of the SAME PR in 24h has the same signature -> route=none. New signature / other PR still pages. Any API error pages (fail loud). The page's first line now reads 'CI — PR #N ejected from the merge queue: <tests>'. Verified: tests/test_fleet_ci_fail_alert_gate.py 25 passed (7 new); mutation arms (drop the silence, drop the summary, drop the null-head_branch guard) each fail a test. Live replay of the real route step over 13 real runs via the GitHub API: pr-1332's 5 retries silent, first pages; 1328/1333/1344 page once each.
FleetReviewReview: pre-merge · head
Reviewed with 1 of 2 model families — xai unavailable. profile: light (rule: default light: lines 194<800, files 2<1000000, hunks 5<1000000, no hot path) · round 0 · members: B-assert-ctx, B-state, L6, G · families: openai Confidence: 1/5 Findings
FleetReview provenance · models: B=gpt-6-sol, D=grok-4.6, F=gpt-6-sol · cost: $0.50 · duration: 20m 44s · rounds: 2 · files examined: 2 |
|
🤖 merged-by: apollo · lane: review · gate: ADVISORY (FleetReview not green for 69aeff5): fleetreview-advisory-20260927-standing.md · why: t_70f92e0b: fleet-ci-fail-alert pages once per (PR, failing tests) on merge-group runs; slice-5 red was main's inherited red (#1378 fixed it), update-branched; CI gate |
|
🤖 merged-by: apollo · lane: review · gate: ADVISORY (FleetReview not green for 69aeff5): fleetreview-advisory-20260927-standing.md · why: t_70f92e0b: fleet-ci-fail-alert pages once per (PR, failing tests) on merge-group runs; slice-5 red was main's inherited red (#1378 fixed it), update-branched; CI gate |
6 similar comments
|
🤖 merged-by: apollo · lane: review · gate: ADVISORY (FleetReview not green for 69aeff5): fleetreview-advisory-20260927-standing.md · why: t_70f92e0b: fleet-ci-fail-alert pages once per (PR, failing tests) on merge-group runs; slice-5 red was main's inherited red (#1378 fixed it), update-branched; CI gate |
|
🤖 merged-by: apollo · lane: review · gate: ADVISORY (FleetReview not green for 69aeff5): fleetreview-advisory-20260927-standing.md · why: t_70f92e0b: fleet-ci-fail-alert pages once per (PR, failing tests) on merge-group runs; slice-5 red was main's inherited red (#1378 fixed it), update-branched; CI gate |
|
🤖 merged-by: apollo · lane: review · gate: ADVISORY (FleetReview not green for 69aeff5): fleetreview-advisory-20260927-standing.md · why: t_70f92e0b: fleet-ci-fail-alert pages once per (PR, failing tests) on merge-group runs; slice-5 red was main's inherited red (#1378 fixed it), update-branched; CI gate |
|
🤖 merged-by: apollo · lane: review · gate: ADVISORY (FleetReview not green for 69aeff5): fleetreview-advisory-20260927-standing.md · why: t_70f92e0b: fleet-ci-fail-alert pages once per (PR, failing tests) on merge-group runs; slice-5 red was main's inherited red (#1378 fixed it), update-branched; CI gate |
|
🤖 merged-by: apollo · lane: review · gate: ADVISORY (FleetReview not green for 69aeff5): fleetreview-advisory-20260927-standing.md · why: t_70f92e0b: fleet-ci-fail-alert pages once per (PR, failing tests) on merge-group runs; slice-5 red was main's inherited red (#1378 fixed it), update-branched; CI gate |
|
🤖 merged-by: apollo · lane: review · gate: ADVISORY (FleetReview not green for 69aeff5): fleetreview-advisory-20260927-standing.md · why: t_70f92e0b: fleet-ci-fail-alert pages once per (PR, failing tests) on merge-group runs; slice-5 red was main's inherited red (#1378 fixed it), update-branched; CI gate |
FleetReviewReview: post-merge · head
Post-merge review ( Reviewed with 1 of 3 model families — anthropic, xai unavailable. profile: light (rule: default light: lines 194<800, files 2<1000000, hunks 5<1000000, no hot path) · round 0 · members: L6, C-assert-xhigh, F, G · families: openai Confidence: 1/5 Findings
FleetReview provenance · models: B=gpt-6-sol, C=claude-code-opus-5-5, D=grok-4.6, F=gpt-6-sol · cost: $1.37 (estimated) · duration: 5m 02s · rounds: 2 · files examined: 2 |
FleetReviewFleetReview's daily member-call budget is spent (60/600 for 2026-09-28 UTC); review skipped. FleetReview · reviewKind: skipped-budget |
Noise round 5 (t_70f92e0b). #alerts got 19 CI FAILED pages in 6h. Most were one broken test re-failing the same PR every time the merge queue rebuilt the group. pr-1332 paged 6 times between 19:34 and 20:36Z on test_provider_projection. pr-1328, pr-1333 and pr-1344 each paged twice on the #1350 red (fixed in #1368).
Route step: a merge_group red builds a signature from the pytest node ids that the test jobs annotate with
FAILED (not quarantined). When there are none, it falls back to the failed job names with the slice number stripped, because a test moves between slices. If an earlier failed merge_group run of the same PR in the last 24h has the same signature, the route isnone.Page text: a queue ejection now reads
CI — PR #N ejected from the merge queue: <tests>on its first line.Tests:
tests/test_fleet_ci_fail_alert_gate.py: 25 passed, 7 of them new. They run the real YAML step against a fake GitHub API. Three mutation arms were each tried and each failed a test: removing the silence, removing the summary, and removing the null-head_branch guard (a live nullhead_branchhit during replay).Live replay: I ran the real route step against the real API for 13 runs: