Repository navigation
chore(deps): alchemy 2.0.0-beta.85 with provider-split migration - #893
Open
elliotBraem wants to merge 2 commits into
Open
elliotBraem wants to merge 2 commits into
elliotBraem wants to merge 2 commits into
Conversation
alchemy 2.0.0-beta.85 (npm latest, 2026-11-02) — NOT the next-tag beta.72. One catalog pin (exact), referenced from packages/everything-dev and infra. beta.84 enforced the provider-package split: Docker/Cloudflare/Fly/... now ship as @alchemy.run/* packages. Migrate the two in-repo consumers: - hosting adapter: alchemy/Docker -> @alchemy.run/docker (same namespace: Docker.Container/providers()/Docker); new optional peer on @alchemy.run/docker; alchemy peer tightened to >=2.0.0-beta.85 <3.0.0 (the split makes pre-84 unusable for this code) - infra CDN stack: alchemy/Cloudflare -> @alchemy.run/cloudflare; resource FQNs unchanged (Cloudflare.R2.Bucket, Cloudflare.ApiToken.AccountApiToken) so existing state stays readable alchemy beta.85 imports effect/dist/crypto/Digest.js (Effect 4.1-only): catalog effect/@effect/platform-node/@effect/platform-node-shared move rc.118 -> 4.1.4 in lockstep (everything-dev pins, @effect/vitest, prepare clone tag, infra deps); vendored repos/effect clone re-targeted to effect@4.1.4. minimumReleaseAgeExclude records the deliberate pin of the fresh 4.1.4 releases (pnpm supply-chain policy). Gates: typecheck green (16 workspaces), lint green, hosting tests 9/9 + api reconciler-docker 1/1 against a live Docker daemon, infra alchemy plan loads the stack and reaches the state store (credential-blocked on expired Cloudflare OAuth — owner verify).
This branch has not been deployed
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.
Deliberate, version-locked bump of Alchemy to
2.0.0-beta.85(npmlatest, 2026-11-02 — not the oldernext-tag beta.72). Ticket: fly-hosting/03.Changelog findings (beta.84 + beta.85)
beta.84 enforced the provider-package split (#2244 + #2309/#2311/#2312/#2313/#2315/#2316/#2348). At beta.85 the core
alchemypackage ships only the engine (Deploy,AdoptPolicy,Artifacts,Drift,Alchemist,State,Stack,Stage,AlchemyContext,Output,RemovalPolicy,Interaction, …); every provider lives in a versioned@alchemy.run/*package at2.0.0-beta.85(docker,cloudflare,fly,neon,aws,gcp,railway,axiom,acme,better-auth, …).Breaking changes that touch us:
alchemy/Dockerandalchemy/Cloudflareare gone → the two in-repo consumers migrate:packages/everything-dev/src/services/hosting/docker.ts):alchemy/Docker→@alchemy.run/docker. Same namespace shape (Docker.Container,Docker.providers(),Docker.Docker) — one import line. API tests pass unchanged against a live Docker daemon.infra/alchemy.run.ts):alchemy/Cloudflare→@alchemy.run/cloudflare. Resource FQNs survived the split unchanged (Cloudflare.R2.Bucket,Cloudflare.ApiToken.AccountApiToken, verified against beta.79 vs beta.85.d.ts), so existing state stays readable.Cloudflare.stateoptions narrowed toworkerNameonly (#2945) — ours passes no options;workerNameremains optional (defaultalchemy-state-store), no change needed.nameservers.type, GCP SQL settings, GitHub ruleset props,Test.make→@alchemy.run/test) touch nothing we use — recorded in the evaluation notes.effect/dist/crypto/Digest.jsanddist/SemVer.js, which only Effect 4.1 ships (its peer range>=4.0.0-rc.115 || >=4.0.0is looser than reality — a known packaging gap). The catalog moveseffect/@effect/platform-node/@effect/platform-node-sharedrc.118 → 4.1.4 in lockstep, pluseverything-dev's hard deps,@effect/vitest, theprepareclone tag, and the vendoredrepos/effectclone (re-targeted toeffect@4.1.4). Full monorepo typecheck is green on 4.1.4. Note:effect@4.1.4published today —minimumReleaseAgeExcluderecords the deliberate pin against pnpm's supply-chain age policy; this PR is that review.The exact pin plan
pnpm-workspace.yamlcatalog:alchemy: 2.0.0-beta.85(exact) and@alchemy.run/docker: 2.0.0-beta.85(exact) — the one place.packages/everything-dev: devDependencycatalog:for both.infra/package.json:alchemy+@alchemy.run/cloudflareat2.0.0-beta.85exact (infra is not a workspace member).>=2.0.0-beta.79 <3.0.0→>=2.0.0-beta.85 <3.0.0(plus a new optional peer@alchemy.run/docker >=2.0.0-beta.85 <3.0.0). Rationale: the provider split (beta.84) means code written against beta.85 (@alchemy.run/dockerimports) cannot run on anything older; keeping the wide range would advertise a compatibility that doesn't exist. The split packages at pre-84 versions don't exist at all.Test evidence
pnpm run typecheck— green (16 workspaces) on Effect 4.1.4.pnpm run lint— green (Biome + Effect rules).hosting-adapter-docker+hosting-secrets-delivery— 9/9 passed, deploying real containers through alchemy beta.85 +@alchemy.run/dockeragainst a live Docker daemon.api/tests/reconciler-docker.test.ts— 1/1 passed (Docker daemon available).cd infra && pnpm exec alchemy plan --stage production— the beta.85 CLI now runs (previously broken even on beta.79: it importseffect/dist/unstable/cli/Command.js, missing in rc.118 — the infra effect bump fixes that too). The run imports the migrated stack module, resolves services, and reaches "Loading stack state", then stops at:error: Failed to resolve Cloudflare credentials from profile 'default': Cloudflare OAuth refresh failedFly provider capability note (feeds ticket 07)
Verified against the installed
@alchemy.run/fly@2.0.0-beta.85.d.ts(full table appended to ticket 07):@alchemy.run/fly—Fly.App,Fly.Machine,Fly.Service,Fly.Secret,Fly.Certificate,Fly.IpAssignment,Fly.Postgres,Fly.Spriteall present.Machine.autostop?: "off" | "stop" | "suspend" | boolean— no post-deploy Machines-API call required. (Caveat from the provider docs: autostop only affects already-existing machines.)deploy: { strategy: "bluegreen", healthTimeout }+shutdown— confirmed inlib/Deployment.d.ts; attached volumes force rolling (matches ticket 07's "no volumes by default").Fly.Volumeis not a public resource (low-level helpers only); volumes areMachine.mounts: DiskSpec { path, sizeGb, encrypted?, fstype? }via theMountVolumeservice.Fly.Postgres:plan(basic= the ~$38/mo tier),volumeSizeGb(default 10),postgis— all create-only;migrationson deploy over the direct URI; outputspooledConnectionUri+ direct URI; org-private network.Owner-verify items
defaultexpired. Runalchemy profile refresh --profile default --provider Cloudflare(device code, browser), thencd infra && pnpm exec alchemy plan --stage productionand confirm zero diff (FQN stability above makes it likely; a non-zero diff blocks repo-cleanup/12 and should stop the train).infra/pnpm installnow errorsERR_PNPM_IGNORED_BUILDSforworkerd's postinstall under pnpm 12's strict policy — the tree installs fine (workerd is only needed foralchemy dev, notplan); the committedinfra/pnpm-workspace.yamlrecords the exclusion. If you'd rather build workerd,pnpm approve-buildsininfra/.api/build.config.tsexternalizesalchemy+everything-dev/hosting/docker; the external hosting module now also imports@alchemy.run/docker, so the runtime image's node_modules must provide it whereveralchemyis provisioned today (the optional peer declares this).Out of scope (recorded, not adopted)
Alchemist.plan/apply+Alchemist.Drift.scan/execute, state stores (Cloudflare/AWS-DynamoDB/GCP + custom Postgres), Neon, Fly Sprites, Railway, Better Auth, Axiom, ACME,alchemy dev/Worktrees — one paragraph each indocs/plans/notes/alchemy-beta85-evaluation.md.