-
Notifications
You must be signed in to change notification settings - Fork 134
fix: add a CHANGELOG gate to the release-beta process #1281
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -75,6 +75,31 @@ issues the release workflow (full `bun turbo typecheck` + Verdaccio + npm publis | |
| will hit. Do NOT skip any of these: | ||
|
|
||
| ```bash | ||
| # 0. CHANGELOG entry — MUST exist in the commit you are about to tag, not after. | ||
| # The changelog is baked into the compiled binary + every npm package at | ||
| # build time (packages/opencode/script/build.ts reads CHANGELOG.md into | ||
| # OPENCODE_CHANGELOG; packages/opencode/script/publish.ts ships it). The | ||
| # workflow builds from the TAGGED COMMIT, wherever it lives — a follow-up | ||
| # commit does NOT fix the binary about to be built from THIS tag, only the | ||
| # *next* beta will read the corrected entry, so this is not a "fix forward | ||
| # later" gate like the others below. | ||
| # Every prior beta (beta.1, beta.3, beta.4, ...) has its own | ||
| # "## [X.Y.Z-beta.N] - YYYY-MM-DD" section — match that format and voice. | ||
| LAST_BETA_TAG=$(git tag --list 'v*-beta.*' --sort=-version:refname | head -1) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Two ways this line resolves the wrong tag — and both reproduce beta.5's failure shape one layer up. 1. It reads only local tags. There is no The Fix: 2. It ignores branch ancestry. Fix: Both are worth folding into #1282's |
||
| test -n "$LAST_BETA_TAG" || { echo "No previous beta tag found — STOP"; exit 1; } | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nit — If this block is pasted into an interactive shell rather than run as a script, |
||
| git log "${LAST_BETA_TAG}..HEAD" --oneline # the commits this beta actually adds | ||
| # Read the actual PR for each one (gh pr view <PR#>) — do not write the entry | ||
| # from commit subjects alone, they're too terse to be useful changelog copy. | ||
| # Then add the section to CHANGELOG.md and commit it. | ||
| # | ||
| # The invariant is "in the tagged commit", not "on main" — Step 4 explicitly | ||
| # supports tagging from a branch, and the workflow builds whatever ref you | ||
| # tag regardless of main. main's branch protection is a separate, situational | ||
| # fact: if you can't push directly there (the usual case) and you're tagging | ||
| # main's own tip, this commit needs a normal PR merged first, or the tag you | ||
| # push next is missing it. A branch-beta tagged straight off its own branch | ||
| # has no such dependency — commit it there and tag. | ||
|
|
||
| # 1. FULL monorepo typecheck (what the release workflow runs — clean install to match CI) | ||
| rm -rf node_modules && bun install --frozen-lockfile | ||
| bun turbo typecheck --force # all packages, not just changed ones | ||
|
|
@@ -184,6 +209,16 @@ Only after the beta has soaked and the round-trip is proven: | |
|
|
||
| - The tag MUST contain `-beta.N`. A plain `vX.Y.Z` from this skill would hit | ||
| `latest` — never do that here. | ||
| - **The CHANGELOG entry (Step 3, gate 0) must be committed into the commit you | ||
| tag, before the tag exists** — not "on main," specifically: the workflow | ||
| builds from the tagged ref, and Step 4 explicitly supports tagging a branch | ||
| that isn't main. Whether that commit needs a PR first is a separate, | ||
| situational fact about whether *you personally* can push directly to | ||
| whatever ref you're tagging (usually blocked for main, not for your own | ||
| branch). Discovered the hard way on beta.5: tagging first and adding the | ||
| entry afterward ships a binary with a stale embedded changelog, and there is | ||
| no way to fix that specific binary short of a new tag. This is not a "fix | ||
| forward" gate like the others. | ||
| - Never skip Step 6 (the `latest`-didn't-move assertion). It is the one check | ||
| that catches a channel-routing regression before it bricks everyone. | ||
| - npm publishes are effectively irreversible — get the explicit user yes at | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file. | |
| The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), | ||
| and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). | ||
|
|
||
| ## [0.11.0-beta.5] - 2026-09-09 | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Minor — this section and the shipped beta.5 binary now disagree, with nothing saying so. By the PR description's own admission, the built One line inside this section noting the entry landed after the tag — and that the embedded changelog in the beta.5 binary therefore stops at beta.4 — closes it permanently. The PR description says it, but that is the wrong durability: descriptions are not what people read six months from now. |
||
|
|
||
| > **Beta channel release.** Publishes to the npm `beta` dist-tag; `latest` (0.10.0) is unaffected. Install: `npm i -g @altimateai/altimate-code@beta`. | ||
|
|
||
| ### Added | ||
|
|
||
| - **Altimate Base registration over HTTP, for non-TUI hosts.** Previously only the interactive TUI could ever mint a Base credential — a host that talks HTTP to `altimate serve` (e.g. the VS Code extension) saw Altimate Base in `GET /provider`'s `all` list but could never connect it, failing with `model altimate-base not found`. Two new routes: `GET /altimate/base/disclosure` (read-only consent text plus a hash the client echoes back) and `POST /altimate/base/register` (verifies the echoed hash, then registers). Gated per-process — the TUI worker still owns registration when it's the one serving HTTP, and any other host gets `501`. (#1266) | ||
|
|
||
| ### Changed | ||
|
|
||
| - **Altimate Base consent gate copy softened.** Dropped "Logs are linked to a persistent per-installation identifier" from the dialog (still disclosed in docs); "Usage is rate limited" → "Usage can be rate limited." (#1268) | ||
|
|
||
| ### Fixed | ||
|
|
||
| - **Datamate stdio MCP server now inherits the IDE entry's env** when wired from an IDE integration. (#1081) | ||
|
|
||
| ## [0.11.0-beta.4] - 2026-09-08 | ||
|
|
||
| > **Beta channel release.** Publishes to the npm `beta` dist-tag; `latest` (0.10.0) is unaffected. Install: `npm i -g @altimateai/altimate-code@beta`. | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🔎 Supported by static analysis
🏁 Script executed:
Repository: AltimateAI/altimate-code
Length of output: 208
🤖 get_repo_knowledge executed:
get_repo_knowledge AltimateAI/altimate-code /tmp/coderabbit-repo-knowledge/altimateai-altimate-code-32b04b74/architecture /tmp/coderabbit-repo-knowledge/altimateai-altimate-code-32b04b74/learningsLength of output: 47235
🏁 Script executed:
Repository: AltimateAI/altimate-code
Length of output: 8191
Select the previous beta from
HEADhistory.git tag --listconsiders beta tags from all local branches. A higher beta tag on another branch can becomeLAST_BETA_TAG. The followinggit logcan then use the wrong range and produce incorrect changelog content. Step 4 tagsHEAD, so filter tags reachable fromHEAD.Proposed fix
📝 Committable suggestion
🤖 Prompt for AI Agents