Skip to content

Rollout: upgrade Effect and Foldkit - #62

Merged
bjacobso merged 1 commit into
mainfrom
conductor/upgrade-effect-foldkit
Oct 13, 2026
Merged

bjacobso merged 1 commit into
mainfrom
conductor/upgrade-effect-foldkit

Conversation

@bjacobso

@bjacobso bjacobso commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

Upgrade only effect-latest and foldkit-latest to the supplied rollout targets, starting from origin/main at fdc00a7 after the previous rollouts merged. Migrate the stable Effect APIs and the supporting dependencies needed to keep the existing apps and deployment code working.

Dependency Before After
effect 4.0.0-rc.112 4.0.3
@effect/platform-node, @effect/platform-node-shared 4.0.0-rc.112 4.0.3
@effect/sql-d1, @effect/sql-sqlite-do, @effect/vitest 4.0.0-rc.112 4.0.3
@effect/platform-browser Not installed 4.0.3, explicitly supplies Foldkit's new browser peer
foldkit, @foldkit/ui 0.156.0 0.168.0
@foldkit/vite-plugin 0.20.2 0.27.1
vitest 4.1.2 5.0.4, required by @effect/vitest@4.0.3
alchemy 2.0.0-beta.77 2.0.0-beta.81, required for stable Effect import paths

Catalogs, manifests, scoped overrides, and the lockfile are aligned. An audit of every selected package resolution in the lockfile confirmed the exact target versions; unused companions were not added. The obsolete global RC overrides are removed.

Migration details:

  • Move HTTP, HTTP API, RPC, AI, and reactivity imports from effect/unstable/* to the stable export paths (effect/http, effect/http-api, effect/rpc, effect/ai, effect/reactivity), including the protocol README example.
  • Use Config.String, Config.Port, and Config.Redacted in the Node server and deployment configuration.
  • Replace the removed LanguageModel.Service type with LanguageModel.LanguageModel in ingest capabilities/workflow metering.
  • Alchemy beta.77's metadata accepts stable Effect, but its implementation still imports removed unstable modules. Beta.81 uses stable imports and declares compatible ^4.0.0 peers/SQL ranges. Update both consuming manifests and the Cloudflare package's public Alchemy peer range to the version tested here. Its SQL adapters are pinned to the tested patch with parent-scoped overrides.
  • Update README/architecture version claims without claiming that independently maintained sibling releases have also upgraded. Foldkit's existing application API needs no source changes; the existing demos compile and run on the target versions.

Narrow compatibility exceptions:

  • Foldkit 0.168.0, @foldkit/ui@0.168.0, and the Vite plugin 0.27.1 declare exact Effect 4.0.0 peers; Foldkit also declares exact platform-browser 4.0.0. Version-qualified peerDependencyRules.allowedVersions permit only the requested 4.0.3 pairing for these releases.
  • The plugin pins platform-node and platform-node-shared 4.0.0 as direct dependencies. Overrides apply only to @foldkit/vite-plugin@0.27.1 and move those two packages to 4.0.3, preventing a second platform/runtime resolution.
  • Foldworks UI 0.2.0 is its current published release and declares ^0.156.0 Foldkit/UI peers. Version-qualified exceptions permit only 0.168.0 for this release. Its accessible Button controls are exercised by the existing production-page browser tests.
  • Preserve the existing algebra 0.1.0 beta-peer exception, narrow it to that exact package version, and update the tested Effect version to 4.0.3.
  • Peer checking is not disabled globally; pnpm install --frozen-lockfile --strict-peer-dependencies passes. These exceptions record repository test evidence, not broader upstream compatibility guarantees. They are documented in the README.

Validation on the repository's pinned Node 25.9.0 and pnpm 11.1.3:

  • Strict frozen install passed, including a final frozen verification after migration.
  • pnpm check passed: formatting, agent-doc validation, 270 package tests, types, package/app builds, built docs checks, and the existing local HTTP smoke.
  • Homepage typecheck, Alchemy CLI loading, and importing the deployment stack without executing it passed.
  • Production homepage/package browser coverage passed 18/18, including all interactive Foldkit/Foldworks demos, responsive/static pages, lazy-loading boundaries, and opening the React IDE:
SCHEMATICS_E2E_MODE=landing-production pnpm playground:e2e \
  tests/app/landing.spec.ts tests/app/package-pages.spec.ts \
  --reporter=line --update-snapshots=none

Existing browser-suite blockers and limits, left unchanged because they are outside this upgrade:

  • The complete browser run with the existing screenshot assertions returned 19 passed / 11 failed. All 11 failures were screenshot comparisons, concentrated in text rendering. The representative catalog screenshot fails on an untouched checkout of origin/main with the same 8,606-pixel mismatch. No visual baselines or screenshot tolerances were changed.
  • A diagnostic full run with --ignore-snapshots returned 29 passed / 1 failed. The hosted-agent case failed before any agent edit because history read an uninitialized refs/heads/main. The same failure reproduced on untouched origin/main; the upgraded case passed on an isolated rerun. This provides successful functional coverage of all 30 cases, but the combined run is still flaky.
  • Vitest 5 is required by the upgraded Effect test integration. Its declared Node engine range includes Node 22/24/26+ and omits Node 25. The full check nevertheless passed on the existing exact Node 25.9.0 pin; the toolchain was left unchanged for this scoped rollout. This remains a vendor support limitation, and no global engine/peer suppression was added.

How to verify the selected template IDs: inspect catalog/override entries and all effect/listed @effect/* lockfile package resolutions for effect-latest; inspect the three used Foldkit resolutions for foldkit-latest; repeat the strict frozen install, full check, and production-page browser command above.

GitHub repository settings, other template items, and visual baselines were not changed. No manual deployment, package publication, or merge was performed.

Final status: both dependency target sets implemented and verified; full check and production-page browser coverage pass. Existing visual baseline failures, a baseline hosted-history race, and Vitest's Node 25 engine-range limitation are documented for review.


Open workspace in Conductor

@github-actions

Copy link
Copy Markdown

Cloudflare Preview Deployed

Playground: https://schematics-playground-pr-62-ohwjxu747h2ybnst.bjacobso.workers.dev
API: https://schematics-api-pr-62-cigk2iqsdv4lnc5k.bjacobso.workers.dev

Built from commit f01288d


2026-10-12T20:13:21.788Z

This comment updates automatically with each push.

@bjacobso
bjacobso merged commit 758aa2b into main Oct 13, 2026
2 checks passed
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