You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The DEGRADED signal traces to the unit job, where tests/dev-lead/unit/test_advisory_review_gate.bats
fails intermittently. In every failing run the same cluster fails (tests 31/33/35/38/39/40/45) while
every "expect status 1" gate test passes. That fingerprint β including test 45 (which only asserts the
gate's output contains RATE_LIMITED, regardless of exit code) producing no output β means the gate
script is exit 1-ing at source time.
scripts/lib/advisory-review-gate.sh sources the reviewer-source registry and, if reviewer_sources_advisory_gate_logins (or reviewer_sources_logins) fails, runs exit 1 (lines 42 and
212). Because the gate is sourced, that exit kills the caller β the whole bats invocation for that
test β with no output and status 1. A sourced library must never exit its caller on a recoverable read
error. The gate already carries a built-in fallback bot list for the "registry file absent" case, but
hard-exits instead of using it when the read fails.
Confirmed deterministically: sourcing the gate with REVIEWER_SOURCES_MANIFEST=/nonexistent reproduces the
exact CI failure signature (no output, status 1).
Scope
Make the advisory gate resilient: on a registry-read failure, fall back to the existing built-in bot lists
(with a warning) instead of exit 1, so a transient/edge read failure can neither strand PR reviews in
production nor fail the unit suite in CI.
Implementation Checklist
scripts/lib/advisory-review-gate.sh: replace the exit 1 on reviewer_sources_advisory_gate_logins
failure with a graceful fallback to the built-in ADVISORY_BOTS set
scripts/lib/advisory-review-gate.sh: replace the exit 1 on reviewer_sources_logins failure with a
graceful fallback to the built-in RATE_LIMIT_NOTICE_BOTS set
Tests to Write
tests/dev-lead/unit/test_advisory_review_gate.bats: sourcing survives an unreadable registry (no
exit, ADVISORY_BOTS populated from fallback)
tests/dev-lead/unit/test_advisory_review_gate.bats: check_advisory_reviews still runs (applies the
head-age timeout) when the registry is unreadable
Test Command
bats tests/dev-lead/unit/ (full unit job), plus bash .dev-lead/scripts/dev-lead-lint.sh
The implementation for issue #1538 is durable: commits are pushed and a pull request is open. This record is backed by verifiable artifacts you can confirm in one click.
Review happens on the PR. Acceptance criteria and test results are evidenced by the PR's diff and CI checks β not asserted here. If a later stage fails, this claim is retracted in place.
Activity
don-petry commentedon Aug 19, 2026
Dev-Lead Implementation Plan
Issue: #1538 β [Fleet Monitor] petry-projects/.github-private β .github/workflows/test-dev-lead.yml
Root cause
The DEGRADED signal traces to the
unitjob, wheretests/dev-lead/unit/test_advisory_review_gate.batsfails intermittently. In every failing run the same cluster fails (tests 31/33/35/38/39/40/45) while
every "expect status 1" gate test passes. That fingerprint β including test 45 (which only asserts the
gate's output contains
RATE_LIMITED, regardless of exit code) producing no output β means the gatescript is
exit 1-ing at source time.scripts/lib/advisory-review-gate.shsources the reviewer-source registry and, ifreviewer_sources_advisory_gate_logins(orreviewer_sources_logins) fails, runsexit 1(lines 42 and212). Because the gate is sourced, that
exitkills the caller β the wholebatsinvocation for thattest β with no output and status 1. A sourced library must never
exitits caller on a recoverable readerror. The gate already carries a built-in fallback bot list for the "registry file absent" case, but
hard-exits instead of using it when the read fails.
Confirmed deterministically: sourcing the gate with
REVIEWER_SOURCES_MANIFEST=/nonexistentreproduces theexact CI failure signature (no output, status 1).
Scope
Make the advisory gate resilient: on a registry-read failure, fall back to the existing built-in bot lists
(with a warning) instead of
exit 1, so a transient/edge read failure can neither strand PR reviews inproduction nor fail the unit suite in CI.
Implementation Checklist
scripts/lib/advisory-review-gate.sh: replace theexit 1onreviewer_sources_advisory_gate_loginsfailure with a graceful fallback to the built-in
ADVISORY_BOTSsetscripts/lib/advisory-review-gate.sh: replace theexit 1onreviewer_sources_loginsfailure with agraceful fallback to the built-in
RATE_LIMIT_NOTICE_BOTSsetTests to Write
tests/dev-lead/unit/test_advisory_review_gate.bats: sourcing survives an unreadable registry (noexit, ADVISORY_BOTS populated from fallback)
tests/dev-lead/unit/test_advisory_review_gate.bats:check_advisory_reviewsstill runs (applies thehead-age timeout) when the registry is unreadable
Test Command
bats tests/dev-lead/unit/(full unit job), plusbash .dev-lead/scripts/dev-lead-lint.shdon-petry commentedon Aug 19, 2026
Dev-Lead: Implementation Complete β PR #1540
The implementation for issue #1538 is durable: commits are pushed and a pull request is open. This record is backed by verifiable artifacts you can confirm in one click.
5695ec8d390e5b3d7a9bfdebcd0f95e1d410dc57Review happens on the PR. Acceptance criteria and test results are evidenced by the PR's diff and CI checks β not asserted here. If a later stage fails, this claim is retracted in place.
feat: implement issue #1538 β [Fleet Monitor] petry-projects/.github-β¦