Skip to content
@deckyard/mp3

Versioning

Two versions, one authored and one generated.

deck.toml

package.version is authored and committed. jvc resolves against the manifest on the default branch - package.urls.deck points at raw.githubusercontent.com/.../main/deck.toml - so a version that only ever existed in a CI workspace would leave jvc resolving a stale number. Bump the manifest, commit, then tag to match; release.yml refuses a tag that disagrees.

src/topics/version.j

Generated by tools/inject-version.sh; never hand-edit it. It defines VERSION.

HEADVERSION
stable tag 0.2.00.2.0
14 commits past 0.2.00.2.0-dev+14.9ebf3dd
no stable tag yet<manifest version>-dev+<commits>.<sha>
no git checkout, or no commitsthe manifest version

A prerelease tag (0.3.0-rc1) never anchors a version, and release.yml rejects it as a release.

The dev form matches what jennifer version prints. Semver precedence ignores build metadata after +, so 0.2.0-dev+14.9ebf3dd orders before 0.2.0.

The interpreter floor

Every .j file opens with # pragma-jennifer-version: >=0.25.0, which the interpreter enforces when it reads the file. tools/check-headers.sh keeps those in step with engines.jennifer in the manifest, and the licence header with package.license.

A dev build of the interpreter bypasses the floor, so tools/deck-lib.sh picks the CI container from the floor (:0.25) instead of dev. A construct from a newer language version then fails CI instead of breaking consumers on 0.25.