Repository navigation
Commit a677381
docs(release): the npm token TYPE is the trap, and OIDC now has a deadline
Records what stalled the 0.24.0 cut for an hour, in both places a release reads.
THE TOKEN TYPE IS THE WHOLE GAME, AND A WRONG ONE LOOKS RIGHT. A classic "Publish"
token passes every cheap check — `npm whoami` returns the username, `npm access list
packages` reports read-write, `bun publish --dry-run` succeeds — and then EOTPs on
every real write. `bun publish` defaults to `--auth-type=web`, so it falls back to an
interactive browser flow that cannot complete in CI or a non-interactive shell, and
`--otp=` is silently ignored (it prompts `Enter OTP:` regardless, so a code has to be
piped on stdin). If the account's 2FA is a security key rather than TOTP there is no
6-digit code to give at all. The fix is Classic -> Automation, and the doc now says to
verify with a reversible WRITE rather than a read.
WITH THE CAVEAT THAT THE PROBE IS ONLY HALF-REVERSIBLE. Since 2026-07-31 a bypass-2FA
token may still publish but may not change package access — including deleting a
dist-tag. `npm dist-tag add` succeeds and `npm dist-tag rm` returns 403, which also
means Phase 9's stale-`next` cleanup now needs an interactive-2FA session. Learned by
leaving a stray tag behind doing exactly this probe.
OIDC IS NO LONGER A "FUTURE IMPROVEMENT". npm removes direct publishing from
2FA-bypass tokens around January 2027. The skill filed Trusted Publishing under
research-backed-not-yet-adopted; it is a dated requirement, `publish-npm.yml` already
exists, and `publish-csharp.yml` already does exactly this for NuGet. Changesets stays
in the optional bucket, which is where it belongs.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhpswkF1NvwxhFWMmdAT151 parent 5df51c4 commit a677381
2 files changed
Lines changed: 59 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
195 | 195 | | |
196 | 196 | | |
197 | 197 | | |
198 | | - | |
199 | | - | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
204 | | - | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
290 | 290 | | |
291 | 291 | | |
292 | 292 | | |
293 | | - | |
294 | | - | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
295 | 327 | | |
296 | 328 | | |
297 | 329 | | |
| |||
0 commit comments