overengineeringstudio / overengineeringstudio/effect-utils

genie --check crosses composed repo boundaries into nested repo-local generators

Open
#532 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

origin:agent type:agent-tooling
Dominant language
TypeScript
Stars
82
Forks
2
Avg merge
1d 8h
Merged PRs (30d)
121

Description

Context

In a composed megarepo consumer (overeng), root genie:check / genie --check can fail fatally by reaching into a nested repo-local dev generator under a megarepo refs/commits/... path.

This showed up immediately after merging the pnpm 11 migration in overeng. CI is green there only because lint:check:genie is temporarily excluded; the underlying shared genie boundary problem remains.

Current behavior

From the overeng root:

DT_PASSTHROUGH=1 devenv tasks run genie:check --mode before --no-tui

fails with:

GenieGenerationFailedError: Fatal check error in ../../../../../../livestorejs/livestore/refs/commits/c74689bd6fc65e32e6391fb5d762ab4169cfd2de/tsconfig.dev.json.genie.ts; interrupted 250 sibling file(s)

Important signals:

  • findGenieFiles already skips repos/, so this is not just raw directory traversal into nested repos
  • the fatal path is a nested LiveStore repo-local dev generator (tsconfig.dev.json.genie.ts), not an overeng-owned file
  • once this happens, genie aborts the whole root check

Why this is a bug in shared behavior

A composed downstream root should not have its genie --check invalidated by foreign nested repo-local dev generators that are outside the downstream repo's intended ownership boundary.

Either:

  • genie import/check behavior is following transitive imports too aggressively across composed repo boundaries, or
  • the workspace/validation context is treating nested repo-local generator state as part of the downstream root check surface

In either case, the boundary semantics are wrong for composed megarepo consumers.

Desired behavior

When running genie --check from a composed downstream repo root:

  • only downstream-owned generator files should participate in the authoritative check surface, or
  • foreign nested repo-local generators should be isolated so they cannot fatally break the downstream root check

In particular, nested repo-local files like repos/livestore/tsconfig.dev.json.genie.ts should not appear as fatal check targets for the overeng root.

Workaround

Downstream repos currently have to weaken their lint/task graph to stay green.

Concrete example in overeng:

  • aggregate lint:check temporarily excludes lint:check:genie
  • local attempts to simplify other task overrides are also blocked because genie:check fails before TypeScript even runs

Related

  • overengineeringstudio/effect-utils#244
    • related workspace/composition ergonomics, but this bug is specifically about genie --check crossing composed repo boundaries into nested repo-local generators
  • overengineeringstudio/effect-utils#129
    • also a genie + megarepo/symlink issue, but different failure mode
  • overengineeringstudio/overeng#170
    • downstream cleanup tracker currently blocked on this behavior

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 reproducing the failure with DT_PASSTHROUGH=1 devenv tasks run genie:check --mode before --no-tui from a composed repository root. Trace findGenieFiles and the check/import path that reaches repos/livestore/tsconfig.dev.json.genie.ts. Done means foreign nested repo-local generators no longer become fatal targets for the downstream root check, with relevant validation passing.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.