Repository navigation
fix(changeprovider): preserve Phabricator HTTP status errors - #887
Merged
behinddwalls merged 3 commits intoOct 20, 2026
Merged
Conversation
Tmwakalasya
requested review from
a team,
behinddwalls and
sbalabanov
as code owners
October 19, 2026 17:35
behinddwalls
approved these changes
Oct 20, 2026
behinddwalls
enabled auto-merge
October 20, 2026 17:16
Contributor
Author
|
@behinddwalls I merged main after your approval, so the workflow needs approval again. Could you approve it? Auto-merge should take it from there. (The earlier failure on 7be48ac was a transient proxy.golang.org fetch error, unrelated to this change. My apologies |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why?
The Phabricator provider reports rejected Conduit HTTP responses as plain error strings. The HTTP classifier cannot recover their status codes, so rate limits (429) and temporary outages (503) take the non-retryable path.
What?
Wrap the existing
platform/http.StatusErrorat the Conduit response boundary, preserving the status and response body through the provider's error chain. The existing classifier can then distinguish retryable responses from permanent failures such as 400 and 401. Body-read failures retain their existing wrapped read error.Add provider-level regression cases for 429, 503, 400, and 401, plus an assertion that body-read errors remain discoverable with
errors.Is.Test Plan
The four new status-error cases failed against the original implementation because
*http.StatusErrorwas absent from the returned error chain, then passed with the fix.Passed locally:
./tool/bazel test //submitqueue/extension/changeprovider/phabricator:go_default_test //platform/http:go_default_test //platform/errs/http:go_default_test --test_output=errors ./tool/bazel run @rules_go//go -- vet -mod=readonly ./submitqueue/extension/changeprovider/phabricator make fmt make lint check-tidy check-gazelleFull integration and end-to-end suites were not run; validation covers the provider and HTTP error-classification boundaries.
Issue
No linked issue.