Skip to main content

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.

PartMeaningExample bump
XMajor update: only when Preck says so0.4.2 → 1.0.0
YMinor update: new features or content0.4.2 → 0.5.0
ZHotfix: bug fixes and small corrections0.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 develop bumps 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 major without --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 ones vX.YY.ZZZ). Release notes come from CHANGELOG.md.
  • Merging to main (production) still needs Preck's explicit go-ahead. A release is published from develop and doesn't change main.

How to release an update​

  1. While working, add notes under ## Unreleased in CHANGELOG.md.
  2. Bump:
    python3 scripts/version.py bump hotfix # or: minor
    This moves the notes into a dated section, updates VERSION, and syncs package.json where there is one, with the same X.Y.Z. It refuses a version that is already tagged.
  3. Commit (Release X.Y.Z: ... plus the usual bullet body — see Getting started › Commit messages) and push develop.
  4. Publish:
    python3 scripts/version.py release # server: release --wait
    This tags the pushed commit, pushes the tag and, for a minor or major version, creates the GitHub release with 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.