Skip to content

docs: record how VCell actually versions, and tag the verified commit - #2017

Merged
jcschaff merged 2 commits into
masterfrom
docs/versioning-convention
Aug 21, 2026
Merged

docs: record how VCell actually versions, and tag the verified commit#2017
jcschaff merged 2 commits into
masterfrom
docs/versioning-convention

Conversation

@jcschaff

Copy link
Copy Markdown
Member

1. Versioning

docs/RELEASING.md described MINOR as "significant new feature" and MAJOR as "breaking change or public release event". That reads like semantic versioning, and it isn't how this project versions — it invites a deliberation at every release cut that has one answer.

How VCell actually versions:

PATCH every ordinary release — the default, and nearly all of them
MINOR a public release event: a version announced to users, with its own release-notes/major/ narrative and vcell.org entry
MAJOR a very large new capability; rare

So "cut a release" means a PATCH bump. A release is not held back from PATCH because it contains a feature, and does not earn a MINOR by containing one. MINOR is a decision about announcing, not about the size of the diff.

A user-facing breaking change is called out in the release's Highlights. paragraph rather than forcing a bump.

I got this wrong on #2015, where I reasoned about "why PATCH rather than MINOR" — the answer was never in doubt, the doc just implied it was.

2. --target master could tag an unverified commit

release-and-deploy.sh pins MASTER_SHA at the start and runs regression against it, then did:

gh release create "$VERSION" --repo "$REPO" --target master

The regression gate takes several minutes. Anything merged in that window would be tagged and shipped without having been through regression — and the log would still show the pinned SHA as the verified one, so it would not look wrong.

Now --target "$MASTER_SHA".

Found concretely: this PR was written during the 8.1.1.01 cut and I held the merge until the tag existed, specifically because of this. The tag landed on ad59f32ad4 as intended.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FUd61NUJgz88h4PZs5MqHn

jcschaff and others added 2 commits August 21, 2026 13:43
The table described MINOR as "significant new feature" and MAJOR as a
breaking change or public release event, which reads like semantic
versioning. It is not how this project versions, and it invites a
deliberation at every release cut that has one answer.

Almost every VCell release is a PATCH, whatever it contains. MINOR marks a
public release event -- a version announced to users, with its own
narrative and vcell.org entry -- which is a decision about announcing
rather than about the size of the change. MAJOR is for a very large new
capability and is rare.

A user-facing breaking change is called out in the release's Highlights
paragraph; it does not by itself force a bump.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FUd61NUJgz88h4PZs5MqHn
…s now

The script pins MASTER_SHA at the start and runs regression against it,
then created the release with --target master. Anything merged in between
-- the gate takes several minutes -- would be tagged and shipped without
having been through regression, and the log would still show the pinned
SHA as verified.

Noticed while holding a docs merge during the 8.1.1.01 cut, precisely to
avoid this.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FUd61NUJgz88h4PZs5MqHn
@jcschaff
jcschaff merged commit f35bead into master Aug 21, 2026
8 checks passed
@jcschaff
jcschaff deleted the docs/versioning-convention branch August 21, 2026 18:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant