docs(playbook): document how the sdks release actually publishes - #376
Open
codyborn wants to merge 1 commit into
Open
docs(playbook): document how the sdks release actually publishes#376codyborn wants to merge 1 commit into
codyborn wants to merge 1 commit into
Conversation
codyborn
force-pushed
the
playbook-sdk-release-step
branch
from
August 13, 2026 17:17
8eace14 to
9ddd0ef
Compare
Phase 2 said "Publish a standard @uniswap/uniswapx-sdk release" as a
single bullet, which reads as one merge. The sdks monorepo releases via
changesets (.github/workflows/semantic-release.yaml), and the workflow
picks its mode on every push to main by asking whether any .changeset/*.md
files remain:
- changesets pending -> only creates/updates the "Version Packages" PR
- none pending -> runs `changeset publish`, pushing every package
whose package.json version is not on npm yet
Publishing therefore needs both conditions in the same push: no pending
changesets AND a package.json version npm doesn't have. That admits two
routes, and §3.3 now documents both:
- Bot route: PR carries only a changeset; merging the follow-up "Version
Packages" PR is what publishes. Two merges.
- Self-contained route: PR runs `changeset version` itself, so it carries
the bumps, CHANGELOGs, and changeset deletions. One merge, publishes
directly.
Plus the ways to do half of either and get nothing (or a mess): bumping
package.json while leaving the changeset pending publishes nothing; taking
the self-contained route while a Version Packages PR is open strands it as
conflicted and can regress a package whose version has since moved; and
the self-contained route consumes every pending changeset, so it publishes
other people's packages too and should be titled as the release it is.
Phase 2's exit criterion is now "npm view @uniswap/uniswapx-sdk version
returns the new version", not "the PR merged". The state diagram names the
publishing step. New Correction G covers why this blocks Phase 3 rather
than merely delaying it: getPermit2/getReactor and UniswapXOrderQuoter's
constructor throw MissingConfiguration for an unmapped chain, so wiring a
chain into a service before the SDK publishes turns "unsupported" into
"accepted, then 500s" -- hence never split the chain-enum addition and the
SDK bump across two PRs.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
codyborn
force-pushed
the
playbook-sdk-release-step
branch
from
August 13, 2026 17:51
9ddd0ef to
cfa5df8
Compare
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.
Documents how the
sdksrelease actually publishes, so Phase 2 can't silently stall.Why
Phase 2 said "Publish a standard
@uniswap/uniswapx-sdkrelease" as a single bullet, which reads as one merge. It isn't necessarily.The monorepo releases via changesets (
.github/workflows/semantic-release.yaml). On every push tomainthe workflow picks its mode by asking one question — are there any.changeset/*.mdfiles left?chore(sdks): Version PackagesPR. Nothing is published.changeset publish— pushes every package whosepackage.jsonversion isn't already on npmSo publishing needs both conditions in the same push to
main: no pending changesets, and apackage.jsonversion npm doesn't have yet.Two legitimate routes
changeset versionitself, so it carries the bumps, CHANGELOGs, and the changeset deletions. One merge, publishes directly.And the ways to do half of either
package.jsonwhile leaving your changeset in place publishes nothing — the workflow stays in mode 1.Also in this PR
npm view @uniswap/uniswapx-sdk versionreturning the new version, rather than "the PR merged".getPermit2,getReactor, andUniswapXOrderQuoter's constructor all throwMissingConfigurationfor an unmapped chain, so wiring a chain into a service before the SDK publishes turns "chain unsupported" into "chain accepted, then 500s". Hence the rule it records: never split the chain-enum addition and the SDK bump across two PRs, because adding a chain to a request validator makes those requests reachable the moment it deploys.Not included
§3.4 is separately stale for parameterization-api and will get its own PR:
lib/config/chains.tsno longer exists (so "Correction C" is obsolete —lib/util/chains.tsis now the documented single source of truth),V3_BLOCK_BUFFERandgetBlockTimeSecsno longer exist (block time moved to sdk-core'ssecondsToBlocks), and per-chainRPC_<chainId>env vars were replaced by a singleRPC_PREFIX_URL.🤖 Generated with Claude Code