Skip to content

fix: add retry/backoff to Fetch open non-draft PR queue in pr-sous-chef#43383

Open
pelikhan with Copilot wants to merge 5 commits into
mainfrom
copilot/aw-fix-add-retry-backoff
Open

fix: add retry/backoff to Fetch open non-draft PR queue in pr-sous-chef#43383
pelikhan with Copilot wants to merge 5 commits into
mainfrom
copilot/aw-fix-add-retry-backoff

Conversation

Copilot AI commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

A single transient GraphQL 502 in the gh pr list call kills the entire PR Sous Chef run before the agent starts — caused 15 consecutive failures (~8h of 100% red) during a GitHub GraphQL degradation window.

Changes

  • pr-sous-chef.md — wraps gh pr list in a bounded retry loop: 4 attempts, exponential backoff (2s → 4s → 8s), retrying on transient signals (HTTP 5xx, 429, context deadline exceeded, connection reset, EOF); fails fast on deterministic errors (4xx, auth, etc.) so real bugs still surface immediately
  • pr-sous-chef.lock.yml — recompiled from updated source
until [ "$pr_list_success" = "true" ] || [ "$pr_list_attempt" -ge "$pr_list_max_attempts" ]; do
  pr_list_attempt=$((pr_list_attempt + 1))
  set +e
  pr_list_output=$(gh pr list --repo "$EXPR_GITHUB_REPOSITORY" ...)
  pr_list_status=$?
  set -e
  if [ "$pr_list_status" -eq 0 ]; then
    echo "$pr_list_output" > "$candidate_file"
    pr_list_success=true
  elif echo "$pr_list_output" | grep -qE "HTTP (5[0-9]{2}|429)|context deadline exceeded|connection reset|EOF"; then
    backoff=$((2 ** pr_list_attempt))
    sleep "$backoff"   # retry transient
  else
    exit 1             # fail fast on deterministic errors
  fi
done

Generated by 👨‍🍳 PR Sous Chef · 8.21 AIC · ⌖ 6.19 AIC · ⊞ 3.4K ·
Comment /souschef to run again

Copilot AI and others added 2 commits July 4, 2026 12:45
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
…us-chef

Wrap the `gh pr list` GraphQL call with a bounded retry loop (4 attempts,
exponential backoff) that retries on transient 5xx/429/network errors and
fails hard on deterministic errors. This prevents a single transient HTTP 502
from killing the entire run before the agent starts.

Closes #43260

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Add retry and backoff to fetch open non-draft PR queue fix: add retry/backoff to Fetch open non-draft PR queue in pr-sous-chef Jul 4, 2026
Copilot AI requested a review from pelikhan July 4, 2026 12:50
@github-actions

This comment has been minimized.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Hey @copilot-swe-agent 👋 — thanks for tackling the pr-sous-chef resilience issue! The root cause analysis (15 consecutive failures during the GraphQL degradation window) is well-documented, and the bounded retry loop with exponential backoff and fail-fast on deterministic errors is a solid approach.

One thing worth noting before this is ready for merge:

  • No test coverage for the retry logic — the new retry/backoff shell code in pr-sous-chef.md doesn't appear to have any corresponding test. Even a simple scenario test (e.g., mock a transient 502, verify retry happens; mock a 403, verify fail-fast) would meaningfully protect this behavior from regressions.

If you'd like a hand, you can assign this prompt to your coding agent:

Add a test for the retry/backoff logic added to the `Fetch open non-draft PR queue` step in `.github/workflows/pr-sous-chef.md`.

Cover these scenarios:
1. `gh pr list` returns a transient HTTP 502 on the first attempt, then succeeds on the second — verify the retry fires and the final output is captured correctly.
2. `gh pr list` returns a deterministic 403 — verify the loop exits immediately with a non-zero status (fail-fast path, no retry).
3. All 4 attempts fail with a transient error — verify the step ultimately fails after exhausting retries.

Follow the existing test conventions for workflow step tests in this repository.

Generated by ✅ Contribution Check · 172.3 AIC · ⌖ 15.7 AIC · ⊞ 6.3K ·

@pelikhan pelikhan marked this pull request as ready for review July 4, 2026 15:41
Copilot AI review requested due to automatic review settings July 4, 2026 15:41
@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

🔍 Design Decision Gate 🏗️ is checking for design decision records on this pull request...

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

No test files were added or modified in this PR. Test Quality Sentinel skipped.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

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

This PR hardens the PR Sous Chef workflow’s “Fetch open non-draft PR queue” step against transient GitHub API/GraphQL failures by adding a bounded retry loop with exponential backoff, then recompiles the corresponding lock file.

Changes:

  • Add retry + backoff logic around gh pr list in pr-sous-chef to reduce failures from transient 5xx/429/network errors.
  • Recompile the generated workflow lock file to reflect the workflow source changes.
  • Reformat bundled action_pins.json data files (whitespace/indentation-only change).
Show a summary per file
File Description
pkg/workflow/data/action_pins.json Reformats pinned-actions JSON data (indentation/whitespace).
pkg/actionpins/data/action_pins.json Same JSON reformat in the actionpins package copy.
.github/workflows/pr-sous-chef.md Adds retry/backoff wrapper for gh pr list in the PR queue fetch step.
.github/workflows/pr-sous-chef.lock.yml Regenerated compiled workflow output reflecting the updated source workflow.

Review details

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 2/4 changed files
  • Comments generated: 1
  • Review effort level: Low

Comment on lines +67 to +90
set +e
pr_list_output=$(gh pr list --repo "$EXPR_GITHUB_REPOSITORY" \
--state open \
--search "is:pr is:open -is:draft sort:updated-desc" \
--limit 30 \
--json number,title,url,headRefOid,headRefName,updatedAt,author,mergeStateStatus \
2>&1)
pr_list_status=$?
set -e
if [ "$pr_list_status" -eq 0 ]; then
echo "$pr_list_output" > "$candidate_file"
pr_list_success=true
elif echo "$pr_list_output" | grep -qE "HTTP (5[0-9]{2}|429)|context deadline exceeded|connection reset|EOF"; then
if [ "$pr_list_attempt" -lt "$pr_list_max_attempts" ]; then
backoff=$((2 ** pr_list_attempt))
echo "Transient error on attempt $pr_list_attempt/$pr_list_max_attempts (exit $pr_list_status); retrying in ${backoff}s..." >&2
echo "$pr_list_output" >&2
sleep "$backoff"
fi
else
echo "gh pr list failed (exit $pr_list_status):" >&2
echo "$pr_list_output" >&2
exit 1
fi

@github-actions github-actions 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.

Skills-Based Review 🧠

Applied /diagnosing-bugs and /tdd — requesting changes on two correctness issues in the transient-error classifier and a missing regression test.

📋 Key Themes & Highlights

Key Themes

  • Transient signal regex has edge cases — bare EOF is over-broad and the empty-output path bypasses retries entirely (two inline comments on line 79)
  • Last-attempt logging gap — the transient error message is not printed on the final attempt, making failure logs harder to interpret (inline comment on line 85)
  • No regression test — the fix ships without automated coverage; a future refactor could silently reintroduce the fragility (inline comment on line 65)

Positive Highlights

  • ✅ Root cause properly addressed: set +e / set -e sandwich correctly isolates the failable command
  • ✅ Fail-fast on deterministic errors is the right default — avoids masking real bugs with spurious retries
  • ✅ Logging on every retry attempt with attempt count and backoff duration is excellent debuggability
  • ✅ Post-loop failure gate (if [ "$pr_list_success" != "true" ]) is a clean safety net
  • 2>&1 redirect ensures gh's stderr error messages are captured for the grep classifier
  • ✅ Lock file is auto-recompiled — correct process followed for workflow source changes

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · 76.3 AIC · ⌖ 5.72 AIC · ⊞ 6.6K
Comment /matt to run again

Comment thread .github/workflows/pr-sous-chef.md Outdated
if [ "$pr_list_status" -eq 0 ]; then
echo "$pr_list_output" > "$candidate_file"
pr_list_success=true
elif echo "$pr_list_output" | grep -qE "HTTP (5[0-9]{2}|429)|context deadline exceeded|connection reset|EOF"; then

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.

[/diagnosing-bugs] The bare EOF token matches any error message containing that substring (e.g. Unexpected end-of-file, JSON parse errors, script errors), which could cause the code to silently retry what is actually a deterministic failure.

💡 Suggested fix

Anchor EOF to reduce false positives — for example:

elif echo "$pr_list_output" | grep -qE "HTTP (5[0-9]{2}|429)|context deadline exceeded|connection reset|unexpected EOF|read: EOF"; then

The risk: an error message that incidentally contains EOF would be retried up to 3 more times before failing, wasting ~14s of CI time and obscuring the root cause.

@copilot please address this.

Comment thread .github/workflows/pr-sous-chef.md Outdated
if [ "$pr_list_status" -eq 0 ]; then
echo "$pr_list_output" > "$candidate_file"
pr_list_success=true
elif echo "$pr_list_output" | grep -qE "HTTP (5[0-9]{2}|429)|context deadline exceeded|connection reset|EOF"; then

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.

[/diagnosing-bugs] If gh pr list exits with a non-zero status but produces no output (e.g., hard kill, OOM, runner timeout), $pr_list_output is empty — the grep -qE match fails silently and the code takes the else branch, exiting immediately with a generic error instead of retrying.

💡 Suggested fix

Add an explicit guard for empty output:

elif [ -z "$pr_list_output" ] || echo "$pr_list_output" | grep -qE "HTTP (5[0-9]{2}|429)|context deadline exceeded|connection reset|EOF"; then

An empty output from a network command is almost always a transient connectivity/timeout issue, not a deterministic error, so it deserves a retry.

@copilot please address this.

echo "Transient error on attempt $pr_list_attempt/$pr_list_max_attempts (exit $pr_list_status); retrying in ${backoff}s..." >&2
echo "$pr_list_output" >&2
sleep "$backoff"
fi

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.

[/diagnosing-bugs] When the final attempt hits a transient error, the inner if [ "$pr_list_attempt" -lt "$pr_list_max_attempts" ] is false — so no log message is printed and no sleep is needed. But the fi just falls through, the loop condition fails, and control lands on the post-loop failure message. This is correct but the last transient error output is only shown in the post-loop message, which makes it hard to tell whether the last attempt was transient or not.

💡 Suggested improvement

Log the transient error even on the last attempt so the failure message makes sense in context:

elif echo "$pr_list_output" | grep -qE "..."; then
  echo "Transient error on attempt $pr_list_attempt/$pr_list_max_attempts (exit $pr_list_status); ${backoff}s..." >&2
  echo "$pr_list_output" >&2
  if [ "$pr_list_attempt" -lt "$pr_list_max_attempts" ]; then
    backoff=$((2 ** pr_list_attempt))
    sleep "$backoff"
  fi

Move the logging outside the inner if so it fires on every transient hit, including the last.

@copilot please address this.

pr_list_max_attempts=4
pr_list_attempt=0
pr_list_success=false
until [ "$pr_list_success" = "true" ] || [ "$pr_list_attempt" -ge "$pr_list_max_attempts" ]; do

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.

[/tdd] This fix directly addresses a production outage (15 consecutive failures over ~8h) but ships with no regression test. A future degradation event could silently break the retry logic with no automated signal.

💡 What to test

Key scenarios that would prevent regressions:

  1. Transient error → retries up to max_attempts — mock gh pr list to return HTTP 502 for N attempts then succeed; assert pr_list_success=true.
  2. All attempts exhausted — mock gh pr list to always return HTTP 503; assert the script exits non-zero and the error is reported.
  3. Deterministic error fails fast — mock gh pr list to return exit 1 with error: HTTP 422; assert exactly one attempt and immediate exit.
  4. Empty output fails fast (edge case from the grep guard) — mock gh pr list to return exit 1 with empty output.

Even a minimal shell-based test with bats or a mock gh binary would document the expected contract.

@copilot please address this.

@github-actions github-actions 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.

The retry/backoff logic is sound and the problem it solves is real, but the implementation introduced a correctness regression that needs to be fixed before merging.

### Blocking issues

2>&1 corrupts candidate_file on success (HIGH)gh pr list --json output is captured with stderr merged in. On a successful call any gh warning (upgrade notice, deprecation, etc.) silently turns the written JSON into garbage, breaking all downstream jq processing. Capture stdout and stderr separately; write only stdout to $candidate_file.

Silent final transient attempt (MEDIUM) — On the 4th (final) transient failure the inner if guard short-circuits logging and the error text from the last attempt is lost. When an operator inspects an all-retries-exhausted failure log, they see only the post-loop message with no indication of what the last error actually was. Move the log outside the if, inside the elif.

🔎 Code quality review by PR Code Quality Reviewer · 105.4 AIC · ⌖ 6.68 AIC · ⊞ 5.4K
Comment /review to run again

Comment thread .github/workflows/pr-sous-chef.md Outdated
pr_list_status=$?
set -e
if [ "$pr_list_status" -eq 0 ]; then
echo "$pr_list_output" > "$candidate_file"

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.

2>&1 contaminates candidate_file on success: pr_list_output contains merged stdout+stderr, so any warning gh emits to stderr on a successful run silently corrupts the JSON written to candidate_file.

💡 Suggested fix

Capture stdout and stderr separately so only the clean JSON stdout lands in candidate_file:

set +e
pr_list_stderr_tmp=$(mktemp)
pr_list_output=$(gh pr list --repo "$EXPR_GITHUB_REPOSITORY" \
  --state open \
  --search "is:pr is:open -is:draft sort:updated-desc" \
  --limit 30 \
  --json number,title,url,headRefOid,headRefName,updatedAt,author,mergeStateStatus \
  2>"$pr_list_stderr_tmp")
pr_list_status=$?
pr_list_stderr=$(cat "$pr_list_stderr_tmp"; rm -f "$pr_list_stderr_tmp")
set -e

Then use "${pr_list_output}${pr_list_stderr}" for the transient-error grep, and $pr_list_output alone when writing to $candidate_file.

Why it matters: gh routinely writes upgrade notices, deprecation warnings, and experimental-feature advisories to stderr while still exiting 0. The original code (gh pr list ... > "$candidate_file") was safe because stdout alone went to the file. The new code merges stderr into the captured variable and then writes it unconditionally into the JSON file. Any non-empty stderr turns the JSON into garbage that jq will reject downstream — yet the step shows no error until then.

echo "Transient error on attempt $pr_list_attempt/$pr_list_max_attempts (exit $pr_list_status); retrying in ${backoff}s..." >&2
echo "$pr_list_output" >&2
sleep "$backoff"
fi

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.

Silent exit on final transient failure: when the 4th attempt hits a transient error, the inner guard [ "$pr_list_attempt" -lt "$pr_list_max_attempts" ] is false, so the if block is skipped — no log is emitted, no sleep, the loop simply ends, and the post-loop failure handler fires with no diagnostic output showing whether the last error was transient or not.

💡 Suggested fix

Log the final transient failure unconditionally, outside the if:

elif echo "$pr_list_output" | grep -qE "HTTP (5[0-9]{2}|429)|context deadline exceeded|connection reset|EOF"; then
  echo "Transient error on attempt $pr_list_attempt/$pr_list_max_attempts (exit $pr_list_status)" >&2
  echo "$pr_list_output" >&2
  if [ "$pr_list_attempt" -lt "$pr_list_max_attempts" ]; then
    backoff=$((2 ** pr_list_attempt))
    echo "Retrying in ${backoff}s..." >&2
    sleep "$backoff"
  fi

Without this, an operator looking at a 4-attempt-exhausted failure sees the post-loop message but zero context about what the last error actually was.

@github-actions github-actions 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.

Review: retry/backoff for Fetch open non-draft PR queue

The fix is well-motivated and the overall structure (bounded retry, exponential backoff, fail-fast on deterministic errors, set +e/set -e hygiene) is correct. Two issues need addressing before merge.

Blocking

  1. Observability gap on the last attempt (line 80–85, pr-sous-chef.md)
    When all retries are exhausted via a transient error, the inner guard if [ "$pr_list_attempt" -lt "$pr_list_max_attempts" ] prevents any diagnostic from being emitted. The loop exits silently; only the post-loop if logs it. This makes it impossible to tell from logs that the final attempt was also transient.

  2. Bare EOF pattern is too broad (line 79, pr-sous-chef.md)
    EOF matches any line containing those characters as a substring (e.g., SIZEOF, PROOF, EOF in configuration). This could silently retry non-transient errors instead of fail-fast. Tighten to unexpected EOF or \bEOF\b.

Non-blocking / positive observations

  • 2>&1 redirect into the variable is correct — stderr must be captured to pattern-match on error messages.
  • Fail-fast exit 1 on deterministic errors (4xx, auth) is the right behaviour.
  • The retry counter is incremented at the top of the loop so attempt numbers in log messages are human-readable (1-based).
  • Lock file is correctly regenerated from the updated source.
Action pins change (756 additions/deletions) This is a formatting-only change (indentation/style) across both `pkg/actionpins/data/action_pins.json` and `pkg/workflow/data/action_pins.json`. No pin versions were changed. Not reviewed in detail.

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · 78.5 AIC · ⌖ 6.1 AIC · ⊞ 4.9K

Comment thread .github/workflows/pr-sous-chef.md Outdated
Comment on lines +80 to +85
if [ "$pr_list_attempt" -lt "$pr_list_max_attempts" ]; then
backoff=$((2 ** pr_list_attempt))
echo "Transient error on attempt $pr_list_attempt/$pr_list_max_attempts (exit $pr_list_status); retrying in ${backoff}s..." >&2
echo "$pr_list_output" >&2
sleep "$backoff"
fi

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.

Observability gap on the last attempt: when pr_list_attempt equals pr_list_max_attempts, the transient-error branch is entered but the inner if [ "$pr_list_attempt" -lt "$pr_list_max_attempts" ] guard is false, so no diagnostic is logged and no exit occurs. The loop silently ends and the post-loop if catches it. This makes log triage harder because the retry count message and the final error output are separated, with nothing indicating the last attempt was also transient.

Suggestion — always log, only gate the sleep:

elif echo "$pr_list_output" | grep -qE '...'; then
  echo "Transient error on attempt $pr_list_attempt/$pr_list_max_attempts (exit $pr_list_status)" >&2
  echo "$pr_list_output" >&2
  if [ "$pr_list_attempt" -lt "$pr_list_max_attempts" ]; then
    backoff=$((2 ** pr_list_attempt))
    echo "Retrying in ${backoff}s..." >&2
    sleep "$backoff"
  fi
fi

@copilot please address this.

Comment thread .github/workflows/pr-sous-chef.md Outdated
if [ "$pr_list_status" -eq 0 ]; then
echo "$pr_list_output" > "$candidate_file"
pr_list_success=true
elif echo "$pr_list_output" | grep -qE "HTTP (5[0-9]{2}|429)|context deadline exceeded|connection reset|EOF"; then

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.

Bare EOF match is too broad: the pattern EOF will match any output line containing that substring (e.g., "EOF in configuration", "PROOF", "SIZEOF"). This could cause legitimate non-transient errors to be silently retried rather than fail-fast.

Consider tightening to:

  • \bEOF\b (word boundary) — avoids substring false positives
  • or unexpected EOF — matches only the Go net/http error text that actually indicates a truncated response

@copilot please address this.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot please run the pr-finisher skill, address any outstanding review feedback, refresh the branch if needed, and rerun checks once updated.
Unresolved review feedback to address first:

  • @github-actions: review requested changes
  • @github-actions: review requested changes
  • @github-actions: review requested changes

Generated by 👨‍🍳 PR Sous Chef · 8.21 AIC · ⌖ 6.19 AIC · ⊞ 3.4K ·
Comment /souschef to run again

Copilot AI and others added 2 commits July 4, 2026 16:39
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Jul 4, 2026

Copy link
Copy Markdown
Contributor Author

@copilot please run the pr-finisher skill, address any outstanding review feedback, refresh the branch if needed, and rerun checks once updated.
Unresolved review feedback to address first:

  • `@gith...

Addressed the outstanding github-actions review feedback in commits c464e6f and 054fcfd (stdout/stderr separation for gh pr list, tighter transient matching, portable backoff, and final-attempt logging behavior), and recompiled the lock file. Local validation passed: make recompile, make fmt, make lint, make test-unit, make test. I also reviewed the prior failing CI run; the Design Decision Gate failure was infra (getaddrinfo EAI_AGAIN uploading artifact), not code logic. Please have a maintainer re-trigger CI on the updated HEAD (agent pushes don’t auto-trigger workflows).

Copilot AI requested a review from gh-aw-bot July 4, 2026 16:50
@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot please run the pr-finisher skill, address the outstanding requested changes from github-actions[bot], and rerun checks now that the branch has fresh green CI. Focus first on these blocking reviews:

After resolving any remaining review feedback, post a concise completion summary on the PR.

Generated by 👨‍🍳 PR Sous Chef · 7.64 AIC · ⌖ 4.23 AIC · ⊞ 3.4K ·
Comment /souschef to run again

Copilot AI commented Jul 4, 2026

Copy link
Copy Markdown
Contributor Author

@copilot please run the pr-finisher skill, address the outstanding requested changes from github-actions[bot], and rerun checks now that the branch has fresh green CI. Focus first on these blockin...

Handled. There are no remaining code changes needed on this branch: the blocking github-actions[bot] findings in reviews #4629880799, #4629879056, and #4629878249 are already addressed by commits c464e6f and 054fcfd (stdout/stderr separation for gh pr list, tightened transient matching, portable backoff, and transient logging on final attempt).

I re-ran local checks on current HEAD and they pass: make fmt, make lint, make test-unit, make test, make recompile.

I also re-checked prior failing CI logs: the Design Decision Gate failure was infra-only (getaddrinfo EAI_AGAIN during artifact upload), not a workflow logic regression.

No additional code changes were required in this pass.

@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

🤖 PR Triage — Run §28715668077

Field Value
Category bug
Risk 🟡 Medium
Score 68/100
Impact 35/50 — hardens pr-sous-chef against transient API failures
Urgency 23/30 — CHANGES_REQUESTED (correctness regression in error classifier); copilot check passed
Quality 10/20 — CI pass but changes requested by reviewer
Action 🚀 fast_track (after author fixes requested changes)

⚠️ Blocked: github-actions[bot] requested changes (correctness regression in transient-error classifier). Author must address before merge. Once fixed, this is fast-track quality.

Generated by 🔧 PR Triage Agent · 113.5 AIC · ⌖ 13 AIC · ⊞ 5.5K ·

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot please run the pr-finisher skill, address any outstanding review feedback, refresh the branch if needed, and rerun checks once updated.
Focus first on these blocking reviews:

Generated by 👨‍🍳 PR Sous Chef · 6.25 AIC · ⌖ 6.22 AIC · ⊞ 3.4K ·
Comment /souschef to run again

Copilot AI commented Jul 4, 2026

Copy link
Copy Markdown
Contributor Author

@copilot please run the pr-finisher skill, address any outstanding review feedback, refresh the branch if needed, and rerun checks once updated.
Focus first on these blocking reviews:

Checked the current PR state and the blocking github-actions requested changes are already addressed in c464e6f and 054fcfd (stdout/stderr separation, tighter transient matching, portable backoff, and final-attempt transient logging). I also reviewed current checks and referenced runs; there are no new actionable code failures for this branch state. No additional code changes were required in this pass.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot please run the pr-finisher skill and resolve the remaining blocking requested changes from github-actions[bot]. Focus on the retry/backoff follow-ups called out in the blocking reviews, confirm each requested change is addressed on the current HEAD, and post a concise completion summary for maintainers.

Blocking reviews to reconcile:

Run: https://github.com/github/gh-aw/actions/runs/28718950400

Generated by 👨‍🍳 PR Sous Chef · 5.79 AIC · ⌖ 3.85 AIC · ⊞ 3.4K ·
Comment /souschef to run again

Copilot AI commented Jul 4, 2026

Copy link
Copy Markdown
Contributor Author

@copilot please run the pr-finisher skill and resolve the remaining blocking requested changes from github-actions[bot]. Focus on the retry/backoff follow-ups called out in the blocking reviews, c...

Confirmed on current HEAD (054fcfd) that the blocking retry/backoff fixes from reviews #4629880799, #4629879056, and #4629878249 are present in both .github/workflows/pr-sous-chef.md and .github/workflows/pr-sous-chef.lock.yml: stdout/stderr separation to keep JSON clean, tightened transient matching (unexpected EOF|read: EOF), and final-attempt transient logging with portable backoff (1 << pr_list_attempt). I also checked the referenced run (28718950400): completed successfully with no failed jobs. No additional code changes were required in this pass.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

4 participants