Block Runner publishes to npm from CI with provenance via Trusted Publishing
(OIDC) — there is no long-lived npm token in this repo. The publish runs on
.github/workflows/release.yml when a GitHub Release is published.
- Create the package owner / org on npmjs.com that will own
block-runner. - Enable 2FA on that npm account (Account → Two-Factor Authentication). Publishing requires it, and it's a visible trust signal.
- Configure Trusted Publishing for the package:
Package settings → Trusted Publisher → add a GitHub Actions publisher with
- Repository:
humanmade/block-runner - Workflow filename:
release.ymlThis lets the workflow authenticate via OIDC with no token.
For the very first publish, the package must exist. Either publish
0.1.0once manually (npm publish --provenance --access publicfrom a 2FA'd local login), then wire trusted publishing for all subsequent releases — or create the package placeholder and configure trusted publishing before the first CI publish. - Repository:
The 1.x line establishes the public CLI and library compatibility baseline described below.
Check npm view block-runner dist-tags for published versions. Before creating a release, run the
deterministic release candidate gates from the candidate checkout on Node 24.22.1+ or 26.12.1+:
npm run release:check -- --manual-review proof/reviews/1.0.0/agent-review.json --receipt dev/release/0.9-testing/receipts/<version>.jsonThe 13-fixture registered-block authoring benchmark is optional and does not participate in the deterministic release status. Run it separately only when reviewed candidate plans and a WordPress/browser worker are available:
npm run authoring:prove -- --plans /absolute/path/to/saved-plansThe release checker never creates plans or calls a model. Its receipt records the optional benchmark as pending/unscored unless that separate work is supplied.
Keep the resulting receipt with the release. It records the authoring suite/scorer/prompt/guide,
template, dependency, WordPress, theme, and browser hashes; the workload, model/effort, invalid
counts, and timing method; and the package, skill, and activation matrix. A browser or visual gate
without a receipt is blocked, not passed. The optional authoring benchmark is recorded as
pending/unscored unless its separate plans and worker run is retained. The detailed matrix and
product-preview state live in
dev/release/0.9-testing.
- Bump the version:
npm version patch|minor|major(commits + tags). - Push the tag:
git push --follow-tags. - Draft a GitHub Release for that tag and Publish it.
- The Release workflow runs the complete release candidate check then publishes with
npm publish --provenance --access public --tag latest. - Confirm afterward:
npm view block-runner@latest versionshows the new release version, andnpm audit signaturespasses (provenance attestation present).
Starting with 1.0.0, backward-incompatible changes to public CLI flags and library exports require a major release. Minor releases add compatible functionality; patch releases contain compatible fixes. Document behaviour changes and migration requirements in the changelog.
The 1.0 release follows owner acceptance of a real-project rendered result and the required deterministic release checks. Valid block markup, rendered fidelity and native editing remain separate proof layers; the version does not promise fidelity for arbitrary input or remove warnings and verification gaps. Optional model benchmarks remain separately authorised and unscored when not run.
Historical 0.x releases used the pre-1.0 policy and could include breaking changes in any release. Existing release-evidence paths retain their original names.