Skip to content

Preserve sanitized upstream conflict type through GitHub adapter into bounded recovery - #700

Merged
AdamFrisby merged 2 commits into
mainfrom
codeybox/265251cf
Oct 5, 2026
Merged

AdamFrisby merged 2 commits into
mainfrom
codeybox/265251cf

Conversation

@AdamFrisby

Copy link
Copy Markdown
Owner

Automated via CodeyBox — work item 265251cfe05c4af3a96d1c23a1edfc5d

Initiated by CodeyBox operator


Co-Authored-By: CodeyBox noreply@codeybox.invalid
🤖 Generated with CodeyBox

AdamFrisby and others added 2 commits October 5, 2026 06:04
GitHubUpstreamRemote.CompleteAsync flattened every PushToUpstreamAsync
failure into a message-only InvalidOperationException, dropping the
UpstreamPushReconcileConflictException branch/strategy signal. The
pipeline inner-chain check then missed the recovery route and burned
generic push retries.

Preserve only a validated typed signal: walk the exception chain for
UpstreamPushReconcileConflictException, allowlist strategy to
merge/rebase, validate and token-scrub the branch, and rethrow a fresh
instance with no inner exception. Generic failures keep existing
sanitization; arbitrary message text never triggers recovery.

Tests drive genuine diverged work-branch conflicts through the real
LocalGitHost and real GitHubUpstreamRemote (transport-rewrite fixture,
no external network) for merge and rebase, plus pipeline routing to
bounded conflict rework (single push attempt) and disabled/cap paths.

CodeyBox-Prompt-Revision: 1
Co-Authored-By: CodeyBox <noreply@codeybox.invalid>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… recognition

Add the missing pipeline-level successful-resolution test: a genuine
upstream work-branch conflict enters bounded conflict rework via the real
adapter (one push attempt), is resolved deterministically with real git
(merge retaining both histories), then the requeued pickup re-verifies
the required build against the changed tip and delivers Done with the PR
opened and the exact resolved tip upstream. The test asserts the
pre-resolution approval was not carried forward (fresh tip observed
post-resolution, stale tip absent) and that no token material reaches
logs, errors, serialized outcomes, or the timeline.

Dedup the typed-conflict InnerException chain walk into
UpstreamPushReconcileConflictException.TryFindIn (single source of truth
in CodeyBox.Core) and call it from the adapter and the orchestrator.
Clean up test-only quality issues: unused parameter, dead Uri, write-only
fields, shim file cleanup on Dispose, try/finally temp-clone cleanup, and
one shared pipeline fixture for the four push-path tests.

CodeyBox-Prompt-Revision: 1
Co-Authored-By: CodeyBox <noreply@codeybox.invalid>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@AdamFrisby
AdamFrisby merged commit 4209a34 into main Oct 5, 2026
@AdamFrisby
AdamFrisby deleted the codeybox/265251cf branch October 5, 2026 09:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant