Skip to content

feat: migrate to Effect 4 and Solid 2 RC - #48

Open
joncrangle wants to merge 4 commits into
mainfrom
codex/effect-solid2-migration
Open

joncrangle wants to merge 4 commits into
mainfrom
codex/effect-solid2-migration

Conversation

@joncrangle

Copy link
Copy Markdown
Owner

Summary

  • Migrate Effect 3 to Effect 4 RC APIs and services.
  • Migrate Solid 1 APIs to Solid 2 RC APIs without rendered effects in application code.
  • Add the temporary OpenTUI 0.5.11 compatibility patch required by the current Solid 1-only renderer.
  • Fix stale drive-selection errors and the live file-handle lifetime bug causing SystemError: Bad file descriptor.
  • Add runtime, filesystem, and drive-selection regression coverage.

Validation

  • bun install --frozen-lockfile
  • just check
  • just test — 149 passing
  • just lint
  • just build
  • TUI smoke test completed without targeted runtime errors

Merge gates

This PR is intentionally a migration branch and should remain unmerged until:

  1. Solid 2 is released out of RC.
  2. Effect 4 is released out of RC.
  3. OpenTUI officially supports Solid 2.x.
  4. The OpenTUI compatibility patch can be removed and the application still passes a clean install, tests, build, and smoke test.

The OpenTUI packages are pinned to 0.5.11 while the patch is present to prevent version drift.

@joncrangle
joncrangle force-pushed the codex/effect-solid2-migration branch from 13346d2 to 1a71568 Compare September 18, 2026 23:20
Remove unused DriveItem component and importer-less components barrel. Trim AppView union to the 7 live views and collapse the footer switch. Remove production-unused isNavigationKey and its tests. Fix dead Header padding ternary. Trim AGENTS.md to evergreen guidance. Add just fmt-check and enforce it in CI.
@joncrangle

Copy link
Copy Markdown
Owner Author

Merge-gate landing checklist

When Solid 2 / Effect 4 go stable and OpenTUI ships a Solid 2-native renderer, this is exactly what needs to change (verified 2026-09-20 — all three are still RC upstream, so nothing to do yet):

  1. package.json — move solid-js off the exact RC pin to a stable range; move effect off the RC to stable; bump @opentui/solid + @opentui/core to the Solid 2-native release. Then bun install to regenerate bun.lock.
  2. Delete patches/@opentui%2Fsolid@0.5.11.patch and remove the patchedDependencies entry. Each shim is documented inline in the patch (mergeProps/splitProps adapters, createRenderEffect adapter, onMount→onSettled swaps, ErrorBoundary→Errored, RendererContext change) — verify the native renderer covers each one.
  3. Revisit src/__tests__/opentui_runtime.test.ts — it validates the patched behavior (settle-phase cleanup, render-phase Portal cleanup). The testRender import surface may move with the native renderer.
  4. Bump @effect/language-service together with Effect, plus its tsconfig.json plugin entry — they are version-coupled.
  5. No change needed: onSettled/Errored in src/ (index.tsx, Spinner.tsx, useAppLogic.ts) are native Solid 2 APIs (frozen at RC), and src/ has zero Solid 1 sites left.

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