Goal
Define when a next → main promotion should happen for the repositories
ADR-0008 assigns that branch model to, and decide whether any part of the
trigger should be automated.
Context
decisions/0008-branching-model.md establishes which repositories promote
(wiki, src, zi, zsh-lint, zsh-eza) and states that promotion is a
publication trigger for class-1 deploy repos. runbooks/branch-protection.md
and runbooks/release.md cover how a promotion is protected and reconciled
once it happens. None of these documents states when a promotion should
happen — that is currently informal maintainer judgment, undocumented and
unaudited.
A working precedent already exists for automating a readiness signal
without automating the merge decision: release-prepare.yml (class 2) opens
or updates a proposal issue with a draft changelog when releasable commits
land, but a maintainer still cuts the tag. The same pattern (propose, don't
auto-merge) is the natural fit for next → main promotion.
Decision needed
Choose a promotion-trigger model, potentially per class rather than
org-wide:
- Continuous — promote on every green
next commit. Simplest, but no
margin for delayed/nightly CI failures on deploy-sensitive repos.
- Bake/soak period — promote once
next has been green for N
hours/days. Fits wiki/src, where a bad promotion triggers a deploy.
- Fixed cadence — batch commits into a scheduled promotion (daily/
weekly). Reduces deploy flapping but is a poor fit for zi/zsh-eza,
where main is the ref consumers pull directly and staleness has a
direct cost.
- Readiness-proposal automation — a
promote-prepare.yml workflow
(mirroring release-prepare.yml) opens/updates a next → main PR when
next is ahead of main, checks pass, and no open release-blocker-type
issue exists; a human still merges via the documented admin-bypass path.
- Status quo — leave it fully manual, undocumented.
Acceptance criteria
- A documented trigger model exists for each
next → main repository (or an
explicit statement that one model applies to all of them, with reasoning).
- The chosen model states its relationship to existing CI/branch-protection
requirements (runbooks/branch-protection.md) rather than duplicating
them.
- Any automation proposed opens or updates a PR only — it does not
auto-merge into main, consistent with promotion being a deliberate
publication act (ADR-0008 Consequences).
- The decision is recorded as an ADR (or an accepted amendment to ADR-0008,
per its "changing a repository's assigned model requires amending this
ADR" clause) rather than left informal, so future audits have a written
comparison point the way ADR-0008's branch-model table already provides
for branch assignment.
References
decisions/0008-branching-model.md
decisions/0007-release-publication-flow.md
runbooks/branch-protection.md
runbooks/release.md (release-prepare.yml precedent)
runbooks/adr.md
This issue records a policy gap and proposes options for maintainer
discussion. No workflow or policy file is changed as part of filing it.
Goal
Define when a
next → mainpromotion should happen for the repositoriesADR-0008 assigns that branch model to, and decide whether any part of the
trigger should be automated.
Context
decisions/0008-branching-model.mdestablishes which repositories promote(
wiki,src,zi,zsh-lint,zsh-eza) and states that promotion is apublication trigger for class-1 deploy repos.
runbooks/branch-protection.mdand
runbooks/release.mdcover how a promotion is protected and reconciledonce it happens. None of these documents states when a promotion should
happen — that is currently informal maintainer judgment, undocumented and
unaudited.
A working precedent already exists for automating a readiness signal
without automating the merge decision:
release-prepare.yml(class 2) opensor updates a proposal issue with a draft changelog when releasable commits
land, but a maintainer still cuts the tag. The same pattern (propose, don't
auto-merge) is the natural fit for
next → mainpromotion.Decision needed
Choose a promotion-trigger model, potentially per class rather than
org-wide:
nextcommit. Simplest, but nomargin for delayed/nightly CI failures on deploy-sensitive repos.
nexthas been green for Nhours/days. Fits
wiki/src, where a bad promotion triggers a deploy.weekly). Reduces deploy flapping but is a poor fit for
zi/zsh-eza,where
mainis the ref consumers pull directly and staleness has adirect cost.
promote-prepare.ymlworkflow(mirroring
release-prepare.yml) opens/updates anext → mainPR whennextis ahead ofmain, checks pass, and no openrelease-blocker-typeissue exists; a human still merges via the documented admin-bypass path.
Acceptance criteria
next → mainrepository (or anexplicit statement that one model applies to all of them, with reasoning).
requirements (
runbooks/branch-protection.md) rather than duplicatingthem.
auto-merge into
main, consistent with promotion being a deliberatepublication act (ADR-0008 Consequences).
per its "changing a repository's assigned model requires amending this
ADR" clause) rather than left informal, so future audits have a written
comparison point the way ADR-0008's branch-model table already provides
for branch assignment.
References
decisions/0008-branching-model.mddecisions/0007-release-publication-flow.mdrunbooks/branch-protection.mdrunbooks/release.md(release-prepare.ymlprecedent)runbooks/adr.mdThis issue records a policy gap and proposes options for maintainer
discussion. No workflow or policy file is changed as part of filing it.