Spec: Issue 68 Effect Oxlint Rule Typing
Spec: Issue 68 Effect Oxlint Rule Typing
User Input
fix issue https://github.com/wearedevpunks/harness-intelligence/issues/68 with delivery-phase full parallel. dont give up on using oxlint nested configs. update to latests if needed. i think this is due to typescript7
Issue #68 reports that hi scaffold setup --yes generated an Effect package oxlint.config.ts whose effect-js/no-import-from-barrel-package rule value is rejected by tsc in a consumer workspace.
Context
Harness CLI developers and follow-up agents rely on hi scaffold setup to generate runnable, typecheckable lint config for detected package/app workspaces. Effect + quality scaffold output currently can produce a nested oxlint.config.ts that is syntactically valid JavaScript but invalid TypeScript under workspace checks, blocking consumer repos such as wearedevpunks/secrets.
The fix must preserve the accepted nested Oxlint-config strategy: selected pack rules belong in the nearest owning package/app config, not only in the repo root.
Non-Goals
- Remove nested
oxlint.config.tssupport. - Replace Oxlint or Ultracite with another lint stack.
- Broaden scaffold pack selection semantics beyond the reported Effect + quality lint output.
- Clean unrelated existing lint/style debt in Harness or consumer repos.
Acceptance Criteria
- Generated Effect package/app
oxlint.config.tsfiles typecheck under workspacetscchecks wheneffect-js/no-import-from-barrel-packageis included. - The generated rule value for
effect-js/no-import-from-barrel-packageuses an Oxlint-compatible typed shape, not an ESLint-style or string-widened tuple that failsdefineConfig. hi scaffold setup --yesstill writes or patches nearest package/app Oxlint configs for selected lint assets.- Missing lint dependencies needed by the generated nested config remain declared on the owning
package.json. - A focused regression test fails on the pre-fix generated config shape and passes after the fix.
- If current Oxlint, Ultracite, or TypeScript package versions are part of the failure, the owning package versions are updated without weakening nested-config behavior.
Constraints
- Primary owner is
apps/cli;packages/scaffoldchanges only if a shared scaffold model contract must move. - Keep the fix compatible with generated consumer repositories, not only this monorepo.
- Preserve existing user-authored rules/settings when scaffold patches existing configs.
- Use current Oxlint/Ultracite typing as source of truth for the valid config shape.
Decision Log
| Decision | Rationale |
|---|---|
| Preserve nested package/app Oxlint configs | Prior scaffold-lint baseline requires closest-owner config placement, and the user explicitly asked not to give up on nested configs. |
| Treat issue #68 as reviewed scope | The user supplied the issue and requested full delivery rather than a requirements checkpoint. |