fix(back-merge): do not wait for green on a downstream carry - #648
Merged
Conversation
A back-merge moves content DOWNSTREAM -- main -> beta -> development -- and everything it carries has already passed the quality workflow further up the chain. A Dependabot bump that reached main was gated on main. Re-running the same checks on the same commits on the way back down adds no information. What it costs is convergence. These pull requests sit on branches that are red for reasons of their own: a stale beta failing today's gates, a release job with no signing credentials. None of that has anything to do with the commits being carried, and waiting for green there means the ancestry is never repaired -- so every following promotion conflicts on the same version file, forever. That is the failure this workflow exists to end. Measured on the first real run: carried=20, in-sync=6, skipped=16, with most skips being 'carries content, left for review' on branches whose red had nothing to do with the carry. If a back-merge does break something, the up-merge is where it shows. development runs the full suite on every push and development -> beta runs it again with E2E, so a defect carried down is caught one hop later against a smaller diff. The safety that remains is the one that matters: a CONFLICTING pull request still cannot merge, and anything conflicting outside the version files is still refused rather than resolved automatically. The header prose is updated with the predicate rather than left describing the old rule. Verified: YAML parses; bash -n on each run block extracted from the parsed YAML; no dangling references to the removed helper.
This was referenced Aug 30, 2026
This was referenced Aug 30, 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.
A back-merge moves content downstream —
main → beta → development— and everything it carries has already passed the quality workflow further up the chain. A Dependabot bump that reachedmainwas gated onmain. Re-running the same checks on the same commits on the way back down adds no information.What the gate actually cost
These pull requests sit on branches that are red for reasons of their own: a stale
betafailing today's gates, a release job with no signing credentials. None of that has anything to do with the commits being carried — and waiting for green there means the ancestry is never repaired, so every following promotion conflicts on the same version file, forever. That is the failure this workflow exists to end.Measured on the first real run:
with most skips being "carries content, left for review" on branches whose red had nothing to do with the carry.
Where a real break still surfaces
The up-merge.
developmentruns the full suite on every push, anddevelopment → betaruns it again with E2E. A defect carried down is caught one hop later, against a smaller diff.What is deliberately unchanged
.forgejo/*Codeberg leftovers being resurrected on seven apps in the first run.--merge, never--squash, so the carry does not reopen the gap it just closed.The header prose is updated along with the predicate, rather than left describing the old rule.
Verified: YAML parses;
bash -non each run block extracted from the parsed YAML; no dangling references to the removedpr_is_greenhelper.