Skip to content

Commit 9a5d71c

Browse files
Paul Mulliganclaude
andcommitted
docs: document theme-based milestones and release-please versioning
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 41492fc commit 9a5d71c

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

CONTRIBUTING.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,30 @@ Branch names should be lowercase, use hyphens as separators, and be descriptive.
164164

165165
---
166166

167+
## Versioning, Releases, and Milestones
168+
169+
Releases are fully automated with [release-please](https://github.com/googleapis/release-please):
170+
merging to `main` accumulates conventional commits into a release PR, and
171+
merging that PR cuts the tag, GitHub Release, and `CHANGELOG.md` entry.
172+
`feat:` bumps the minor version, `fix:` the patch, and a `!`/`BREAKING CHANGE`
173+
commit the major. Version numbers are therefore **outputs of the commit
174+
history, not plans**.
175+
176+
Two conventions follow from that:
177+
178+
- **Milestones are themes, not version numbers.** Issues are grouped into
179+
thematic milestones (e.g. *Developer Experience & Distribution*,
180+
*Conversation Intelligence*, *Quality & Hardening*) with due dates. Don't
181+
create milestones named after unreleased minor versions — release-please
182+
will assign whatever number the commits dictate, and the milestone name
183+
will drift. The one exception is a deliberately gated **major** (e.g.
184+
*v2.0 - Multi-Channel & Enterprise*): breaking changes are a real product
185+
boundary because the CDN `@1` channel never auto-serves a new major.
186+
- **Issues associate with releases through commits, not milestones.** Put
187+
`Closes #N` in the PR description and reference the issue in commit bodies
188+
where useful; the changelog and GitHub Release then record which version
189+
actually shipped the work.
190+
167191
## Project Structure
168192

169193
```

0 commit comments

Comments
 (0)