The release is a gate too.
Publishing runward to npm is a deliberate human gesture: creating the release. Everything downstream is deterministic machinery — no token to steal, no manual step, and verifiable by anyone. The publishing chain applies the gate's own principle to its own supply chain: the deterministic executes, the human decides the crossing.
The same principle, applied to itself
runward's gate fits in one sentence: the deterministic executes, the human decides the crossing. runward check --strict calls no model and returns the same verdict on the same input; crossing the gate stays the operator's decision. The publishing chain follows the exact same design. Pushing code to main triggers tests, never a publish. What publishes to npm is a deliberate human gesture — creating the GitHub Release. Once that gesture is made, nobody touches anything.
What runs next, with no intervention
After the gesture, the machinery runs alone, and every link is chosen to be verifiable:
- OIDC Trusted Publishing — npm trusts the repository's exact workflow, not a token. There is no
NPM_TOKEN, no long-lived secret to steal or rotate. - SLSA provenance — every published version carries a signed attestation binding it to the commit and workflow that produced it.
- An attested CycloneDX SBOM — the dependency inventory is generated in a separate, read-only job, then attested against the exact tarball that ships to npm. A compromised third-party action cannot reach the publishing scope.
- Actions pinned by SHA — every brick in the chain is frozen to a precise commit, not a movable tag.
v0.21.0, published today, went through this exact chain: one click, then machines.
Verifiable, not declared
None of this is a security promise: it is a design stance, and it checks out without taking our word for it. npm audit signatures verifies provenance from your terminal; the release workflow is public in the repository; the attestation and the SBOM are attached to every release. A system that asked for blind trust would contradict everything runward stands for. This one lets itself be audited — that is the point.
The full detail, including what a vendor review can demand and what does not apply to a local tool with no data flow, is in adopting runward in a regulated organization.
Install: npx runward init --example
Release v0.21.0 on GitHub · The documentation · CHANGELOG
← All news