From a94226a3a5d65781848f1fce64c92240239939f5 Mon Sep 17 00:00:00 2001 From: 7ttp <117663341+7ttp@users.noreply.github.com> Date: Fri, 30 Oct 2026 21:15:41 +0530 Subject: [PATCH 1/6] chore(repo): fold the effect lint into the repo lint --- .oxlintrc.effect.json | 25 ----- .oxlintrc.json | 101 +++++++++++++++++- AGENTS.md | 7 +- apps/cli-e2e/AGENTS.md | 2 +- .../db-bootstrap/local-db-running.ts | 18 ++-- package.json | 8 +- turbo.json | 6 -- 7 files changed, 117 insertions(+), 50 deletions(-) delete mode 100644 .oxlintrc.effect.json diff --git a/.oxlintrc.effect.json b/.oxlintrc.effect.json deleted file mode 100644 index d3209edd72..0000000000 --- a/.oxlintrc.effect.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "./node_modules/@effect/tsgo/oxlint-schema.json", - "extends": ["./.oxlintrc.json", "./node_modules/@effect/tsgo/oxlint-presets/recommended.json"], - "options": { - "denyWarnings": true - }, - "ignorePatterns": [ - "**", - "!packages/api/**", - "!packages/config/**", - "!packages/stack/**", - "!apps/cli-e2e/**", - "!apps/cli/**", - "!apps/docs/**", - "!packages/cli-test-helpers/**", - "!tools/**", - // Last match wins across the whole list: keep bare re-exclusions after every - // `!` entry that would otherwise re-include them. - "apps/cli/src/shared/cli/bin.ts", - "apps/cli/src/shared/compute/stacks/**", - "apps/cli/src/shared/feedback/database.types.ts", - "apps/cli/src/command-internal/db-bootstrap/local-db-running.ts", - "packages/api/src/generated/contracts.ts" - ] -} diff --git a/.oxlintrc.json b/.oxlintrc.json index 51bff7da6a..a7fee63d6c 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -1,5 +1,6 @@ { - "$schema": "./node_modules/oxlint/configuration_schema.json", + "$schema": "./node_modules/@effect/tsgo/oxlint-schema.json", + "extends": ["./node_modules/@effect/tsgo/oxlint-presets/recommended.json"], "options": { "typeAware": true, "denyWarnings": true @@ -574,6 +575,104 @@ } ] } + }, + { + "files": ["apps/cli/src/command-internal/db-bootstrap/local-db-running.ts"], + "rules": { + "effecttsgo/node-builtin-import": "off" + } + }, + { + "files": [ + ".github/scripts/**", + "apps/cli/src/shared/cli/bin.ts", + "apps/cli/src/shared/compute/stacks/**", + "packages/api/src/generated/contracts.ts" + ], + "rules": { + "effecttsgo/abort-controller-in-effect": "off", + "effecttsgo/any-unknown-in-error-context": "off", + "effecttsgo/async-function": "off", + "effecttsgo/catch-all-to-map-error": "off", + "effecttsgo/catch-chain-to-first-success-of": "off", + "effecttsgo/catch-tag-to-catch-reason": "off", + "effecttsgo/catch-to-ignore": "off", + "effecttsgo/catch-to-or-else-succeed": "off", + "effecttsgo/catch-unfailable-effect": "off", + "effecttsgo/class-self-mismatch": "off", + "effecttsgo/crypto-random-uuid": "off", + "effecttsgo/crypto-random-uuid-in-effect": "off", + "effecttsgo/duplicate-package": "off", + "effecttsgo/effect-fn-iife": "off", + "effecttsgo/effect-fn-implicit-any": "off", + "effecttsgo/effect-fn-opportunity": "off", + "effecttsgo/effect-gen-uses-adapter": "off", + "effecttsgo/effect-in-failure": "off", + "effecttsgo/effect-in-void-success": "off", + "effecttsgo/effect-map-flatten": "off", + "effecttsgo/effect-map-void": "off", + "effecttsgo/effect-succeed-with-void": "off", + "effecttsgo/extends-native-error": "off", + "effecttsgo/flat-map-to-map": "off", + "effecttsgo/floating-effect": "off", + "effecttsgo/floating-effect-in-vitest": "off", + "effecttsgo/generic-effect-services": "off", + "effecttsgo/global-console": "off", + "effecttsgo/global-console-in-effect": "off", + "effecttsgo/global-date": "off", + "effecttsgo/global-date-in-effect": "off", + "effecttsgo/global-error-in-effect-catch": "off", + "effecttsgo/global-error-in-effect-failure": "off", + "effecttsgo/global-fetch": "off", + "effecttsgo/global-fetch-in-effect": "off", + "effecttsgo/global-random": "off", + "effecttsgo/global-random-in-effect": "off", + "effecttsgo/global-timers": "off", + "effecttsgo/global-timers-in-effect": "off", + "effecttsgo/instance-of-schema": "off", + "effecttsgo/layer-merge-all-with-dependencies": "off", + "effecttsgo/lazy-effect": "off", + "effecttsgo/lazy-promise-in-effect-sync": "off", + "effecttsgo/leaking-requirements": "off", + "effecttsgo/missing-effect-context": "off", + "effecttsgo/missing-effect-error": "off", + "effecttsgo/missing-layer-context": "off", + "effecttsgo/missing-return-yield-star": "off", + "effecttsgo/missing-star-in-yield-effect-gen": "off", + "effecttsgo/multiple-catch-tag": "off", + "effecttsgo/multiple-effect-provide": "off", + "effecttsgo/new-promise": "off", + "effecttsgo/node-builtin-import": "off", + "effecttsgo/non-object-effect-service-type": "off", + "effecttsgo/outdated-api": "off", + "effecttsgo/overridden-schema-constructor": "off", + "effecttsgo/prefer-schema-over-json": "off", + "effecttsgo/prefer-typed-schema-decoder": "off", + "effecttsgo/prefer-unsafe-constructor": "off", + "effecttsgo/process-env": "off", + "effecttsgo/process-env-in-effect": "off", + "effecttsgo/promise-in-effect-success": "off", + "effecttsgo/redundant-map-error": "off", + "effecttsgo/redundant-or-die": "off", + "effecttsgo/redundant-schema-tag-identifier": "off", + "effecttsgo/return-effect-in-gen": "off", + "effecttsgo/run-effect-inside-effect": "off", + "effecttsgo/schema-literal-non-finite": "off", + "effecttsgo/schema-number": "off", + "effecttsgo/schema-opaque-instance-member": "off", + "effecttsgo/schema-struct-with-tag": "off", + "effecttsgo/schema-sync-in-effect": "off", + "effecttsgo/scope-in-layer-effect": "off", + "effecttsgo/sync-to-succeed": "off", + "effecttsgo/try-catch-in-effect-gen": "off", + "effecttsgo/unknown-in-effect-catch": "off", + "effecttsgo/unnecessary-effect-gen": "off", + "effecttsgo/unnecessary-fail-yieldable-error": "off", + "effecttsgo/unnecessary-pipe": "off", + "effecttsgo/unnecessary-pipe-chain": "off", + "effecttsgo/unnecessary-typeof-type": "off", + "effecttsgo/unsafe-effect-type-assertion": "off" + } } ] } diff --git a/AGENTS.md b/AGENTS.md index 3afcece062..9babc8af9e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -35,8 +35,11 @@ all TypeScript runtime code in Effect. Promise-returning APIs are allowed only a for consumers that do not use Effect. The skill is authoritative for Effect coding practices when repository instructions conflict. -Effect linting uses oxlint via `.oxlintrc.effect.json`; run `pnpm lint:effect:check` or -`pnpm lint:effect:fix` from the repository root. +Effect linting is part of the repo lint (`.oxlintrc.json` extends the Effect oxlint preset); run +`pnpm lint:check` or `pnpm lint:fix` from the repository root; `lint:fix` also applies suggestion +fixes, so review its diff. Its last override turns the Effect rules off for files kept outside the +Effect lint: `.github/scripts`, the npm launcher shim, compute stack templates and generated code. +When an `@effect/tsgo` bump adds, removes or renames a rule, update that override. Instrument by default: when you add or change code that does I/O (HTTP, SQL, filesystem beyond a small read, child processes, containers, waits) or millisecond-scale work, give it a named span diff --git a/apps/cli-e2e/AGENTS.md b/apps/cli-e2e/AGENTS.md index 0b75112979..0ee5456bfc 100644 --- a/apps/cli-e2e/AGENTS.md +++ b/apps/cli-e2e/AGENTS.md @@ -80,7 +80,7 @@ The `workspace` fixture is what triggers scenario setup — if you destructure ` Always return `runE2e(...)` from the body: Vitest does not run a returned Effect, so the harness fails a test that requests `run` or `runNoProjectId` and passes without executing it. A custom runner added with `testBehaviour.extend` gets the same check by wrapping its CLI Effect in `runGuard.track(...)`, as `stackRun` does. Pass the test's `signal` so a Vitest timeout interrupts the body. -This workspace is under the Effect lint (`.oxlintrc.effect.json`, warnings are errors), which rejects `async` test bodies, global `fetch`, `process.env` and `JSON.parse` in Effect code. Decode JSON stdout with `decodeJsonOutput(schema)(result.stdout)`, which reports a stdout excerpt on failure. +This workspace is under the Effect lint (`.oxlintrc.json`, warnings are errors), which rejects `async` test bodies, global `fetch`, `process.env` and `JSON.parse` in Effect code. Decode JSON stdout with `decodeJsonOutput(schema)(result.stdout)`, which reports a stdout excerpt on failure. Available fixtures: diff --git a/apps/cli/src/command-internal/db-bootstrap/local-db-running.ts b/apps/cli/src/command-internal/db-bootstrap/local-db-running.ts index df89a0d462..312776a23e 100644 --- a/apps/cli/src/command-internal/db-bootstrap/local-db-running.ts +++ b/apps/cli/src/command-internal/db-bootstrap/local-db-running.ts @@ -390,16 +390,14 @@ export function localDbState( if (!isContainerNotFoundMessage(stderr)) { // Surface the Docker install hint instead of raw stderr when the daemon is unreachable. const daemonDown = isDockerDaemonUnreachable(stderr); - return yield* Effect.fail( - new LocalDbRunningError({ - message: - stderr.length > 0 - ? `failed to inspect service: ${stderr}` - : "failed to inspect service", - daemonDown, - ...(daemonDown ? { suggestion: SUGGEST_DOCKER_INSTALL } : {}), - }), - ); + return yield* new LocalDbRunningError({ + message: + stderr.length > 0 + ? `failed to inspect service: ${stderr}` + : "failed to inspect service", + daemonDown, + ...(daemonDown ? { suggestion: SUGGEST_DOCKER_INSTALL } : {}), + }); } return { exists: false } satisfies LocalDbState; }), diff --git a/package.json b/package.json index e0b88a787c..71200204c3 100644 --- a/package.json +++ b/package.json @@ -15,12 +15,10 @@ "test:integration": "pnpm exec turbo run test:integration:run --continue=always --", "test:e2e": "pnpm exec turbo run supabase#build && pnpm exec turbo run test:e2e:run --only --concurrency=1 --continue=always --", "test:vitest": "bun --bun vitest run --project '!*e2e*' --project '!*live*'", - "check:all": "pnpm exec turbo run types:check lint:check fmt:check knip:check lint:effect:check lint:actions:check", - "fix:all": "pnpm exec turbo run lint:fix fmt:fix knip:fix && pnpm run lint:effect:fix", + "check:all": "pnpm exec turbo run types:check lint:check fmt:check knip:check lint:actions:check", + "fix:all": "pnpm exec turbo run knip:fix && pnpm exec turbo run lint:fix && pnpm exec turbo run fmt:fix", "lint:check": "oxlint --config .oxlintrc.json", - "lint:fix": "oxlint --config .oxlintrc.json --fix", - "lint:effect:check": "oxlint --config .oxlintrc.effect.json", - "lint:effect:fix": "oxlint --config .oxlintrc.effect.json --fix --fix-suggestions", + "lint:fix": "oxlint --config .oxlintrc.json --fix --fix-suggestions", "lint:actions:check": "jactionlint", "fmt:check": "oxfmt --config .oxfmtrc.json --check", "fmt:fix": "oxfmt --config .oxfmtrc.json", diff --git a/turbo.json b/turbo.json index 2cdbbc3bee..2d10e7b252 100644 --- a/turbo.json +++ b/turbo.json @@ -17,12 +17,6 @@ "lint:fix": { "cache": false }, - "lint:effect:check": { - "cache": false - }, - "lint:effect:fix": { - "cache": false - }, "lint:actions:check": { "cache": false }, From db60502c6bae758712c5ec51de0dc8c132f6c2b1 Mon Sep 17 00:00:00 2001 From: 7ttp <117663341+7ttp@users.noreply.github.com> Date: Fri, 30 Oct 2026 23:35:23 +0530 Subject: [PATCH 2/6] chore(repo): ignore non effect files in the repo lint --- .oxlintrc.json | 115 +++---------------------------------------------- AGENTS.md | 5 +-- package.json | 2 +- turbo.json | 6 ++- 4 files changed, 14 insertions(+), 114 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index a7fee63d6c..1f9a7351e8 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -9,6 +9,12 @@ ".repos", // Generated by `supabase gen types` (see `gen:feedback-types` in apps/cli). "apps/cli/src/shared/feedback/database.types.ts", + "packages/api/src/generated/contracts.ts", + // Standalone node shim built with `bun build --target node`; it cannot import effect. + "apps/cli/src/shared/cli/bin.ts", + // Templates that run inside the user's deployed container, not in the CLI process. + "apps/cli/src/shared/compute/stacks/**", + ".github/scripts", "apps/cli-e2e/fixtures", "**/testdata", "**/dist", @@ -52,11 +58,7 @@ "excludeFiles": [ "apps/cli/src/**/*.test.ts", "apps/cli/src/shared/config/cli-config-provider.layer.ts", - "apps/cli/src/shared/config/cli-config-env.ts", - // Standalone node shim built with `bun build --target node`; it cannot import effect. - "apps/cli/src/shared/cli/bin.ts", - // Templates that run inside the user's deployed container, not in the CLI process. - "apps/cli/src/shared/compute/stacks/**" + "apps/cli/src/shared/config/cli-config-env.ts" ], "rules": { "no-restricted-properties": [ @@ -79,15 +81,6 @@ ] } }, - { - // `.github/scripts` is the only `bun:test` consumer; `@types/bun`'s shared `Matchers` - // types `.rejects.toThrow(...)` as returning `void`, even though it must be awaited at - // runtime. Removing the `await` would make the assertion racy. - "files": [".github/scripts/**"], - "rules": { - "typescript/await-thenable": "off" - } - }, { // The namespace owns paths, leases, artifact pins, and port reservations; everywhere // in the repo, outside `src/namespace/**` itself, reaches that state through @@ -119,8 +112,6 @@ "apps/cli/src/**/*.test.ts", "apps/cli/src/shared/config/cli-config-provider.layer.ts", "apps/cli/src/shared/config/cli-config-env.ts", - "apps/cli/src/shared/cli/bin.ts", - "apps/cli/src/shared/compute/stacks/**", "apps/cli/src/cli/complete.ts", "apps/cli/src/command-internal/colors.ts", "apps/cli/src/command-internal/db-config.parse.ts", @@ -581,98 +572,6 @@ "rules": { "effecttsgo/node-builtin-import": "off" } - }, - { - "files": [ - ".github/scripts/**", - "apps/cli/src/shared/cli/bin.ts", - "apps/cli/src/shared/compute/stacks/**", - "packages/api/src/generated/contracts.ts" - ], - "rules": { - "effecttsgo/abort-controller-in-effect": "off", - "effecttsgo/any-unknown-in-error-context": "off", - "effecttsgo/async-function": "off", - "effecttsgo/catch-all-to-map-error": "off", - "effecttsgo/catch-chain-to-first-success-of": "off", - "effecttsgo/catch-tag-to-catch-reason": "off", - "effecttsgo/catch-to-ignore": "off", - "effecttsgo/catch-to-or-else-succeed": "off", - "effecttsgo/catch-unfailable-effect": "off", - "effecttsgo/class-self-mismatch": "off", - "effecttsgo/crypto-random-uuid": "off", - "effecttsgo/crypto-random-uuid-in-effect": "off", - "effecttsgo/duplicate-package": "off", - "effecttsgo/effect-fn-iife": "off", - "effecttsgo/effect-fn-implicit-any": "off", - "effecttsgo/effect-fn-opportunity": "off", - "effecttsgo/effect-gen-uses-adapter": "off", - "effecttsgo/effect-in-failure": "off", - "effecttsgo/effect-in-void-success": "off", - "effecttsgo/effect-map-flatten": "off", - "effecttsgo/effect-map-void": "off", - "effecttsgo/effect-succeed-with-void": "off", - "effecttsgo/extends-native-error": "off", - "effecttsgo/flat-map-to-map": "off", - "effecttsgo/floating-effect": "off", - "effecttsgo/floating-effect-in-vitest": "off", - "effecttsgo/generic-effect-services": "off", - "effecttsgo/global-console": "off", - "effecttsgo/global-console-in-effect": "off", - "effecttsgo/global-date": "off", - "effecttsgo/global-date-in-effect": "off", - "effecttsgo/global-error-in-effect-catch": "off", - "effecttsgo/global-error-in-effect-failure": "off", - "effecttsgo/global-fetch": "off", - "effecttsgo/global-fetch-in-effect": "off", - "effecttsgo/global-random": "off", - "effecttsgo/global-random-in-effect": "off", - "effecttsgo/global-timers": "off", - "effecttsgo/global-timers-in-effect": "off", - "effecttsgo/instance-of-schema": "off", - "effecttsgo/layer-merge-all-with-dependencies": "off", - "effecttsgo/lazy-effect": "off", - "effecttsgo/lazy-promise-in-effect-sync": "off", - "effecttsgo/leaking-requirements": "off", - "effecttsgo/missing-effect-context": "off", - "effecttsgo/missing-effect-error": "off", - "effecttsgo/missing-layer-context": "off", - "effecttsgo/missing-return-yield-star": "off", - "effecttsgo/missing-star-in-yield-effect-gen": "off", - "effecttsgo/multiple-catch-tag": "off", - "effecttsgo/multiple-effect-provide": "off", - "effecttsgo/new-promise": "off", - "effecttsgo/node-builtin-import": "off", - "effecttsgo/non-object-effect-service-type": "off", - "effecttsgo/outdated-api": "off", - "effecttsgo/overridden-schema-constructor": "off", - "effecttsgo/prefer-schema-over-json": "off", - "effecttsgo/prefer-typed-schema-decoder": "off", - "effecttsgo/prefer-unsafe-constructor": "off", - "effecttsgo/process-env": "off", - "effecttsgo/process-env-in-effect": "off", - "effecttsgo/promise-in-effect-success": "off", - "effecttsgo/redundant-map-error": "off", - "effecttsgo/redundant-or-die": "off", - "effecttsgo/redundant-schema-tag-identifier": "off", - "effecttsgo/return-effect-in-gen": "off", - "effecttsgo/run-effect-inside-effect": "off", - "effecttsgo/schema-literal-non-finite": "off", - "effecttsgo/schema-number": "off", - "effecttsgo/schema-opaque-instance-member": "off", - "effecttsgo/schema-struct-with-tag": "off", - "effecttsgo/schema-sync-in-effect": "off", - "effecttsgo/scope-in-layer-effect": "off", - "effecttsgo/sync-to-succeed": "off", - "effecttsgo/try-catch-in-effect-gen": "off", - "effecttsgo/unknown-in-effect-catch": "off", - "effecttsgo/unnecessary-effect-gen": "off", - "effecttsgo/unnecessary-fail-yieldable-error": "off", - "effecttsgo/unnecessary-pipe": "off", - "effecttsgo/unnecessary-pipe-chain": "off", - "effecttsgo/unnecessary-typeof-type": "off", - "effecttsgo/unsafe-effect-type-assertion": "off" - } } ] } diff --git a/AGENTS.md b/AGENTS.md index 9babc8af9e..b8f448ca8f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -37,9 +37,8 @@ The skill is authoritative for Effect coding practices when repository instructi Effect linting is part of the repo lint (`.oxlintrc.json` extends the Effect oxlint preset); run `pnpm lint:check` or `pnpm lint:fix` from the repository root; `lint:fix` also applies suggestion -fixes, so review its diff. Its last override turns the Effect rules off for files kept outside the -Effect lint: `.github/scripts`, the npm launcher shim, compute stack templates and generated code. -When an `@effect/tsgo` bump adds, removes or renames a rule, update that override. +fixes, so review its diff. `ignorePatterns` keeps `.github/scripts`, the npm launcher shim, compute +stack templates and the generated API contracts and feedback types out of the lint. Instrument by default: when you add or change code that does I/O (HTTP, SQL, filesystem beyond a small read, child processes, containers, waits) or millisecond-scale work, give it a named span diff --git a/package.json b/package.json index 71200204c3..90da749c76 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "test:e2e": "pnpm exec turbo run supabase#build && pnpm exec turbo run test:e2e:run --only --concurrency=1 --continue=always --", "test:vitest": "bun --bun vitest run --project '!*e2e*' --project '!*live*'", "check:all": "pnpm exec turbo run types:check lint:check fmt:check knip:check lint:actions:check", - "fix:all": "pnpm exec turbo run knip:fix && pnpm exec turbo run lint:fix && pnpm exec turbo run fmt:fix", + "fix:all": "pnpm exec turbo run fmt:fix --continue=always", "lint:check": "oxlint --config .oxlintrc.json", "lint:fix": "oxlint --config .oxlintrc.json --fix --fix-suggestions", "lint:actions:check": "jactionlint", diff --git a/turbo.json b/turbo.json index 2d10e7b252..a1b7ea322e 100644 --- a/turbo.json +++ b/turbo.json @@ -15,7 +15,8 @@ "cache": false }, "lint:fix": { - "cache": false + "cache": false, + "dependsOn": ["knip:fix"] }, "lint:actions:check": { "cache": false @@ -24,7 +25,8 @@ "cache": false }, "fmt:fix": { - "cache": false + "cache": false, + "dependsOn": ["lint:fix"] }, "knip:check": { "cache": false From cd6a04f6040ef9a6cb4085999a6c68ceb679f004 Mon Sep 17 00:00:00 2001 From: 7ttp <117663341+7ttp@users.noreply.github.com> Date: Sat, 31 Oct 2026 00:52:14 +0530 Subject: [PATCH 3/6] chore(repo): keep the gen types comment on its own file --- .oxlintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 1f9a7351e8..aabe7a288b 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -7,9 +7,9 @@ }, "ignorePatterns": [ ".repos", + "packages/api/src/generated/contracts.ts", // Generated by `supabase gen types` (see `gen:feedback-types` in apps/cli). "apps/cli/src/shared/feedback/database.types.ts", - "packages/api/src/generated/contracts.ts", // Standalone node shim built with `bun build --target node`; it cannot import effect. "apps/cli/src/shared/cli/bin.ts", // Templates that run inside the user's deployed container, not in the CLI process. From b3b2814e7702b6256ae25b72d798d9ead9e0783f Mon Sep 17 00:00:00 2001 From: 7ttp <117663341+7ttp@users.noreply.github.com> Date: Sat, 31 Oct 2026 02:13:12 +0530 Subject: [PATCH 4/6] nit --- .oxlintrc.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.oxlintrc.json b/.oxlintrc.json index aabe7a288b..500dc922ce 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -6,7 +6,9 @@ "denyWarnings": true }, "ignorePatterns": [ + /* Reference submodules, populated by `repos:install`. */ ".repos", + /* Generated from the OpenAPI spec by `packages/api/scripts/generate.ts`. */ "packages/api/src/generated/contracts.ts", // Generated by `supabase gen types` (see `gen:feedback-types` in apps/cli). "apps/cli/src/shared/feedback/database.types.ts", @@ -14,9 +16,13 @@ "apps/cli/src/shared/cli/bin.ts", // Templates that run inside the user's deployed container, not in the CLI process. "apps/cli/src/shared/compute/stacks/**", + /* Standalone CI automation, not Effect code; `github-scripts-ci.yml` checks and tests it. */ ".github/scripts", + /* Static JSON fixtures served by the e2e replay server. */ "apps/cli-e2e/fixtures", + /* Test fixtures and golden snapshots. */ "**/testdata", + /* Build, coverage and docs output. */ "**/dist", "**/coverage", "**/.next", @@ -568,6 +574,7 @@ } }, { + /* The Docker Engine probe needs `node:http`'s `socketPath` for unix and npipe sockets. */ "files": ["apps/cli/src/command-internal/db-bootstrap/local-db-running.ts"], "rules": { "effecttsgo/node-builtin-import": "off" From 1143e0e4f36e7789e483284e46b44dae6b269b9c Mon Sep 17 00:00:00 2001 From: 7ttp <117663341+7ttp@users.noreply.github.com> Date: Sat, 31 Oct 2026 03:27:52 +0530 Subject: [PATCH 5/6] another nudge --- .oxlintrc.json | 6 +++--- AGENTS.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 500dc922ce..f48e4f2a84 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -12,11 +12,11 @@ "packages/api/src/generated/contracts.ts", // Generated by `supabase gen types` (see `gen:feedback-types` in apps/cli). "apps/cli/src/shared/feedback/database.types.ts", - // Standalone node shim built with `bun build --target node`; it cannot import effect. + /* Standalone Node shim built with `bun build --target node` that does not use Effect. */ "apps/cli/src/shared/cli/bin.ts", // Templates that run inside the user's deployed container, not in the CLI process. - "apps/cli/src/shared/compute/stacks/**", - /* Standalone CI automation, not Effect code; `github-scripts-ci.yml` checks and tests it. */ + "apps/cli/src/shared/compute/stacks", + /* Standalone CI automation, not Effect code. `github-scripts-ci.yml` type-checks and tests it. */ ".github/scripts", /* Static JSON fixtures served by the e2e replay server. */ "apps/cli-e2e/fixtures", diff --git a/AGENTS.md b/AGENTS.md index b8f448ca8f..ad5787f493 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,7 +14,7 @@ Bun monorepo with workspaces under `apps/` and `packages/`. `pnpm` is the packag Use an existing TypeScript/Bun workspace, especially `packages/api`, as the package-structure reference. Published `apps/cli` and `packages/config` are not private; `apps/docs` and -`packages/cli-*` have their own shapes. Generic lint, format, and unused-code tooling is +`packages/cli-*` have their own shapes. Lint, format, and unused-code tooling is root-owned. ### Config Naming Vocabulary @@ -69,9 +69,9 @@ Keep the local feedback loop fast; full CI runs for ready PRs targeting `develop Use `pnpm test` only when its scope fits the change; the CLI's aggregate script includes full E2E, so use `pnpm run test:unit` and `pnpm run test:integration` with affected test files locally. When repo-wide validation is warranted, use root `pnpm check:all` or `pnpm fix:all`. These are the -repo-wide quality entrypoints: `check:all` runs generic and Effect lint, format, knip, type, and +repo-wide quality entrypoints: `check:all` runs lint, format, knip, type, and GitHub Actions workflow checks (jactionlint and shellcheck, installed by mise); `fix:all` applies -generic and Effect lint, format, and knip fixes. Do not use production `as` casts to silence type +lint, format, and knip fixes. Do not use production `as` casts to silence type errors. Use root Turbo entrypoints for live and auxiliary workflows: From 3693773472a83364525beefdd80c0848fc28d6df Mon Sep 17 00:00:00 2001 From: 7ttp <117663341+7ttp@users.noreply.github.com> Date: Sun, 1 Nov 2026 23:00:01 +0530 Subject: [PATCH 6/6] fix(cli): suggestions --- package.json | 2 +- turbo.json | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 90da749c76..71200204c3 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "test:e2e": "pnpm exec turbo run supabase#build && pnpm exec turbo run test:e2e:run --only --concurrency=1 --continue=always --", "test:vitest": "bun --bun vitest run --project '!*e2e*' --project '!*live*'", "check:all": "pnpm exec turbo run types:check lint:check fmt:check knip:check lint:actions:check", - "fix:all": "pnpm exec turbo run fmt:fix --continue=always", + "fix:all": "pnpm exec turbo run knip:fix && pnpm exec turbo run lint:fix && pnpm exec turbo run fmt:fix", "lint:check": "oxlint --config .oxlintrc.json", "lint:fix": "oxlint --config .oxlintrc.json --fix --fix-suggestions", "lint:actions:check": "jactionlint", diff --git a/turbo.json b/turbo.json index a1b7ea322e..2d10e7b252 100644 --- a/turbo.json +++ b/turbo.json @@ -15,8 +15,7 @@ "cache": false }, "lint:fix": { - "cache": false, - "dependsOn": ["knip:fix"] + "cache": false }, "lint:actions:check": { "cache": false @@ -25,8 +24,7 @@ "cache": false }, "fmt:fix": { - "cache": false, - "dependsOn": ["lint:fix"] + "cache": false }, "knip:check": { "cache": false