Fail closed on GitHub API errors during the sync workflow.#38
Merged
Conversation
captainsafia
approved these changes
May 6, 2026
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.

Description
get_pr_for_commit()was silently catchingCalledProcessErrorand returningNoneon GitHub API failures. The loop detection code inis_sync_originated()treated this the same as "no PR found," causing it to fail-open: sync-originated commits were not filtered out, and the sync workflow created reverse-direction PRs that should never have existed.This was the root cause of warpdotdev/warp#9591 (and 3 other PRs created on 2026-04-30), where public→private sync commits were synced back to public.
The fix removes the blanket
exceptfromget_pr_for_commit()so API errors propagate. In the loop detection path this aborts the sync run; in non-critical call sites (PR description building, reviewer lookup) the callers now catch and degrade gracefully with logging.Testing
Added
test_api_failure_propagates_when_trailer_presentto verify thatis_sync_originatedraises on API failure instead of returningFalse. All existing loop detection tests continue to pass.Co-Authored-By: Oz oz-agent@warp.dev