Skip to content

ci(publish): fail loudly if packages don't actually land on the registry#83

Merged
telivity-otaip merged 1 commit into
mainfrom
ci/publish-verify
Apr 18, 2026
Merged

ci(publish): fail loudly if packages don't actually land on the registry#83
telivity-otaip merged 1 commit into
mainfrom
ci/publish-verify

Conversation

@telivity-otaip
Copy link
Copy Markdown
Collaborator

Summary

Follow-up to the first npm publish (PR #82). All 15 `@otaip/*` packages did publish successfully, but several returned 404 on the registry for ~5 minutes after pnpm reported success. If the publish had genuinely failed (wrong scope, expired token, org membership miss, etc) the job would still have exited 0 — we'd only notice when consumers hit 404s.

Add a verification step to `publish.yml`:

  • polls `https://registry.npmjs.org/` for each of the 15 `@otaip/*` packages
  • expects `dist-tags.latest` to equal the just-released root version
  • retries up to 6× with a 10s delay (total budget ~60s per package — typical propagation is well under that)
  • fails the job with a clear summary if any package isn't live

Workflow-only. No code changes.

Test plan

  • YAML parses (verified via `yq`)
  • Next release run exercises the new step end-to-end

🤖 Generated with Claude Code

pnpm -r publish printed success for all 15 @otaip/* packages on the
first run, but several returned 404 on the registry for ~5 minutes
afterward. If the publish had genuinely failed (wrong scope, expired
token, org-membership miss), the job would still have exited 0 and
we'd only notice when consumers hit 404s.

Add a verification step that polls the registry for each of the 15
@otaip/* packages after publish, expects the just-released version
as dist-tags.latest, retries for up to a minute per package, and
fails the job if any package isn't live.

No code changes. Workflow-only.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@telivity-otaip telivity-otaip merged commit c767e4c into main Apr 18, 2026
1 check passed
@telivity-otaip telivity-otaip deleted the ci/publish-verify branch April 18, 2026 23:32
telivity-otaip pushed a commit that referenced this pull request Apr 18, 2026
Eleven PRs (#73#83) merged since 0.6.2:
- Codex review closeout (12 findings, all severities)
- First npm publish of the @otaip/* scope
- HTTP hardening (fetchWithRetry, https defaults)
- EU 261 + US DOT IDB regulation modules in @otaip/core
- Per-transaction GDS/NDC routing
- ATPCO-rule-driven change/refund penalties (no invented defaults)
- CLI agent registry auto-discovery
- Bootstrap docs + single-source agent count
- CI/publish workflow hardening (fail on test failures, verify packages live)

Root + 15 workspace packages bumped 0.6.2 → 0.6.3.
See CHANGELOG.md 0.6.3 entry for full detail and potentially-breaking notes.

Verification: 3,092 tests pass, all 16 packages build, dry-run publish
emits 15 tarballs at 0.6.3.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
telivity-otaip pushed a commit that referenced this pull request Apr 19, 2026
…ository.url

Two small post-mortem fixes from the v0.6.4 hotelbeds publish.

1. publish.yml verify step
The "Verify packages are live on npm" step previously hardcoded a list
of 15 package names. v0.6.4 added @otaip/adapter-hotelbeds, the
hardcoded list wasn't updated, pnpm's "+ pkg@version" output looked
successful, and the registry CDN's read-side propagation lag masked
the gap from the operator. Net result: the step claimed success while
hotelbeds was actually missing from the registry for several minutes.

Replaced with workspace discovery: any non-private @otaip/* package
gets verified. Any future new package is picked up automatically. If
discovery returns an empty list, the step fails loudly rather than
silently — same intent as the original "fail loudly" comment that
PR #83 introduced.

Local repro confirms the snippet returns the expected 16 packages
(15 prior + new hotelbeds).

2. repository.url canonical form
npm has been auto-correcting "https://..." → "git+https://..." on
every publish since the original 0.6.0 cut, emitting a warning each
time. Fixed across all 17 published package.json files (root + 16
@otaip/* packages). Same change npm has been silently applying — no
behavior change downstream.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant