The problem
Auto-merge policy today is binary: patch/minor auto-merge, majors and grouped PRs go to manual review. The safety half is right. The review half does not scale — Andrew cannot review each one, and they cannot wait indefinitely, so they accumulate.
"I can't review each one and they can't wait indefinitely. ideally we should have a standard 'accept after a week' system." — 2026-09-10
There is no third state between "merge immediately" and "wait for a human who may never get to it."
Measured state, 2026-09-10
20 open Dependabot PRs fleet-wide. Ages run to 12 days. Of those checked:
| State |
Count |
Meaning |
| CLEAN, checks green |
3 |
Mergeable now; waiting only on attention |
| BEHIND |
3 |
Need a branch update, otherwise fine |
| RED on own content |
2 |
Genuinely need work (kebab-tax-netlify#280, cleanroom#13) |
| RED on an unrelated repo-wide failure |
5 |
Blocked by someone else's problem |
The cost is concrete, not hypothetical
All five red amelia-boone PRs (#67, #72, #73, #74, #75) were red because of the repo's audit gate failing on advisories unrelated to those PRs — issue #79, red since 2026-08-30. Verified directly: #72's CI failure is FAIL: advisories not in the accepted baseline: GHSA-px8p-9vwx-vf98 fflate, which has nothing to do with the minor-and-patch group it bumps.
So one unfixed red gate held five unrelated dependency PRs hostage for days, and nothing surfaced that. Four of the five should go green once #80 merges.
This is the compounding failure mode: a stalled queue hides which PRs are actually broken, because everything is red for the same borrowed reason.
What exists today
github-workflows/.github/workflows/dependabot-auto-merge.yml already does the hard correctness work and should be built on, not replaced:
- computes patch-vs-major from previous/new version itself rather than trusting
steps.metadata.outputs.update-type (which mislabels reusable-workflow majors as patch)
- forces any multi-dependency group PR through the namespace-allowlist path, so a major cannot ride along inside a group that looks like a patch
- keeps a trusted-namespace allowlist for major bumps
The missing piece is purely the time dimension. Every decision is made at PR-open time and never revisited.
Proposed direction (needs design, not adoption as written)
A soak-then-accept tier between auto-merge and indefinite wait:
- Patch/minor — unchanged, auto-merge immediately.
- Majors and groups — become eligible for auto-merge after a soak of N days (a week, per the ask) provided CI has been continuously green for that window and the PR has not been touched.
- Never soak-merge — anything whose checks are red, anything in a repo whose default branch is red (avoids merging into a broken baseline), and any PR a human has explicitly marked hold.
- Escape hatch — a label that either forces the wait or skips it.
Open questions for the design pass:
- Where does the timer live? A scheduled workflow that re-evaluates open Dependabot PRs is the obvious shape, since the existing workflow is
pull_request-triggered and cannot observe elapsed time.
- Does the soak clock reset when Dependabot force-pushes a rebase? It should, or the soak proves nothing about the code that actually merges.
- How does "CI green for the whole window" get verified rather than "CI green right now"? The latter is trivially satisfiable by a single passing run and would not catch a flaky or intermittently red PR.
- Should a repo with a red default branch block soak-merges into it? Argues yes, per the amelia-boone case above.
- Does this interact with the merge-lock? These would merge without a human-typed lock by construction, which is a deliberate policy decision and should be recorded as one rather than emerge as a side effect.
Why this is worth doing now
The queue is at 20 and the oldest is 12 days. The failure is not that a bad upgrade might land — the existing workflow guards that well. It is that good upgrades do not land, security patches included, and a permanently-stalled queue trains everyone to ignore it. amelia-boone#79 sat red for 11 days on a check that was not a required context; nobody noticed because there was always something red.
Related: #75 (branch protection consistency), the amelia-boone#54 astro major that has been waiting on exactly this kind of decision.
https://claude.ai/code/session_01ESsw699T54JHARkQXrdL3o
The problem
Auto-merge policy today is binary: patch/minor auto-merge, majors and grouped PRs go to manual review. The safety half is right. The review half does not scale — Andrew cannot review each one, and they cannot wait indefinitely, so they accumulate.
There is no third state between "merge immediately" and "wait for a human who may never get to it."
Measured state, 2026-09-10
20 open Dependabot PRs fleet-wide. Ages run to 12 days. Of those checked:
kebab-tax-netlify#280,cleanroom#13)The cost is concrete, not hypothetical
All five red
amelia-boonePRs (#67, #72, #73, #74, #75) were red because of the repo's audit gate failing on advisories unrelated to those PRs — issue #79, red since 2026-08-30. Verified directly:#72's CI failure isFAIL: advisories not in the accepted baseline: GHSA-px8p-9vwx-vf98 fflate, which has nothing to do with the minor-and-patch group it bumps.So one unfixed red gate held five unrelated dependency PRs hostage for days, and nothing surfaced that. Four of the five should go green once #80 merges.
This is the compounding failure mode: a stalled queue hides which PRs are actually broken, because everything is red for the same borrowed reason.
What exists today
github-workflows/.github/workflows/dependabot-auto-merge.ymlalready does the hard correctness work and should be built on, not replaced:steps.metadata.outputs.update-type(which mislabels reusable-workflow majors as patch)The missing piece is purely the time dimension. Every decision is made at PR-open time and never revisited.
Proposed direction (needs design, not adoption as written)
A soak-then-accept tier between auto-merge and indefinite wait:
Open questions for the design pass:
pull_request-triggered and cannot observe elapsed time.Why this is worth doing now
The queue is at 20 and the oldest is 12 days. The failure is not that a bad upgrade might land — the existing workflow guards that well. It is that good upgrades do not land, security patches included, and a permanently-stalled queue trains everyone to ignore it.
amelia-boone#79sat red for 11 days on a check that was not a required context; nobody noticed because there was always something red.Related: #75 (branch protection consistency), the
amelia-boone#54astro major that has been waiting on exactly this kind of decision.https://claude.ai/code/session_01ESsw699T54JHARkQXrdL3o