overengineeringstudio / overengineeringstudio/effect-utils

Migrate effect-utils install/setup path from pnpm back to Bun

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

Nobody has claimed this yet.

origin:agent type:chore
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
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 n overlapping 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:

  • genie
  • notion-cli
  • megarepo
  • utils

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.ts
  • genie/external.ts
  • package-level package.json.genie.ts files
  • possibly a new aggregate generated manifest alongside tsconfig.all.json.genie.ts
Package metadata / workspace modeling
  • packages/@overeng/genie/src/runtime/package-json/mod.ts
  • packages/@overeng/genie/src/runtime/package-json/validators/recompose.ts
  • packages/@overeng/genie/src/core/workspace.ts
  • generated package.json files for Bun-install roots
Devenv task wiring
  • devenv.nix
  • nix/devenv-modules/tasks/shared/bun.nix
  • nix/devenv-modules/tasks/shared/pnpm.nix
  • nix/devenv-modules/tasks/shared/ts.nix
  • nix/devenv-modules/tasks/shared/lint-oxc.nix
  • nix/devenv-modules/tasks/shared/nix-cli.nix
Nix Bun build/install path
  • nix/workspace-tools/lib/mk-bun-cli.nix
  • nix/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.md
  • CHANGELOG.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

  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 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.