Check Existing Issues
Problem Description
There is no staging between "merged" and "released to consumers". release.yml runs go-semantic-release on CI completion on main (workflow_run → branches: [main]), so every conventional-commit merge to main can cut a stable version — the changelog/tag is produced immediately, straight to anyone tracking the module.
A dev branch already exists, but it has rotted: it is ~14 commits ahead / 65 behind main, and both ci.yml and release.yml only trigger on main (branches: [main]), so dev is wired into nothing and has drifted. The intent was there; without a defined promotion flow it just accumulated divergence.
There is also no way to exercise the release pipeline itself (semantic-release config, goreleaser hook, changelog generation) without doing it on a real main release in front of consumers.
Desired Solution you'd like
Define an explicit release train with a prerelease channel:
dev as the integration branch. Reset it from main first to clear the existing drift.
- Run CI on
dev — extend branches: in ci.yml (and its pull_request target) to include dev.
- Prerelease channel. Configure
go-semantic-release to cut -rc/-beta prerelease tags from dev so the pipeline is exercised on prereleases, not on consumers.
dev → main promotion (scheduled or manual via PR) cuts the stable release. main stays the stable channel; the auto-release on main is unchanged.
- Document the branch policy in
CONTRIBUTING.md (where PRs target, how a release is cut).
This pairs with the docs/release-strategy-mvp work already in progress.
Additional Context
Found while auditing the release wiring. Smallest viable version: reset dev, add dev to CI triggers, add a semantic-release prerelease branch config, document it. Labeled area:release.
Check Existing Issues
Problem Description
There is no staging between "merged" and "released to consumers".
release.ymlrunsgo-semantic-releaseon CI completion onmain(workflow_run→branches: [main]), so every conventional-commit merge tomaincan cut a stable version — the changelog/tag is produced immediately, straight to anyone tracking the module.A
devbranch already exists, but it has rotted: it is ~14 commits ahead / 65 behindmain, and bothci.ymlandrelease.ymlonly trigger onmain(branches: [main]), sodevis wired into nothing and has drifted. The intent was there; without a defined promotion flow it just accumulated divergence.There is also no way to exercise the release pipeline itself (semantic-release config, goreleaser hook, changelog generation) without doing it on a real
mainrelease in front of consumers.Desired Solution you'd like
Define an explicit release train with a prerelease channel:
devas the integration branch. Reset it frommainfirst to clear the existing drift.dev— extendbranches:inci.yml(and itspull_requesttarget) to includedev.go-semantic-releaseto cut-rc/-betaprerelease tags fromdevso the pipeline is exercised on prereleases, not on consumers.dev → mainpromotion (scheduled or manual via PR) cuts the stable release.mainstays the stable channel; the auto-release onmainis unchanged.CONTRIBUTING.md(where PRs target, how a release is cut).This pairs with the
docs/release-strategy-mvpwork already in progress.Additional Context
Found while auditing the release wiring. Smallest viable version: reset
dev, adddevto CI triggers, add a semantic-release prerelease branch config, document it. Labeledarea:release.