overengineeringstudio / overengineeringstudio/effect-utils

Split @overeng/genie: codegen runtime vs TUI rendering (so codegen-only consumers don't inherit the TUI peer surface)

Open
#831 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

area:tui area:typescript origin:agent type:chore
Dominant language
TypeScript
Stars
82
Forks
2
Avg merge
1d 8h
Merged PRs (30d)
121

Description

Problem

@overeng/genie ships two concerns in a single package: the codegen runtime (compile/stringify, the .genie.ts engine, the package.json/tsconfig/workspace generators) and the TUI rendering/build layer (view.tsx, Storybook stories, the interactive genie:run output). The TUI stack is declared in peerDependencies:

  • @opentui/core, @opentui/react, react, react-dom, react-reconciler, @types/react-reconciler
  • @storybook/react, @playwright/test
  • the @effect/* cluster/workflow/rpc/platform-node set

Because of strictPeerDependencies, any workspace member that links @overeng/genie purely to author a .genie.ts generator — i.e. uses only the codegen runtime and never renders a TUI — is still forced to satisfy this entire peer surface. The consumer's package.json ends up declaring react/@opentui/*/@storybook/react/@playwright/test it never imports.

Impact

  • Codegen-only consumers carry a large, irrelevant dependency footprint.
  • That footprint is a recurring source of version-skew/merge friction — e.g. an @opentui major bump surfaces as a lockfile conflict in a consumer that has nothing to do with the TUI.
  • It inflates each consumer's resolved dependency graph and lockfile delta.

Proposed direction

Split so the codegen runtime is consumable without the TUI:

  • @overeng/genie runtime (e.g. the existing package, or a @overeng/genie/runtime export) — codegen engine + generators; peer surface limited to effect (+ whatever the runtime actually imports at build time).
  • @overeng/genie TUI/build (e.g. @overeng/genie-tui or a @overeng/genie/build subpath) — the view.tsx/opentui/react/Storybook/Playwright layer, depending on the runtime.

A consumer that only authors generators depends on the runtime and pulls a light peer surface; the CLI/TUI entrypoint composes both.

Acceptance

  • A codegen-only consumer can link the runtime and satisfy its peers with effect alone (no react/@opentui/*/@storybook/*/@playwright/*).
  • The TUI/build entrypoint still works: interactive genie:run output renders and the Storybook stories build.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by mapping the codegen runtime, package.json, tsconfig, workspace generators, view.tsx, Storybook stories, and the interactive genie:run entrypoint. Inspect which imports require the listed peer dependencies, then validate a codegen-only consumer with effect alone and confirm that genie:run and the Storybook stories still build and render.

Written by the indexing model from the issue text.

Assessment

Tech stack
playwright, react, storybook, typescript
Domain
build-system, developer-experience, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.