overengineeringstudio / overengineeringstudio/effect-utils
Migrate effect-utils install/setup path from pnpm back to Bun
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 82
- Forks
- 2
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 121
Description
We have enough investigation now to define the remaining work for switching the repo back from pnpm to bun.
Scope
- replace the current pnpm-based install/setup path with a Bun-based one
- keep the migration focused on the actual blockers and the repo changes required
Main blockers
1. Nested workspace patchedDependencies is still broken upstream
This is the remaining hard blocker for direct Bun installs on the current repo shape.
2. Duplicate-package / type-identity issues required stricter internal alignment
- now mitigated in the repo, but should stay part of migration validation
- https://github.com/oven-sh/bun/issues/27847
3. Bun workspaces are still a canary-only path here
Right now Bun installs work only through a manual harness / staged setup. The repo still needs a real generated Bun workspace/install path.
Changes needed
1. Generate Bun-native workspaces
Genie should emit Bun workspaces for the relevant package roots so Bun installs run against real generated manifests rather than a manual harness.
2. Replace per-package install tasks with an aggregate Bun install root
The current per-package install-task model is a poor fit for Bun because multiple overlapping installs clobber each other and duplicate work.
We likely want a generated aggregate package.json from Genie, similar in spirit to tsconfig.all.json, so Bun can install the full workspace closure in one step.
Example shape:
{
"private": true,
"workspaces": [
"packages/@overeng/genie",
"packages/@overeng/notion-cli",
"packages/@overeng/utils"
]
}
Goal:
- one Bun install step over the aggregate workspace closure
- no
noverlapping per-package Bun installs
The exact topology is still being evaluated, but this should be treated as a core migration change.
3. Choose an interim patch strategy
We still need a Bun-compatible workaround for the patch blocker until upstream is fixed.
Most likely options:
- Bun-only local workspace fork
- another Bun-specific staged install strategy
4. Update Bun / Nix install materialization
The builder/install path needs to use the new Bun workspace topology rather than pnpm-oriented staging assumptions.
5. Update devenv task wiring
Tasks should depend on the new aggregate Bun install step instead of per-package pnpm installs where appropriate.
Conceptually, we want to move from this:
pnpm:install:genie
pnpm:install:notion-cli
pnpm:install:utils
...
to something closer to this:
bun:install
with package-local tasks depending on that shared install root when they need JS dependencies.
6. Re-run Bun canaries on the real generated path
Start with:
genienotion-climegarepoutils
Then expand to the broader workspace install path once those are green.
Expected file changes
This will likely touch at least these areas:
Genie generation
genie/internal.tsgenie/external.ts- package-level
package.json.genie.tsfiles - possibly a new aggregate generated manifest alongside
tsconfig.all.json.genie.ts
Package metadata / workspace modeling
packages/@overeng/genie/src/runtime/package-json/mod.tspackages/@overeng/genie/src/runtime/package-json/validators/recompose.tspackages/@overeng/genie/src/core/workspace.ts- generated
package.jsonfiles for Bun-install roots
Devenv task wiring
devenv.nixnix/devenv-modules/tasks/shared/bun.nixnix/devenv-modules/tasks/shared/pnpm.nixnix/devenv-modules/tasks/shared/ts.nixnix/devenv-modules/tasks/shared/lint-oxc.nixnix/devenv-modules/tasks/shared/nix-cli.nix
Nix Bun build/install path
nix/workspace-tools/lib/mk-bun-cli.nixnix/workspace-tools/lib/mk-bun-cli/bun-deps.nix- package-specific Nix build files that currently assume pnpm-oriented install materialization
Documentation / tracking
context/workarounds/bun-issues.mdCHANGELOG.md
Done means
- Bun installs work on real generated manifests, not only via a manual harness
- the remaining patch workaround is encoded in the repo, not manual
- the repo has a single Bun-oriented aggregate install path instead of overlapping per-package Bun installs
- pnpm is no longer the default install/setup path
Filed by an AI assistant on behalf of @schickling
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with genie/internal.ts, genie/external.ts, the package-level package.json.genie.ts files, and the package-json workspace modeling files. Trace how generated manifests and devenv tasks currently materialize installs, then run the Bun canaries for genie, notion-cli, megarepo, and utils on the real generated path. Done means generated Bun workspaces, one aggregate install path, an encoded patch workaround, and no default pnpm setup path.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- bun, typescript
- Domain
- build-system, developer-experience, devops, tooling
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100