Alpha Publishing
Jess uses a guided alpha release flow so publishing is predictable, repeatable, and low-stress.
Publish scope
The current alpha publish set is controlled by:
scripts/release/alpha-allowlist.json
The publish set includes the direct parser/plugin closure installed by jess:
Jess, Less, and SCSS parser plugins plus their parser packages. CSS is available
only when a consumer explicitly configures a CSS document plugin; Jess does not
install or route .css entries by default. @jesscss/css-parser remains in the
set because the shipped dialect grammars use its shared CSS grammar. The set
also includes @jesscss/compiler, which owns the shared render pipeline used by
the root jess package and the Less plugin stack. Packages with private runtime
dependencies remain intentionally excluded.
Branch/tag guardrails
alphanpm tag publishes are only allowed from branchalpha.- non-alpha npm tags (future stable releases) are only allowed from branch
main. - These rules are enforced in the publish script, not just in docs.
Cut the release snapshot
An alpha is a release snapshot, not a normal branch integration. After the
exact pushed origin/dev candidate has passed its intended gates, snapshot it onto an
up-to-date alpha worktree, add the owner-reviewed user-facing release notes,
and commit that snapshot. Do not ordinary-merge or rebase dev into alpha.
The full cut procedure is in the repository
docs/process/releasing-alpha.md.
Friendly one-command flow
From repo root:
pnpm run release:alpha:dry-run
If dry-run is healthy and you are on branch alpha:
pnpm run release:alpha
What the orchestrator does
release:alpha runs:
- Branch + working tree safety checks
- Baseline verification and publish-set validation
- Registry-aware lockstep alpha versioning
- Release commit + annotated git tag
- Push branch and tag
- Publish allowlisted packages to npm tag
alpha - npm smoke checks for
@alphainstalls
Before the publish dry-run it also packs the allowlisted release set and installs
those tarballs into an empty npm consumer. That proof imports every package by
both ESM and CommonJS, exercises the packed jess CLI, and verifies the
optional JS-plugin sandbox gate without workspace links. The Less package owns
the separate lessc compatibility command and verifies it through its own
packed-consumer proof. The jess command can use familiar file and stream
ergonomics without becoming a lessc alias.
Manual commands (advanced)
- Preflight gate only:
pnpm run release:alpha:check
- Version only:
pnpm run release:alpha:version
- Publish only:
pnpm run release:alpha:publish
CI backup path
If you want Actions to publish instead of local CLI, run:
- Workflow:
.github/workflows/publish-alpha.yml - Trigger: manual
workflow_dispatchonly
The recommended default remains pnpm run release:alpha from CLI.
Recovery strategy
- If one package fails during publish, fix root cause and rerun
release:alpha:publish. - Avoid unpublish unless absolutely necessary and allowed by npm policy.
- Prefer releasing a new
-alpha.N+1with fixes.