What happened
v0.11.0-beta.5 was tagged and published without a CHANGELOG.md entry. Every prior beta (beta.1, beta.3, beta.4) had shipped with its own dedicated section; beta.5 didn't, because the release-beta skill's pre-tag gate checklist never asked for one. Nothing caught it before the tag existed — the changelog is baked into the compiled binary at build time (packages/opencode/script/build.ts reads CHANGELOG.md into OPENCODE_CHANGELOG), so by the time anyone noticed, the fix could only apply to the next beta, not the one already built and published.
What #1281 fixes
Adds the missing beta.5 entry, and adds an explicit gate + Hard Rule to .claude/commands/release-beta.md telling whoever runs the release to check for a CHANGELOG.md entry before tagging.
What's still open
That's a documentation fix, not an enforced one — it relies on whoever (human or agent) runs the release actually reading and following that step. script/release-preflight.ts already automates several other pre-tag checks (tag collision, version sanity vs npm, prerelease ancestry, marker guard) that used to be the same kind of "remember to check this" gate. This should be one more: have release-preflight.ts parse CHANGELOG.md and fail the tag stage if there's no ## [X.Y.Z] (or X.Y.Z-beta.N) section for the version being tagged, the same way it already fails on a tag collision.
That would make this a hard, automatic stop instead of a step someone can skip under release pressure — which is exactly how beta.5 shipped without one.
Related: #1281
🤖 Generated with Claude Code
https://claude.ai/code/session_01H8gZMvZunXzx4LPSZzCafq
What happened
v0.11.0-beta.5was tagged and published without aCHANGELOG.mdentry. Every prior beta (beta.1, beta.3, beta.4) had shipped with its own dedicated section; beta.5 didn't, because therelease-betaskill's pre-tag gate checklist never asked for one. Nothing caught it before the tag existed — the changelog is baked into the compiled binary at build time (packages/opencode/script/build.tsreadsCHANGELOG.mdintoOPENCODE_CHANGELOG), so by the time anyone noticed, the fix could only apply to the next beta, not the one already built and published.What #1281 fixes
Adds the missing beta.5 entry, and adds an explicit gate + Hard Rule to
.claude/commands/release-beta.mdtelling whoever runs the release to check for aCHANGELOG.mdentry before tagging.What's still open
That's a documentation fix, not an enforced one — it relies on whoever (human or agent) runs the release actually reading and following that step.
script/release-preflight.tsalready automates several other pre-tag checks (tag collision, version sanity vs npm, prerelease ancestry, marker guard) that used to be the same kind of "remember to check this" gate. This should be one more: haverelease-preflight.tsparseCHANGELOG.mdand fail thetagstage if there's no## [X.Y.Z](orX.Y.Z-beta.N) section for the version being tagged, the same way it already fails on a tag collision.That would make this a hard, automatic stop instead of a step someone can skip under release pressure — which is exactly how beta.5 shipped without one.
Related: #1281
🤖 Generated with Claude Code
https://claude.ai/code/session_01H8gZMvZunXzx4LPSZzCafq