Repository navigation
Open a repair PR when the release sync hits conflicts - #1883
Merged
David Pine (IEvangelist) merged 2 commits intoOct 13, 2026
Merged
Conversation
Exit 3 from the merge helper signals conflicts needing review. The workflow then pushes a rolling release-sync/<version> branch holding the merge with conflict markers and opens a draft PR into the release branch. While that PR is open, later runs skip syncing instead of failing again. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Repair detection is spoofable, while non-marker conflicts can be silently resolved and validation bypassed.
4 open findings
What changed in this PR
Automates human repair when release synchronization encounters unresolved conflicts.
Changes:
- Adds conflict-specific helper behavior and exit code.
- Opens and tracks draft repair PRs.
- Expands merge-helper regression tests.
| File | Description |
|---|---|
.github/workflows/update-release-branch.yml |
Detects and creates repair PRs. |
.github/scripts/merge-main-into-release.sh |
Commits conflicts for review. |
.github/scripts/test-merge-main-into-release.sh |
Tests new helper behavior. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- Classify unresolved conflicts (text, binary, deleted-on-main, deleted-on-release) and call out the ones without markers in the PR body - Run the conflict-marker check on every path except unresolved ones - Match the repair PR head owner so fork branches cannot pause syncing - Buffer the helper summary so manual-recovery guidance is not duplicated Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Contributor
Frontend HTML artifact readyThe latest frontend build uploaded the This comment updates automatically when a new frontend build artifact is uploaded. |
Eric Erhardt (eerhardt)
approved these changes
Oct 13, 2026
David Pine (IEvangelist)
deleted the
ievangelist-update-release-branch-failures
branch
October 13, 2026 20:09
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.



Summary
Update Release Branchcurrently fails on every push tomainonce a merge intorelease/X.Yhas a real conflict that the helper can't auto-resolve (e.g. runs 38433783235 and 38436114463 oncomponent-props.contracts.ts). It stays red until someone notices and repairs the branch by hand.3for "conflicts need human review" (merge aborted, release untouched) instead of a generic failure.--commit-conflictsmode commits the merge with conflict markers left in the unresolved files, keeping both parents, and writes the conflicted paths to$RELEASE_SYNC_CONFLICTS_FILE.3the workflow pushes a rollingrelease-sync/X.Ybranch and opens a draft PR intorelease/X.Ythat lists the conflicts and the "Create a merge commit, never squash" instructions. The run finishes green with a warning and summary link.release-sync/X.Y. If one exists it skips the sync, so pushes tomainno longer repeat the same failure while a human resolves it. After the repair merges, the next push resumes syncing.pull-requests: write(already granted forupdate-integration-data.yml).Non-conflict failures (push rejection, fatal git errors) still fail the job as before. This is independent of #1701 (push-race retry) and #1666 (version config conflicts) and composes with them.
Third-party links and affiliations
None
Validation
bash .github/scripts/test-merge-main-into-release.sh: all cases pass, including new exit-code3,--commit-conflictswith conflicts, and--commit-conflictson a clean merge.bash -non the three workflowrunblocks (extracted from the YAML): passed.prettier --checkon the workflow: passed after--write.origin/release/17.0andorigin/mainin a temporary worktree: the default mode aborts with exit3, and--commit-conflictsproduces a two-parent merge listingsrc/frontend/tests/typecheck/component-props.contracts.tswith a clean working tree.