Versioning & releases
Every Shatterveil repository — the server, this site, the Discord bot — tracks
its own version in a VERSION file, in the format X.Y.Z: plain
SemVer without leading zeros. The repos are versioned
independently; a version number always belongs to one repo.
| Part | Meaning | Example bump |
|---|---|---|
| X | Major update: only when Preck says so | 0.4.2 → 1.0.0 |
| Y | Minor update: new features or content | 0.4.2 → 0.5.0 |
| Z | Hotfix: bug fixes and small corrections | 0.4.2 → 0.4.3 |
Counting started at 0.1.0.
:::note Older versions are zero-padded
Until 2026-09-30 versions were written zero-padded as X.YY.ZZZ (0.26.004).
SemVer forbids leading zeros (npm rejects 0.09.008) and the padding capped
minors at 99, so the repos switched to plain SemVer and kept counting:
0.26.004 → 0.26.5. Old tags and changelog headings keep the padded
spelling; scripts/version.py reads both and compares them as numbers, and
git tag --sort=v:refname orders old and new tags correctly.
:::
Rules
- Every update pushed to
developbumps the version, at least a hotfix. Several commits can form one update; bump once, when the update is done. - Major versions are only made when Preck explicitly says so. The script
refuses
bump majorwithout--preck-approved. Otherwise the choice is minor (features, content) or hotfix (fixes). - Every minor or major version is published as a GitHub release on its repo. Hotfixes get a git tag only.
- Tags are
vX.Y.Z(older onesvX.YY.ZZZ). Release notes come fromCHANGELOG.md. - Merging to
main(production) still needs Preck's explicit go-ahead. A release is published fromdevelopand doesn't changemain.
How to release an update
- While working, add notes under
## UnreleasedinCHANGELOG.md. - Bump:
This moves the notes into a dated section, updatespython3 scripts/version.py bump hotfix # or: minor
VERSION, and syncspackage.jsonwhere there is one, with the same X.Y.Z. It refuses a version that is already tagged. - Commit (
Release X.Y.Z: ...plus the usual bullet body — see Getting started › Commit messages) and pushdevelop. - Publish:
This tags the pushed commit, pushes the tag and, for a minor or major version, creates the GitHub release withpython3 scripts/version.py release # server: release --wait
gh.
Other commands: scripts/version.py current, scripts/version.py notes [version],
scripts/version.py latest-tag.
Changelog style
CHANGELOG.md is one file per repo, newest first, with a ## Unreleased
section at the top and one ## X.Y.Z - date (kind) section per version.
Entries are bullets describing what changed in enough detail that someone who
wasn't there can tell what a version contains — the server's changelog, for
example, lists every library and module a stage added.