Dependabot opens PRs into a bake window that will reject them
The install step runs under a minimum release age of 7 days (604800 seconds), enforced at install time. Dependabot has no matching cooldown, so it opens a PR the moment a version publishes — into a guard that is guaranteed to refuse it.
The failure is unambiguous once you get past the log noise:
error: No version matching "typebox" found for specifier "1.3.14"
(blocked by minimum-release-age: 604800 seconds)
error: typebox@1.3.14 failed to resolve
FAILED STEP: Run sfw bun install --frozen-lockfile
Confirmed on at least two open PRs with different ecosystems, so this is the mechanism rather than a one-off.
Neither component is misbehaving. The bake window is a deliberate supply-chain control and should stay. Dependabot is doing exactly what it is configured to do. The defect is that the two were never told about each other.
Why this produces a backlog rather than a blip
A PR blocked this way does not recover on its own. The version ages past the window within days, at which point the same PR would very likely pass — but nothing re-runs it. It stays red, accumulates, and reads like a broken dependency rather than a timing artifact.
The oldest open PR here dates from May. The most recent blocked one proposes a version that is now nine days old — comfortably past the window, still red, because the failing run is from the day it opened.
The second-order cost is worse than the queue itself: a wall of red dependency PRs trains everyone to stop reading them. When a genuinely broken bump appears, it looks exactly like the other nine.
Fix
Give Dependabot a cooldown that matches or exceeds the install guard, so it opens PRs only once a version can actually install. .github/dependabot.yml already sets schedule, groups and PR limits; this is the missing knob, not a restructure.
The two windows should be defined in terms of each other, or at minimum documented together with a comment on each pointing at the other — otherwise the next person to tune one silently re-creates this.
Also needed, separately
Re-run CI on the currently-blocked PRs whose versions have since aged out. Several are likely green now with no code change at all. Worth doing before anyone judges whether the bumps themselves are sound, since right now a timing artifact and a real breakage are indistinguishable at a glance.
Note: at least two of the open failures are not bake-age and have distinct causes. Those want individual attention and should not be swept into a bulk re-run.
Check
After the change, a freshly published version must produce no PR until it clears the window — and the first PR that does appear must install cleanly on its first run.
Assert both halves. A cooldown that is simply longer than anyone tests will look identical to a cooldown that works, right up until it does not.
Dependabot opens PRs into a bake window that will reject them
The install step runs under a minimum release age of 7 days (
604800seconds), enforced at install time. Dependabot has no matching cooldown, so it opens a PR the moment a version publishes — into a guard that is guaranteed to refuse it.The failure is unambiguous once you get past the log noise:
Confirmed on at least two open PRs with different ecosystems, so this is the mechanism rather than a one-off.
Neither component is misbehaving. The bake window is a deliberate supply-chain control and should stay. Dependabot is doing exactly what it is configured to do. The defect is that the two were never told about each other.
Why this produces a backlog rather than a blip
A PR blocked this way does not recover on its own. The version ages past the window within days, at which point the same PR would very likely pass — but nothing re-runs it. It stays red, accumulates, and reads like a broken dependency rather than a timing artifact.
The oldest open PR here dates from May. The most recent blocked one proposes a version that is now nine days old — comfortably past the window, still red, because the failing run is from the day it opened.
The second-order cost is worse than the queue itself: a wall of red dependency PRs trains everyone to stop reading them. When a genuinely broken bump appears, it looks exactly like the other nine.
Fix
Give Dependabot a cooldown that matches or exceeds the install guard, so it opens PRs only once a version can actually install.
.github/dependabot.ymlalready sets schedule, groups and PR limits; this is the missing knob, not a restructure.The two windows should be defined in terms of each other, or at minimum documented together with a comment on each pointing at the other — otherwise the next person to tune one silently re-creates this.
Also needed, separately
Re-run CI on the currently-blocked PRs whose versions have since aged out. Several are likely green now with no code change at all. Worth doing before anyone judges whether the bumps themselves are sound, since right now a timing artifact and a real breakage are indistinguishable at a glance.
Note: at least two of the open failures are not bake-age and have distinct causes. Those want individual attention and should not be swept into a bulk re-run.
Check
After the change, a freshly published version must produce no PR until it clears the window — and the first PR that does appear must install cleanly on its first run.
Assert both halves. A cooldown that is simply longer than anyone tests will look identical to a cooldown that works, right up until it does not.