Skip to content

Commit 8b8553e

Browse files
committed
docs: bound post-publication replay
1 parent c4b930d commit 8b8553e

2 files changed

Lines changed: 38 additions & 23 deletions

File tree

AGENTS.md

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -288,15 +288,21 @@ repository root.
288288
artifact or live-evidence reuse, an arbitrary rerun, or a different patch
289289
version.
290290
- If `npm publish` succeeds but post-publication verification fails, first read
291-
the exact public version, dist-tags, integrity, attestation URL, signature,
292-
and provenance. A transient attestation-endpoint `404` is a registry
293-
convergence condition and the workflow must retry it with a finite bound. If
294-
exact integrity matches, only `rerun failed jobs` on the same immutable-tag
295-
run may resume verification. Confirm that GitHub preserves the successful
296-
exact-artifact and live-smoke jobs, so the three-request smoke is not repeated;
297-
stop if the replay expands that job set. The replay must remain fail-closed,
298-
requires a fresh Environment approval, and must not publish again. Stop on any
299-
identity, integrity, provenance, dist-tag, or configuration mismatch.
291+
the exact public version, `latest`, `next`, integrity, attestation URL,
292+
signature, and provenance. The pre-publish state allows the exact version to
293+
be absent or equal to the candidate and `latest` to be the previous or
294+
candidate patch; final state requires both exact and `latest` to equal the
295+
candidate. `next` must always remain `0.1.0-alpha.3`. A transient attestation-
296+
endpoint `404` is a registry convergence condition handled by the workflow's
297+
single finite wait; exhaustion is terminal and must not be extended by reruns.
298+
After the endpoint converges and independent signature and provenance checks
299+
pass, at most one `rerun failed jobs` on the same immutable-tag run may resume
300+
another failed post-publication gate. Confirm that GitHub preserves the
301+
successful exact-artifact and live-smoke jobs, so the three-request smoke is
302+
not repeated; stop if the replay expands that job set. The replay requires a
303+
fresh Environment approval and must not publish again. An exact-version
304+
metadata `E404`, second replay request, non-convergence, or any identity,
305+
integrity, provenance, dist-tag, or configuration mismatch is a hard stop.
300306
- After registry verification, immediately restore
301307
`RELEASE_PLEASE_ENABLED=false`, keep `LIVE_SMOKE_ENABLED=true`, and require the
302308
npm Environment deployment-policy set to contain only `tag:v*`.

RELEASING.md

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -584,23 +584,32 @@ policy set is exactly `tag:v*`. After registry verification, immediately restore
584584
`RELEASE_PLEASE_ENABLED=false` and keep `LIVE_SMOKE_ENABLED=true`.
585585
586586
Never substitute a manually authored release PR, manual or auxiliary tag,
587-
branch-context publication, temporary `main` Environment policy, reused artifact
588-
or live evidence, arbitrary rerun, or different patch version. An ambiguous npm
589-
result requires exact registry integrity, signature, and provenance inspection;
590-
it never authorizes an automatic retry.
587+
branch-context publication, temporary `main` Environment policy, cross-run
588+
artifact or live-evidence reuse, arbitrary rerun, or different patch version. An
589+
ambiguous npm result requires exact registry integrity, signature, and
590+
provenance inspection; it never authorizes an automatic retry.
591591
592592
If the exact publish step succeeded but a later registry verification step
593593
failed, query the immutable version and both dist-tags before taking any action.
594-
When the public integrity matches the verified artifact and the tag, Release,
595-
workflow, provenance, and protected configuration remain exact, rerun only the
596-
failed jobs of that same tag-bound run. Confirm before approval that GitHub kept
597-
the successful exact-artifact and live-smoke jobs instead of scheduling them
598-
again; never use rerun-all for this recovery. The protected preflight must record
599-
that the exact version exists, and the idempotent publication script must report
600-
matching integrity and skip `npm publish`. A later `E404` is a hard stop rather
601-
than permission to republish. The failed publish job still requires a fresh npm
602-
Environment approval. Stop instead of replaying on any mismatch. After
603-
successful verification, restore `RELEASE_PLEASE_ENABLED=false` immediately.
594+
At pre-publish, the exact version may be absent or equal the candidate and
595+
`latest` may equal the previous or candidate patch; `next` must equal
596+
`0.1.0-alpha.3`. Final verification requires the exact version and `latest` to
597+
equal the candidate while `next` remains unchanged.
598+
599+
An attestation-endpoint `404` may be the sole unresolved item while npm
600+
converges. Let the workflow's bounded ten-minute fetch finish; if it exhausts,
601+
stop and report rather than rerunning to extend the wait. Only after that endpoint
602+
is readable and independent signature and provenance checks pass may one failed
603+
post-publication gate use exactly one `rerun failed jobs` on the same tag-bound
604+
run. Confirm before approval that GitHub kept the successful exact-artifact and
605+
live-smoke jobs instead of scheduling them again; never use rerun-all for this
606+
recovery. The protected preflight must record that the exact version exists, and
607+
the idempotent publication script must report matching integrity and skip
608+
`npm publish`. An exact-version metadata `E404` after that preflight is a hard
609+
stop rather than permission to republish. The failed publish job still requires
610+
a fresh npm Environment approval. Stop on a second replay request or any
611+
mismatch. After successful verification, restore
612+
`RELEASE_PLEASE_ENABLED=false` immediately.
604613

605614
The `0.1.1` repair used the immutable `0.1.0` commit as a one-cycle
606615
`last-release-sha` only for its initial preparation, then removed the anchor.

0 commit comments

Comments
 (0)