Problem
Same root cause found and fixed in z-shell/zsh-eza this session: renovate.json has no baseBranches override, so Renovate defaults to the repo's default branch (main), bypassing next. dependabot.yml was already fixed for this in #172, but Renovate wasn't. src's PR history includes many renovate/*-headed PRs merged straight to main (#171, #150-#156, etc.), confirming this is a live, exercised gap, not theoretical.
next was also found 1 commit behind main (PR #176, merged directly from a non-next/hotfix-* branch by the Copilot coding agent) -- already fast-forwarded to resolve.
There's also no equivalent of zsh-eza's main-branch-guard.yml required-status-check workflow to prevent this class of issue going forward.
Fix
renovate.json: add "baseBranches": ["next"].
- Add
.github/workflows/main-branch-guard.yml: required-status-check workflow that fails a PR targeting main unless its head branch is next or matches hotfix-*, per ADR-0008's next -> main branching model.
- Wire the check into
main's ruleset as a required status check once it has run at least once on a real PR.
Problem
Same root cause found and fixed in z-shell/zsh-eza this session:
renovate.jsonhas nobaseBranchesoverride, so Renovate defaults to the repo's default branch (main), bypassingnext.dependabot.ymlwas already fixed for this in #172, but Renovate wasn't. src's PR history includes manyrenovate/*-headed PRs merged straight tomain(#171, #150-#156, etc.), confirming this is a live, exercised gap, not theoretical.nextwas also found 1 commit behindmain(PR #176, merged directly from a non-next/hotfix-*branch by the Copilot coding agent) -- already fast-forwarded to resolve.There's also no equivalent of zsh-eza's
main-branch-guard.ymlrequired-status-check workflow to prevent this class of issue going forward.Fix
renovate.json: add"baseBranches": ["next"]..github/workflows/main-branch-guard.yml: required-status-check workflow that fails a PR targetingmainunless its head branch isnextor matcheshotfix-*, per ADR-0008'snext->mainbranching model.main's ruleset as a required status check once it has run at least once on a real PR.