@@ -108,9 +108,10 @@ tag and GitHub release agreement.
108108The publish workflow is the sole source of npm dist-tag selection: prereleases
109109use ` next ` , stable versions use ` latest ` . The package manifest must not carry a
110110static dist-tag because that would make stable and prerelease policy diverge.
111- Trusted Publishing remains the default authentication path. The only token
112- path is an explicitly enabled protected-environment fallback that rejects every
113- version except ` 0.1.0-alpha.1 ` and every dist-tag except ` next ` .
111+ Trusted Publishing is the only executable authentication path. The protected-
112+ environment token bootstrap used for ` 0.1.0-alpha.1 ` is historical evidence;
113+ current workflows contain no token publication path and reject registry-token
114+ credentials.
114115
115116For normal stable patches, Release Please owns the reviewed version/changelog
116117PR and the immutable tag and GitHub Release. The configuration uses an explicit
@@ -119,20 +120,23 @@ maintenance window cannot enter 0.2 implicitly and a root package does not fall
119120into the single-package tag-discovery ambiguity encountered during 0.1.0. The
120121workflow also rejects commit-level ` Release-As: ` notes before mutation because
121122Release Please applies those overrides before its patch versioning strategy.
122- Because a
123- GitHub Release created with the default ` GITHUB_TOKEN ` does not start a separate
124- ` release.published ` workflow, publication is chained from the successful
125- Release Please workflow. The handoff accepts only the canonical repository's
126- successful attempt-qualified ` push ` run for ` main ` at the still-current exact
127- ` main ` SHA. The release workflow records normalized action outcome, recovery
128- state, pre-action Release presence, the exact Release-producing attempt, SHA,
129- tag, version, URL, repository, workflow identity, run ID, and attempt in a
130- schema-v2 exact-run artifact. Publication
131- downloads and validates only that attempt's artifact before checking the tag and
132- immutable Release. A first-attempt manual run is explicitly release-inert and
133- must succeed only after independently validating one canonical action-created
134- patch PR; its event cannot enter publication. Any successful ` push ` run without
135- the exact result artifact, tag, and immutable Release fails before live or
123+ Because a GitHub Release created with the default ` GITHUB_TOKEN ` does not start
124+ a separate ` release.published ` workflow, publication is chained from the
125+ successful Release Please workflow. The handoff accepts only the canonical
126+ repository's successful attempt-qualified ` push ` run for ` main ` at the
127+ still-current exact ` main ` SHA. The release workflow records normalized action
128+ outcome, same-run Release reconciliation state, pre-action Release presence,
129+ the exact Release-producing attempt, SHA, tag, version, URL, repository,
130+ workflow identity, run ID, and attempt in a schema-v2 exact-run artifact. An
131+ unprivileged ` workflow_run ` handoff validates only that attempt's artifact,
132+ exact tag, immutable Release, and current ` main ` , then dispatches ` publish.yml `
133+ with ` ref=v<version> ` . Only that tag-bound ` workflow_dispatch ` can reach fresh
134+ artifact verification, bounded live smoke, the npm Environment, or OIDC. A
135+ first-attempt manual run is explicitly release-inert and must succeed only after
136+ independently validating one canonical action-created patch PR; its event cannot
137+ enter publication. A successful ` push ` preparation run whose result-upload step
138+ was skipped is also release-inert. Any purported release handoff with missing or
139+ mismatched result, tag, or immutable Release evidence fails before live or
136140registry access. The release outcome and package artifact are verified
137141independently.
138142
@@ -143,17 +147,19 @@ fail-closed on exact tag, artifact, dist-tag, integrity, and provenance state.
143147Manual preparation rejects attempt 2 or later; restart uses a new dispatch with
144148Release creation disabled. A ` push ` rerun is bounded to the same run ID, SHA,
145149candidate, and final-head review. It may retry while the tag and Release remain
146- absent. If an earlier attempt already created the Release, recovery accepts only
147- the exact bot-authored immutable Release at that SHA whose publication time
148- falls inside exactly one earlier Release Please step from the same run.
150+ absent. If an earlier attempt already created the Release, same-run
151+ reconciliation accepts only the exact bot-authored immutable Release at that
152+ SHA whose publication time falls inside exactly one earlier Release Please step
153+ from that run.
149154Release-mode action failure is tolerated only long enough to
150155prove that postcondition, reconcile the release PR to ` autorelease: tagged ` , and
151156write the attempt-qualified artifact. The authorized Actions setting lets the
152157default token create the PR; the resulting approval-required CI still needs a
153158human with write access to authorize execution, and bot review cannot satisfy
154- the release gate. A merged
155- release PR is accepted for tagging only after a distinct repository
156- administrator approved its final head. The workflow checks the triggering SHA,
159+ the release gate. A head change invalidates both a prior ` COMMENTED ` owner audit
160+ and a formal approval. A merged release PR is accepted for tagging only after a
161+ distinct human repository administrator formally approved its exact final
162+ head. The workflow checks the triggering SHA,
157163release-branch snapshot, all open and closed PR identities, current review, and
158164tag/Release state immediately before Release Please mutation, then rechecks
159165` main ` , the release branch, the complete PR snapshot, exact final-head approval,
@@ -164,6 +170,17 @@ additional PR cannot be tagged. Manual dispatch is therefore release-inert: it
164170may prepare one canonical action-created PR only when no merged release PR is
165171awaiting a tag.
166172
173+ Stable ` 0.1.1 ` used a one-time main-context publication recovery after its
174+ immutable tag predated the permanent tag-bound workflow. It reused only the
175+ previously verified exact artifact and bounded live evidence, so npm provenance
176+ names the reviewed recovery control commit on ` refs/heads/main ` rather than the
177+ tag. [ PR #41 ] ( https://github.com/cometapi-dev/cometapi-node/pull/41 ) removed
178+ every fixed recovery identifier, prior-evidence reuse branch, and temporary
179+ ` main ` deployment-policy path. The permanent npm Environment policy set is
180+ exactly ` tag:v* ` ; branch-context publication is not part of the architecture.
181+ The exception is historical evidence and must never be reconstructed. See
182+ [ Stable 0.1.1 release evidence] ( ./RELEASING.md#stable-011-release-evidence ) .
183+
167184## Testing layers
168185
169186Evidence is separated by layer:
0 commit comments