The nightly-cli-builds OpenSpec change was archived before its last two task
groups were carried out, so that main could go green again — the
Check for unarchived OpenSpec changes on main step in validate.yml had been
failing on every push since 162afa0, and issue #127 will make a red main
suppress nightly publishing entirely. Archiving cleared that immediately; this
issue carries the work forward so it is not lost.
What was delivered (PRs #116, #119, #122): the release-workflow split, the
nightly pack script and build target, both publish gates, and the x-separated
version stamp. Every requirement in the change's spec delta is implemented — the
gap is verification and one environment move, not missing behavior.
1. Move Vale to npm-autopublish (was task group 5)
The point of doing the nightly first was to prove the npm-autopublish
environment and the OIDC handshake on a package where a mistake is cheap, and
only then move Vale onto that proven path. Moving Vale first would risk breaking
a working release path to enable a convenience.
Blocked on the nightly having actually published through npm-autopublish
at least once (see below). Do not merge this before that.
2. Verify the acceptance criteria on main (was task group 6)
None of these have been observed. The bootstrap nightly on npm
(0.11.0-20260820055459x599d3f3) was published manually, from a commit SHA
that no longer exists after a rebase — it proves the package name is claimed and
nothing else. It does not prove the OIDC path.
3. Confirm the trusted-publisher binding
This one is called out separately because it was previously marked done on the
strength of npm view showing a published version. That is evidence the
manual bootstrap happened, not that a binding exists — the two are
independent, and there is no fallback token path by design. npm exposes no read
API for bindings, so this must be checked in the web UI by a maintainer.
Already confirmed, for the record
npm-autopublish exists with no required reviewers and a deployment branch policy of exactly main, in the explicit custom-policy form rather than the derived protected_branches: true — which matters, because the derived form would silently extend publish rights to any branch that later becomes protected
@taskless/cli-nightly is claimed on npm with dist-tags.latest pointing at the bootstrap version
Related
Issues #127 (nightly must block on Validate) and #128 (record the nightly on
the Version Packages PR) are follow-on work against the same design and are
tracked separately.
Refs #127
Refs #128
The
nightly-cli-buildsOpenSpec change was archived before its last two taskgroups were carried out, so that
maincould go green again — theCheck for unarchived OpenSpec changes on mainstep invalidate.ymlhad beenfailing on every push since
162afa0, and issue #127 will make a redmainsuppress nightly publishing entirely. Archiving cleared that immediately; this
issue carries the work forward so it is not lost.
What was delivered (PRs #116, #119, #122): the release-workflow split, the
nightly pack script and build target, both publish gates, and the
x-separatedversion stamp. Every requirement in the change's spec delta is implemented — the
gap is verification and one environment move, not missing behavior.
1. Move Vale to
npm-autopublish(was task group 5)The point of doing the nightly first was to prove the
npm-autopublishenvironment and the OIDC handshake on a package where a mistake is cheap, and
only then move Vale onto that proven path. Moving Vale first would risk breaking
a working release path to enable a convenience.
publishjob'senvironment:in.github/workflows/release-vale.ymlfromnpm-productiontonpm-autopublish@taskless/vale-*packages still authorize the workflow after the environment change. The binding names the workflow; if npm scopes it to the environment too, re-register before mergingworkflow_dispatchpublish --forcerun that the Vale set publishes with no approval clickBlocked on the nightly having actually published through
npm-autopublishat least once (see below). Do not merge this before that.
2. Verify the acceptance criteria on
main(was task group 6)None of these have been observed. The bootstrap nightly on npm
(
0.11.0-20260820055459x599d3f3) was published manually, from a commit SHAthat no longer exists after a rebase — it proves the package name is claimed and
nothing else. It does not prove the OIDC path.
mainwith pending changesets publishes@taskless/cli-nightly@<proposedBump>-<timestamp>x<sha>with the default tag and provenance — this run is what proves the environment and the handshake@taskless/clistill waits for onerelease-cli-changeset.ymlstill holds the original concurrency group, and no other release workflow has acquired onetaskless --versionreports the nightly version and the CLI runs3. Confirm the trusted-publisher binding
@taskless/cli-nightlyagainstrelease-cli-nightly.ymland thenpm-autopublishenvironmentThis one is called out separately because it was previously marked done on the
strength of
npm viewshowing a published version. That is evidence themanual bootstrap happened, not that a binding exists — the two are
independent, and there is no fallback token path by design. npm exposes no read
API for bindings, so this must be checked in the web UI by a maintainer.
Already confirmed, for the record
npm-autopublishexists with no required reviewers and a deployment branch policy of exactlymain, in the explicit custom-policy form rather than the derivedprotected_branches: true— which matters, because the derived form would silently extend publish rights to any branch that later becomes protected@taskless/cli-nightlyis claimed on npm withdist-tags.latestpointing at the bootstrap versionRelated
Issues #127 (nightly must block on
Validate) and #128 (record the nightly onthe Version Packages PR) are follow-on work against the same design and are
tracked separately.
Refs #127
Refs #128