Skip to content

Permanent transport-integrity errors can enter API rate-limit retries based on branch names #68787

Closed

Description

@pelikhan

Summary

Review of #68732 at commit 40c71f95ad05d3f2da56bc19e38e3f041495f7e9 found a P2 retry regression: a permanent local integrity failure is classified as transient when its branch-derived artifact path contains words such as network or timeout.

Location

actions/setup/js/create_or_update_pull_request.cjs:7–21

Related classifier: actions/setup/js/error_recovery.cjs:isTransientError.

Reproduction and evidence

Invoke createOrUpdatePullRequest with an assertTransportUnchanged callback that throws an actual TransportIntegrityError for /tmp/gh-aw/aw-fix-network-timeout.patch.

A reproduction accelerated timer execution while recording requested delays. It observed:

  • Six assertion attempts.
  • Zero GitHub API writes.
  • Five retry sleeps totaling approximately 699 seconds of requested delay.

The callback runs inside withRetry, whose message-based transient classifier matches the artifact path. A branch such as fix-typo does not produce the same classification.

Expected behavior

Transport-integrity failures must terminate immediately and must never consume API retry backoff, regardless of branch name or path text.

Suggested fix and coverage

Explicitly classify integrity errors as non-retryable using a stable error type/code rather than message text. Cover the PR creation and fallback-issue retry paths that use integrity callbacks. Add tests using real typed errors and realistic branch-derived paths containing network and timeout, asserting no retry timer and no API write.

The existing added retry test uses a generic error without a realistic path and does not cover this case. No fix was applied.

Activity

  1. added 2 commits that reference this issue on Oct 14, 2026
    016dc41
    0389684
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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions