The core repo is the version anchor (it owns the wire protocol and file formats).
SemVer + git tags; the npm version bump is the SINGLE source of truth — the About
panel, the peer handshake and .tpscene/.tpmodule provenance all derive from
package.json through the vite define (__APP_VERSION__ / __COMMIT_SHA__).
First release:
npm version 1.0.0 # bumps package.json, commits, tags v1.0.0
git push origin main --follow-tagsAfter that: npm version minor (features) or npm version patch (fixes), then the
same push. The tag triggers .github/workflows/release.yml, which builds, gates on
the svelte-check baseline (476 errors / 62 warnings — update the numbers in the
workflow when the baseline moves), zips build/, and publishes a GitHub Release
with generated notes.
MAJOR = a breaking file-format or wire-protocol change (SESSION_FORMAT /
MODULE_FORMAT bumps, incompatible peer messages).
- Update
CHANGELOG.md(the in-app What's new window renders it). - Cloud deploys pin the tag: set
CORE_REF=vX.Y.Zin the cloud repo's.env.deployso the deployed site's About shows the tagged core version. - The peers warn (never block) on version mismatches, and
.tpscene/.tpmodulefiles confirm before loading a NEWER format int — older files always load silently. BumpSESSION_FORMAT/MODULE_FORMATonly when the shape actually changes incompatibly.