docs(releasing): record that provenance is per-package npm config - #102
Merged
Merged
Conversation
Audited 2026-09-10 after noticing only 1 of 9 published packages had ever
produced a provenance attestation -- 71 versions, 7 attested, all of them
ultimatedarktowerboard.
Nothing in the repo explains it. repository fields, publishConfig, prepack
hooks and NPM_CONFIG_PROVENANCE are identical across all nine, and the release
log shows no provenance error, warning or skip. The cause is npm-side: Trusted
Publisher is a PER-PACKAGE setting naming an exact repo + workflow file. When
the OIDC claim (workflow_ref: .github/workflows/release.yml) does not match the
package's entry, or no entry exists, npm cannot mint the attestation and
silently falls back to the NPM_TOKEN auth the workflow also supplies.
Checking all nine found two distinct faults, and the second was the common one:
- No entry at all -- six packages (game-data, relay-{client,core,shared},
mcp-server, relay-cli). Never configured.
- Stale entry -- two packages. ultimatedarktower named publish.yml, deleted
2026-07-11; ultimatedarktowerdisplay named ChessMess/UltimateDarkTowerDisplay,
the archived pre-consolidation repo.
board was the only correct one, configured 2026-07-12 -- the day after the
workflow rename -- which is why it alone produced provenance.
The new section records the diagnosis path (registry, not repo: count attested
versions, then decode a working attestation to see which workflow produced it),
the exact field values that work, and two traps found while fixing it: entries
are immutable so a wrong one must be deleted and re-created, and Environment
must be left blank because release.yml declares no environment key -- filling it
in breaks the claim match silently. Also notes npm permits multiple entries per
package, so a correct one can be added alongside a stale one without deleting
anything, which matters because every write costs a 2FA security-key tap.
Closes the loop on the replication-lag section added in #101: that one was about
misreading a good publish as failed, this one is about a publish that really is
missing something and never says so.
Claude-Session: https://claude.ai/code/session_01Br4DeujSD86Rj6uxYuTC2r
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Documentation only. Audited after noticing only 1 of 9 published packages had ever produced a provenance attestation — 71 versions, 7 attested, all of them
ultimatedarktowerboard.Nothing in the repo explains it
repositoryfields,publishConfig,prepackhooks andNPM_CONFIG_PROVENANCEare identical across all nine, and the release log shows no provenance error, warning or skip.The cause is npm-side: Trusted Publisher is a per-package setting naming an exact repo + workflow file. When the OIDC claim (
workflow_ref: .github/workflows/release.yml) doesn't match the package's entry — or no entry exists — npm can't mint the attestation and silently falls back to theNPM_TOKENauth the workflow also supplies.Two distinct faults, and the second was the common one
ultimatedarktower→publish.yml(deleted 2026-07-11);ultimatedarktowerdisplay→ChessMess/UltimateDarkTowerDisplay, the archived pre-consolidation repoboardwas the only correct one, configured 2026-07-12 — the day after the workflow rename — which is why it alone produced provenance.What the section adds
curl | jqone-liners included)release.ymldeclares noenvironment:key — filling it in breaks the claim match silentlyAll nine packages have since been configured and verified; the next release of each will carry provenance.
Closes the loop on the replication-lag section from #101: that one was about misreading a good publish as failed. This one is about a publish that really is missing something and never says so.
Authored via the GitHub API — local
~/Documents/is currently unreadable to this session due to a macOS TCC permission, so the file was fetched, edited and committed remotely. Formatted with the repo's pinnedprettier@3.9.6and its.prettierrc.https://claude.ai/code/session_01Br4DeujSD86Rj6uxYuTC2r