Skip to content

Rollout: upgrade Effect and Foldkit - #76

Merged
bjacobso merged 2 commits into
mainfrom
conductor/rollout-foldworks-dependencies
Oct 13, 2026
Merged

bjacobso merged 2 commits into
mainfrom
conductor/rollout-foldworks-dependencies

Conversation

@bjacobso

@bjacobso bjacobso commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

Upgrade the shared runtimes for effect-latest and foldkit-latest to the exact targets verified on 2026-10-12. Catalogs, public peer ranges, manifests, scoped overrides, and the lockfile agree; obsolete Effect RC resolutions are gone. This fresh branch starts at origin/main commit 582ab94, after the previous rollout (#73) merged.

Versions

Packages Before After
effect, @effect/platform-browser, @effect/platform-node, @effect/platform-node-shared, @effect/sql-d1, @effect/sql-sqlite-do, @effect/vitest 4.0.0-rc.112 4.0.3
foldkit, @foldkit/ui, @foldkit/devtools 0.156.0 0.168.0
@foldkit/markdown 0.9.0 0.14.3
@foldkit/vite-plugin 0.20.0 0.27.1

The unused @effect/sql-pg and @effect/sql-sqlite-node drivers remain absent. All 12 used target packages have exactly one locked version, matching the requested target. Public peers now start at Effect ^4.0.3, Foldkit ^0.168.0, and @foldkit/ui ^0.168.0. A changeset records minor releases for the 20 affected public packages.

Compatibility and migrations

  • Foldkit's published peers require Effect 4.0.0 exactly; Foldkit and DevTools also require @effect/platform-browser 4.0.0. Version-specific peerDependencyRules.allowedVersions permit only 4.0.3 for the five selected Foldkit releases. The Vite plugin's two direct Node platform pins are overridden only under @foldkit/vite-plugin@0.27.1. Peer checking is not disabled globally. The README documents this local, tested exception and its removal condition; it is not an upstream compatibility guarantee. The clean npm consumer uses corresponding overrides scoped to the exact Foldkit and UI releases it installs.
  • Alchemy beta.76 advertises a peer range accepting stable Effect, but its runtime imports removed effect/unstable/* paths. Upgrade Alchemy and its frontend adapter together from 2.0.0-beta.76 to 2.0.0-beta.80, which uses the new paths. Pin its SQL companions to 4.0.3 within their declared ranges. An offline deployment-import regression runs in the existing check and release-check paths; frontend Vite imports and the Alchemy CLI help are also exercised without provisioning resources.
  • @effect/vitest@4.0.3 requires Vitest 5. Use vitest@5.0.3 and replace the removed describe.sequential helper with explicit nonconcurrent suites. The Effect adapter is an explicit infrastructure-test development dependency, so its compatibility is exercised.
  • Migrate evo to modifyFields, subscription lifts to read returning Option, and the renamed persistent/inbound-port entry helpers. Wrap MCP outbound effects in named Foldkit Commands. Add reducer return types where the new message matcher needs an explicit result context.
  • Use h.Value for textarea content, preserve description linkage with the new hasDescription flag, and supply the calendar locale's required format data while retaining the existing formatting behavior.
  • Adapt browser tests to the new queued updates: wait for the completion model and thread state before interacting, select the actual suggestion popup rather than native select options, allow a browser-scale polling deadline for Vitest 5's pending-read timeout, and address the explicitly hidden desktop sidebar when testing modal teardown.
  • Custom-event handlers now return Option<Message> and validate unknown detail against the editor Message schema. A browser regression verifies malformed messages are ignored and valid native edits still work. Scene tests now resolve dialog resource mounts and acknowledge their teardown; animation completion messages carry the current transition generation.
  • Rebase the existing declaration-only Attribute performance patch onto Foldkit 0.168.0. Upstream still ships the union that caused excessive type-check complexity. The existing type guard and single-checker UI type check pass; the patch does not change Foldkit runtime JavaScript.
  • Move Effect AI imports from effect/unstable/ai to effect/ai, including the package guide and tests, following the Effect migration guide. Changed files use the repository's required formatting.

Verification

  • pnpm install --frozen-lockfile — passed with Node 24.14.1 and pnpm 10.20.0.
  • pnpm check — passed: all package builds/types, infrastructure import test, 625 tests total, lint, formatting, both demo builds, and generated llms structure/links.
  • node scripts/check-packages.mjs — passed: 21 tarballs, clean npm installation/type check/Vitest/production builds, and native-editor bundle isolation.
  • pnpm test:e2e — 119 passed / 1 failed. The sole failure is the navigation expectation reproduced on untouched origin/main; every upgrade-related scenario, including the new editor regression, passes.
  • pnpm test:visual — passed, 53 screenshot/interaction comparisons without updating any baselines.
  • Development browser smoke — home, documentation navigation, and DevTools load with no page errors using the upgraded Vite plugin.
  • Alchemy frontend Vite import and pnpm exec alchemy --help — passed without deployment.
  • Lockfile audit — all selected resolutions match their exact targets; no obsolete RC pin remains.

Limits and blockers

The untouched origin/main checkout at 582ab94 fails the browser navigation expectation because it omits the already-shipped “Theme builder” link. The baseline rerun reproduced that failure; six other selected baseline scenarios passed. This unrelated expectation is left unchanged for a separate fix.

A fresh dependency resolution still warns that Alchemy's transitive capnp-es TypeScript peer does not accept the repository's existing TypeScript 7 compiler. This mismatch predates the rollout; beta.80's capnp-es@0.0.16 accepts TypeScript 5 or 6. It has not been silenced or overridden. The runtime imports and full repository checks pass, but this does not validate capnp code generation with TypeScript 7.

Cloudflare deployment was not performed, so live provisioning remains for the existing post-merge pipeline. Repository settings and unrelated template items are unchanged. Nothing was published or merged.

Final status: effect-latest and foldkit-latest implemented and verified. Frozen installation, the full check, package consumer validation, and all 53 visual tests pass. Browser interactions are 119/120, with the sole failure reproduced on the unchanged default branch and left outside this rollout.


Open workspace in Conductor

@bjacobso
bjacobso merged commit cec341d into main Oct 13, 2026
1 check 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