Skip to content

[Fleet Monitor] petry-projects/.github-private β€” .github/workflows/test-dev-lead.ymlΒ #1538

Closed

Description

@don-petry

🟠 DEGRADED: petry-projects/.github-private / .github/workflows/test-dev-lead.yml

Metric Value
Failure Rate 25% (11 / 44 runs)
Status DEGRADED
p50 Duration 211s
p95 Duration 754s
Successful Runs 33
Cancelled Runs 0

Workflow: .github/workflows/test-dev-lead.yml

Last updated by Fleet Monitor run on 2026-08-19.
Threshold: failure rate > 10% over the monitored window.

Activity

  1. added
    health-checkAutomated health check report
    dev-leadFor dev-lead agent pickup
    fleet-trackerTracked by the Actions Fleet Monitor
    on Aug 19, 2026
  2. don-petry commented on Aug 19, 2026

    @don-petry
    CollaboratorAuthor

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

  3. don-petry commented on Aug 19, 2026

    @don-petry
    CollaboratorAuthor

    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.

    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.

  4. added a commit that references this issue on Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    dev-leadFor dev-lead agent pickupfleet-trackerTracked by the Actions Fleet Monitorhealth-checkAutomated health check report

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions