Skip to content

Bump Alchemy to 2.0.0-beta.85 and Effect to 4.1.2 - #180

Merged
jonbeckman merged 5 commits into
masterfrom
cursor/bump-alchemy-effect-d1cb
Nov 13, 2026
Merged

jonbeckman merged 5 commits into
masterfrom
cursor/bump-alchemy-effect-d1cb

Conversation

@jonbeckman

@jonbeckman jonbeckman commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Moves the workspace onto Alchemy 2.0.0-beta.85 and Effect 4.1.2, and merges current master (through #195).

The root workerd override is removed. It held workerd behind the release Alchemy beta.85's Vite forwarder needs. That forwarder waits for HTTP/1.1 100 Continue before it sends a POST body, and workerd 1.20261006.1 never sends that response.

No published Miniflare release depends on workerd 1.20261026.1, the exact version @alchemy.run/cloudflare-runtime@2.0.0-beta.85 depends on. Miniflare is now 5.20261101.0-beta, the next published release, and it depends on workerd 1.20261101.1. Wrangler 4.149.0 also depended on workerd 1.20261006.1 and Miniflare 5.20261006.1-alpha, so Wrangler is now 4.156.1, which uses that same Miniflare and workerd 1.20261101.1.

nub why workerd shows two versions:

  • 1.20261026.1, supplied by @alchemy.run/cloudflare-runtime (the binary alchemy dev uses)
  • 1.20261101.1, supplied by miniflare and wrangler

Both binaries include 100 Continue. 1.20261006.1 is gone. allowScripts still allows the workerd install script. VERSION is untouched. The release:none label stays.

Master's versions are kept for everything this pull request does not bump, including oxlint 1.93.0, oxfmt 0.78.0, tsrs 0.23.0-ts7.1.0-beta, the AI SDK pins from #192, and the AI Search config shape from #186. The config JSON schema was regenerated for Effect 4.1 against that shape.

#195 moved @alchemy.run/cloudflare and alchemy to production dependencies of @solzero/background-api so a pruned publish can still deploy. Those packages stay production dependencies, at 2.0.0-beta.85. Effect stays a devDependency at 4.1.2.

Root cause

File: @alchemy.run/cloudflare-runtime@2.0.0-beta.85 src/vite/worker-request.ts, in forwardWorkerRequest.

  • Lines 70–79: a request with content-length or transfer-encoding is forwarded with expect: 100-continue.
  • Lines 169–174: the body is not piped until the upstream emits continue.

That landed in commit 3bb45b0f08 (feat(cloudflare-runtime): update workerd and sync workers-sdk, #2673), which is in 2.0.0-beta.85 and not in 2.0.0-beta.84. Beta.84 piped the body immediately.

A packet capture of POST /api/auth/sign-in/email to port 3000 showed the Vite process sending headers, including expect: 100-continue and content-length: 40, and then no body. workerd acknowledged the headers and never replied 100 Continue. The Worker then failed request.arrayBuffer() with Network connection lost once the client gave up. The same POST to port 3100 does not go through this Vite forwarder, so it returned 200.

workerd 1.20261006.1 has no 100 Continue string in the binary. 1.20261026.1 and 1.20261101.1 do.

Conflicts

  • .npmrc: kept master's release-age exclusions, including oxfmt 0.78.0, oxlint 1.93.0, and ai@7.0.166, and removed the workerd 1.20261006.1 exclusions.
  • package.json: Miniflare 5.20261101.0-beta and Wrangler 4.156.1 from this branch; oxfmt 0.78.0 and oxlint 1.93.0 from master. The workerd override stays removed.
  • apps/api/package.json: Alchemy 2.0.0-beta.85 and Effect 4.1.2 from this branch; tsrs 0.23.0-ts7.1.0-beta from master. After Keep Alchemy libraries in the published deploy package #195, @alchemy.run/cloudflare and alchemy are production dependencies.
  • config/s0.config.schema.json: master's removal of aiSearch.serviceTokenId, then regenerated with Effect 4.1.
  • nub.lock: regenerated with nub. Not hand-edited.

Validation

  • nub run format, nub run lint, and nub run typecheck: passed, including the pre-push hook on both pushes.
  • nub run config:check: passed.
  • nub run test:config: 31 passed (5 files), including the Miniflare service-binding and storage fixtures. One workerd stderr line reported a hung request during the service-binding case; the test still passed. Re-run after the Keep Alchemy libraries in the published deploy package #195 merge.
  • nub run test: 30 passed, 2 failed. Sign-in, Isolate, settings, workflows, and the other core flows passed. OpenCode and Codex timed out because cloudflare/proxy-everything exited before the container could start (iptables PREROUTING append failed: missing kernel module). That is this VM, not an application change. CI runs that suite on a host that can run the proxy. The Keep Alchemy libraries in the published deploy package #195 follow-up only moves the same Alchemy packages into production dependencies, so that browser suite was not repeated.

Checklist

  • I added or updated tests for behavior changes, or explained why tests are not needed. The existing config suite covers the Miniflare fixtures.
  • I updated documentation and config examples when behavior or configuration changed. The config JSON schema was regenerated for Effect 4.1. Stale workerd 1.20261006.1 entries were removed from .npmrc minimumReleaseAgeExclude. The new Miniflare and workerd versions did not need an age exclusion.
  • I added a .tegami/ release entry. VERSION is untouched. This pull request keeps release:none.
  • I ran nub run config:check, nub run format, nub run lint, nub run typecheck, nub run test:config, and nub run test.
  • I did not include credentials, private data, internal URLs, or organization-specific defaults.
  • I updated THIRD_PARTY_NOTICES.md for new third-party code or separately licensed assets. No new third-party source was added.
Open in Web Open in Cursor 

cursoragent and others added 2 commits November 7, 2026 01:43
Alchemy 2.0.0-beta.85 requires Effect ^4.1.0. Regenerate the config JSON schema so Effect 4.1's flattened anyOf output matches the committed document.

Co-authored-by: Jonathan Beckman <jonathantbeckman@gmail.com>
The Vite dev forwarder waits for HTTP 100 Continue before it sends a request body. workerd 1.20261006.1 never sends that response, so local POSTs through port 3000 lose their body. Alchemy 2.0.0-beta.85 depends on workerd 1.20261026.1, which does.

Co-authored-by: Jonathan Beckman <jonathantbeckman@gmail.com>
@jonbeckman
jonbeckman marked this pull request as ready for review November 9, 2026 09:42
@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Tegami

This repository uses Tegami to manage releases. When your changes affect published packages, add a changelog file under .tegami/ before merging.

Create a changelog → · Changelog format

Release preview

Package Bump Version
solzero patch 3.0.0 → 3.0.1

Changelogs in this PR

Changelog Title
2026-11-07-alchemy-effect-bump.md Deploy with Alchemy 2.0.0-beta.85 and Effect 4.1.2

Run nub run tegami locally to create a changelog interactively.

Managed by Tegami.

@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e solzero-core: 32 passed

4 agent steps · 4 replayed from cache

Change 14 files changed since eecb613
Filter decision kept all 30 tests (the diff is over 60 kB, so the decision filter left nothing out)

All 32 tests in 13 files
Test Agent Time
🟢 tests/accounts.e2e.ts · 3 passed 7.3s
🟢 create, use and revoke an isolated user API key 3.6s
🟢 Better Auth 1.7 account APIs select the local account row id 201ms
🟢 Accounts settings shows GitHub as unlinked without OAuth providers 3.5s
🟢 tests/admin.e2e.ts · 1 passed 4.4s
🟢 administrator pages show live control-plane configuration 4.4s
🟢 tests/advanced-sessions.e2e.ts · 2 passed 7.4s
🟢 incognito sessions stay outside normal lists but open directly 3.5s
🟢 session MCP definitions and subagent preferences persist 3.8s
🟢 tests/api-contract.e2e.ts · 1 passed 423ms
🟢 exported API key and session schemas decode actual Worker responses 423ms
🟢 tests/auth.e2e.ts · 4 passed 15.2s
🟢 sign-in gate protects every application route 1.2s
🟢 credential sign-in opens the requested settings page 6.5s
🟢 anonymous callers cannot access any protected API group 200ms
🟢 sign-out removes authenticated UI access 7.3s
🟢 tests/auth.setup.e2e.ts · 2 passed 7.4s
🟢 authenticate isolated admin 5.3s
🟢 authenticate isolated peer 2.2s
🟢 tests/bots.e2e.ts · 1 passed 5.0s
🟢 create a bot and manage a temporary routine through the UI 5.0s
🟢 tests/branding.e2e.ts · 3 passed 315ms
🟢 the selected deployment brand reaches the browser 273ms
🟢 health identifies the configured application without exposing configuration 24ms
🟢 OpenAPI uses the selected deployment brand 18ms
🟢 tests/session-transfer.e2e.ts · 1 passed 2.2s
🟢 admin authentication transfer redeems once and retains its deep link 2.2s
🟢 tests/sessions.e2e.ts · 5 passed 1 step 42.4s
🟢 session tools, archive and restoration persist through the real Worker 1 step 5.0s
🟢 a second account cannot read or mutate another account's session 343ms
🟢 isolate executes a real prompt and persists its output 8.4s
🟢 opencode executes a real prompt and persists its output 15.4s
🟢 codex executes a real prompt and persists its output 13.2s
🟢 tests/settings.e2e.ts · 5 passed 2 steps 24.2s
🟢 all settings categories load real data 7.8s
🟢 runtime default persists after reload 6.0s
🟢 MCP deep link and legacy settings URL open the MCP tab 2.3s
🟢 secret editor creates, finds and deletes a disposable secret 1 step 4.0s
🟢 theme preference survives reload 1 step 4.1s
🟢 tests/skills.e2e.ts · 1 passed 7.1s
🟢 global skill defaults and per-user preferences persist independently 7.1s
🟢 tests/workflows.e2e.ts · 3 passed 1 step 7.8s
🟢 workflow authoring, rename, export, disable and archive persist 1 step 5.3s
🟢 manual workflow executes JavaScript and stores a real R2 artifact 2.4s
🟢 invalid workflow definitions are rejected before storage 116ms

Tested by e2e 0.23.0 · 3m 22s · local-cloudflare · run artifacts

The override held workerd behind the release Alchemy beta.85's Vite forwarder needs for 100 Continue. Miniflare 5.20261101.0-beta and Wrangler 4.156.1 depend on workerd 1.20261101.1. Alchemy's runtime still depends on workerd 1.20261026.1. No published Miniflare release depends on that exact version.

Co-authored-by: Jonathan Beckman <jonathantbeckman@gmail.com>
@jonbeckman
jonbeckman marked this pull request as draft November 13, 2026 17:05
Keep Alchemy 2.0.0-beta.85, Effect 4.1.2, Wrangler 4.156.1, and Miniflare
5.20261101.0-beta. Keep master's oxlint, oxfmt, tsrs, and AI SDK versions.
Drop the workerd 1.20261006.1 override and its release-age exclusions.
Regenerate nub.lock with nub.

Co-authored-by: Jonathan Beckman <jonathantbeckman@gmail.com>
@cursor
cursor Bot marked this pull request as ready for review November 13, 2026 17:41
#195 moved @alchemy.run/cloudflare and alchemy to production dependencies
so a pruned publish can still deploy. Keep those packages there, at
2.0.0-beta.85. Effect stays 4.1.2.

Co-authored-by: Jonathan Beckman <jonathantbeckman@gmail.com>
@jonbeckman
jonbeckman enabled auto-merge (squash) November 13, 2026 17:44
@jonbeckman
jonbeckman merged commit 95171b0 into master Nov 13, 2026
11 checks passed
@jonbeckman
jonbeckman deleted the cursor/bump-alchemy-effect-d1cb branch November 13, 2026 17:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants