Skip to content

chore: enable Effect linting across monorepo - #6304

Open
jgoux wants to merge 7 commits into
feat/remote-stack-control-planefrom
chore/effect-linter
Open

chore: enable Effect linting across monorepo#6304
jgoux wants to merge 7 commits into
feat/remote-stack-control-planefrom
chore/effect-linter

Conversation

@jgoux

@jgoux jgoux commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add the Effect TypeScript diagnostics integration to Oxlint using the recommended rule set
  • expose linting consistently through inferred Nx targets across the TypeScript workspaces
  • migrate existing runtime and test code so repository-wide Effect linting is clean
  • keep native Node, Bun, subprocess, test, and foreign-library boundaries explicit with narrow rule-specific suppressions
  • preserve behavior uncovered during the migration, including environment propagation, subprocess cleanup, telemetry draining, config path handling, and generated output formatting

Reviewer context

This PR is stacked on #6303 and intentionally accepts its Effect RPC stack transport as the baseline. Merge #6303 first, then this PR. The stack changes here are lint remediation against that RPC design; they do not restore the prior transport implementation.

Enabling the recommended rules surfaced diagnostics across every TypeScript workspace, so this is intentionally a broad migration. Cleanup was limited to concrete ownership and lifecycle improvements; larger service-threading proposals without a demonstrated runtime benefit were rejected.

@jgoux
jgoux marked this pull request as ready for review August 23, 2026 08:31
@jgoux
jgoux requested a review from a team as a code owner August 23, 2026 08:31
@github-actions

github-actions Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

Supabase CLI preview

npx --yes https://pkg.pr.new/supabase/cli/supabase@6edaa03437c8b42aa41cf58f32e06474205f2a52

Preview package for commit 6edaa03.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: edcae5572d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/cli-e2e/tests/live-setup.ts Outdated
Comment thread packages/stack/src/services/vector.ts Outdated
Comment thread apps/cli-e2e/src/server/replay-server.ts Outdated
Comment thread apps/cli/src/legacy/shared/legacy-hostname.ts
Comment thread packages/stack/src/services/edge-runtime-main.ts Outdated
Comment thread apps/cli/src/shared/cli/bin.ts Outdated
Comment thread packages/stack/src/PortAllocator.ts Outdated
Comment thread packages/process-compose/src/supervisor-runtime.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e49fe7db95

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/cli/src/shared/functions/serve.main.ts Outdated
Comment thread apps/cli/src/shared/functions/serve.main.ts Outdated
Comment thread apps/cli/src/legacy/shared/legacy-upgrade-notice.ts Outdated
Comment thread apps/cli/src/legacy/shared/legacy-db-config.toml-read.ts
Comment thread apps/cli/src/legacy/shared/legacy-db-config.layer.ts Outdated
Comment thread packages/stack/src/services/docker-cleanup.ts Outdated
Comment thread apps/cli/src/legacy/commands/storage/cp/cp.handler.ts Outdated
Comment thread apps/cli/src/shared/functions/serve.main.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: fa1b421c7f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/cli/src/legacy/shared/legacy-local-project-context.ts Outdated
Comment thread packages/stack/src/functions.ts Outdated
Comment thread packages/stack/src/functions.ts Outdated
Comment thread apps/cli/src/shared/functions/deploy.ts Outdated
Comment thread packages/stack/src/HttpTransportClient.ts Outdated
Comment thread packages/stack/src/PortAllocator.ts Outdated
Comment thread apps/cli-e2e/src/server/replay-server.ts Outdated
@chatgpt-codex-connector

Copy link
Copy Markdown

💡 Codex Review

const response = yield* client
.execute(HttpClientRequest.get(url).pipe(HttpClientRequest.acceptJson))
.pipe(Effect.timeout(Duration.millis(remoteJwksTimeoutMs)), Effect.mapError(toRemoteJwksError));

P2 Badge Keep the JWKS timeout around body decoding

When an OIDC discovery or JWKS endpoint returns headers but stalls while sending its JSON body, the 10-second timeout has already completed because it wraps only client.execute; response.json can therefore wait indefinitely and hang commands that resolve third-party auth keys. The previous AbortSignal.timeout remained attached while the body was consumed, so wrap the complete execute-and-decode operation in the deadline.

AGENTS.md reference: apps/cli/AGENTS.md:L52-L53


const bitbucketCloneDir = yield* Config.option(Config.string("BITBUCKET_CLONE_DIR"));
if (Option.isSome(bitbucketCloneDir)) {
return;

P2 Badge Preserve project dotenv Bitbucket detection

When BITBUCKET_CLONE_DIR is supplied only by a project .env, legacyLoadLocalProjectContext still places it in projectEnvValues but no longer copies it into process.env, while this lookup consults only the ambient Config provider. Consequently deploy, download, and serve try to create the named Deno-cache volume in Bitbucket Pipelines, where that operation is rejected; thread the resolved project environment into this decision instead.

AGENTS.md reference: apps/cli/AGENTS.md:L52-L53


const payload = yield* Effect.tryPromise({
try: () => response.json(),

P2 Badge Keep DNS body reads tied to the abort signal

When the DNS-over-HTTPS server or an intervening proxy returns status 200 and then stalls the response body, this second tryPromise is no longer associated with the signal passed to fetch. The outer timeout can fail the Effect, but it cannot abort the outstanding body read/socket, so a fallback database command may retain the request and fail to terminate cleanly; keep fetch and JSON consumption under one signal-owning boundary.

AGENTS.md reference: AGENTS.md:L68-L72


const randomId = yield* Random.nextInt;
return CommandRuntime.of({
commandPath: [...commandPath],
commandRunId: `cli-${randomId}`,

P2 Badge Retain UUID entropy for command run IDs

At fleet-scale CLI volume, replacing the UUID with one signed 32-bit Random.nextInt value makes unrelated invocations collide frequently enough to merge telemetry correlation (the same ID is also forwarded in command-run API headers). Preserve the prior UUID-sized identifier, preferably through the injected Effect Crypto service, rather than reducing the identifier space to roughly 4.3 billion values.

AGENTS.md reference: apps/cli/AGENTS.md:L52-L53


Schema.decodeUnknownEffect(Schema.Array(LegacyJwkSchema))(remoteKeysUnknown).pipe(

P2 Badge Preserve extension fields on remote JWKs

When a third-party issuer publishes a valid JWK that relies on members outside this local signing-key schema, such as an RSA key represented through x5c, decoding the fetched keys as LegacyJwkSchema strips those members before the JWKS document is re-encoded. The local stack then publishes an unusable key and third-party JWT verification fails; remote JWK objects should retain their complete fetched representation rather than being normalized through the narrower local-key type.

AGENTS.md reference: apps/cli/AGENTS.md:L52-L53


Effect.runForkWith(context)(exportSpanToNdjson(span, telemetryRuntime.tracesDir));

P2 Badge Drain NDJSON exports before command shutdown

When a short-lived command ends immediately after its final span, onSpanEnd now launches the filesystem append as an unowned runtime fiber and neither retains nor awaits it. The previous synchronous append completed before span termination returned, whereas the process can now exit with the last telemetry record missing or partially unwritten; own these export fibers and drain them during tracing-layer teardown.

AGENTS.md reference: AGENTS.md:L115-L117


.pipe(Effect.timeout("500 millis"));

P2 Badge Extend Bun's control timeout through JSON decoding

When a stale daemon or another listener on a deterministic control port returns 200 headers but never completes its owner-status body, this 500 ms timeout ends as soon as execute yields the response and the subsequent response.json waits forever. Managed discovery can therefore hang instead of rejecting the candidate and continuing recovery; keep the body decode inside the same timeout, as the previous signal-backed fetch did.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jgoux

jgoux commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

Automated review round 3 triage (final bounded pass):

Fixed in 435a2d3:

  • preserve all ambient SUPABASE_* overrides without config.toml
  • skip symlink entries before recursive function asset traversal
  • restore the 30-second finite daemon-request timeout while preserving caller cancellation and long-lived streams

Confirmed but deferred from this PR after reaching the automated-review loop cap:

  • interruption-window and stale-directory cleanup for temporary function runtime config artifacts (cleanup reliability; no normal successful-path corruption)
  • custom Clock propagation when aging malformed port claims (production default clock behavior is unchanged)
  • draining detached replay recording work during stop (the fire-and-forget lifetime predates this PR; the async write makes the record-mode durability risk more visible)

These deferrals are recorded here for human review rather than silently dropped. The selected fixes have focused regression coverage and the affected CLI/stack quality plus unit/integration gates pass locally. No further automated fix rounds are planned; this is ready for human review.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 435a2d36f3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/cli/src/legacy/shared/legacy-project-environment.ts Outdated
Comment thread apps/cli/src/legacy/shared/legacy-local-config-values.ts
Comment thread apps/cli/src/shared/auth/jwks.ts Outdated
Comment thread packages/config/src/node.ts Outdated
@jgoux

jgoux commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

Final automated-review pass, including #6304 (comment), is addressed by 8bb6933.\n\nI validated each report against the actual Effect execution path and the previous Go behavior before changing code. All seven items in that report were reproducible or represented concrete compatibility regressions:\n\n- JWKS timeout now covers request execution, status validation, and JSON body decoding.\n- Resolved project environment values, including BITBUCKET_CLONE_DIR, now reach both function volume creation and bind-mount decisions in deploy, download, serve, and start.\n- DNS fetch and body decoding share one cancellation signal.\n- Command correlation IDs use the injected Crypto service for UUIDv4 values.\n- Remote JWK JSON is preserved losslessly, matching the Go RawMessage behavior; local signing keys remain strictly validated.\n- NDJSON export fibers are scoped, owned, and drained before teardown.\n- Bun control-request timeout now covers JSON body decoding too.\n\nThe four newer inline findings are also addressed: empty SUPABASE_ENV defaults to development, known environment-override validation failures stay in the typed error channel, the duplicate JWKS timeout report is covered by the same fix, and Node/Bun config facades preserve explicit empty ambient values.\n\nI considered pushback explicitly. None was warranted after reproduction: the two initially ambiguous cases—remote JWK extension fields and empty ambient environment values—were confirmed by the Go source and a direct config-loader reproduction. The fixes remain narrow; no compatibility shim or speculative abstraction was added.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8bb69332f2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/stack/src/platform-node.ts Outdated
Comment thread apps/cli/src/shared/functions/deploy.ts
Comment thread packages/stack/src/ApiProxy.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 757ca02d82

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/cli/src/shared/functions/serve.ts Outdated
Comment thread apps/cli/src/shared/functions/serve.ts Outdated
Comment thread apps/cli/src/shared/functions/serve.ts
Comment thread apps/cli/src/legacy/commands/sso/sso.format.ts Outdated
Comment thread apps/cli/src/legacy/commands/db/schema/declarative/declarative.smart-target.ts Outdated
@jgoux

jgoux commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

Final bounded automated-review pass is complete at cbd93af.

Accepted and fixed:

  • use public Effect predicates for optional env-file NotFound recovery
  • remove deleted-implementation framing from the stable TypeScript shell
  • prefix the shared legacy SSO formatter export
  • restore full libpq runtime resolution for interactive declarative custom targets, including service files, pgpass, OS defaults, and explicit URL/keyword-DSN file paths

Rejected after reproduction/architecture triage:

  • propagating Path through the functions serve helper graph. The CLI is Bun-only at this boundary, BunPath is the pure Node path implementation, no alternate supplied Path is reachable, and no behavioral defect was demonstrated. The proposed change would add broad indirection for no runtime benefit.

The earlier top-level review at issuecomment-5386062423 was addressed separately in 8bb6933 and documented in issuecomment-5387281854. All review threads are resolved, the local no-cache quality/unit/integration matrix passes, and the fresh GitHub code-quality, unit/integration, e2e, and preview workflows are green.

We have reached the automated-review loop cap. Requesting human review; further automated findings should be triaged as signals rather than applied automatically.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cbd93af8a3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/stack/src/cleanup.ts Outdated
Comment thread apps/cli/src/shared/telemetry/exporters/ndjson.ts Outdated
@jgoux
jgoux force-pushed the chore/effect-linter branch from cbd93af to 214426e Compare August 23, 2026 22:29
@jgoux
jgoux changed the base branch from develop to feat/remote-stack-control-plane August 23, 2026 22:29
Comment thread apps/cli/scripts/propose-release-notes.ts
@chatgpt-codex-connector

Copy link
Copy Markdown

💡 Codex Review

error.reason._tag === "NotFound"

P1 Badge Narrow missing-file errors with Predicate.isTagged

Replace the direct error.reason._tag inspection with Predicate.isTagged(error.reason, "NotFound"). This recovery path runs whenever an optional project dotenv file is absent, and directly inspecting Effect's runtime representation violates the repository requirement to use supported narrowing helpers, coupling normal config loading to internal representation details.

AGENTS.md reference: AGENTS.md:L169-L175


return yield* first._tag === "LegacyUnlinkTempRemovalError"

P1 Badge Narrow the combined unlink error with Predicate.isTagged

Replace the direct first._tag check with Predicate.isTagged(first, "LegacyUnlinkTempRemovalError"). When both unlink cleanup operations fail, this branch chooses the resulting domain error by inspecting its runtime representation, which repository guidance explicitly prohibits for narrowing tagged domain variants.

AGENTS.md reference: AGENTS.md:L169-L175


expect(exit._tag).toBe("Failure");
if (exit._tag === "Failure") {

P1 Badge Assert Exit variants through Exit.isFailure

Use Exit.isFailure(exit) for both this assertion and the following narrowing instead of reading exit._tag. The repository explicitly requires tests to use public Effect helpers rather than inspecting runtime representations, so this newly added failure-path test should follow the supported Exit API.

AGENTS.md reference: AGENTS.md:L169-L176


type:
event._tag === "Create" ? "create" : event._tag === "Remove" ? "delete" : "update",

P1 Badge Match filesystem watch events exhaustively

Replace these direct event._tag checks and the fallback-to-update ternary with an exhaustive Match over the filesystem watch-event variants. Besides inspecting Effect's runtime representation directly, the current fallback silently classifies any future event variant as an update instead of producing the required type error at this behaviorally relevant event handler.

AGENTS.md reference: AGENTS.md:L169-L178


Effect.catchCause((cause) =>
Effect.all([
SubscriptionRef.set(errorRef, Cause.pretty(cause)),
SubscriptionRef.set(phaseRef, "failed"),
]).pipe(Effect.asVoid),

P1 Badge Preserve interruption when the state stream shuts down

Handle only the expected stream failure here and return interruption or defects unchanged with Effect.failCause. During normal dashboard-layer teardown, forkScoped interrupts this stream, but this unrestricted catchCause converts that interruption into success after setting the dashboard phase to failed, so a clean shutdown can briefly publish a false failure and the fiber loses its interruption semantics.

AGENTS.md reference: AGENTS.md:L157-L165

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@jgoux jgoux added the run-ci Run full develop CI (tests + preview pkgs) on drafts and non-develop PRs. label Aug 23, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2edae15c6c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/cli/scripts/build.ts Outdated
Comment thread apps/cli/src/legacy/commands/start/lib/legacy-env-or-default.ts
@jgoux

jgoux commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

Automated P1 cleanup pass is complete in a7c282d. I accepted the five findings in issuecomment-5388858414 after checking their actual control-flow impact: both missing-file paths and combined unlink errors now use supported tagged predicates; the credentials tests use Exit helpers throughout; filesystem watch events are matched exhaustively; and dashboard state catches only typed stream failures so interruption and defects retain their semantics. The two newer inline regressions are also fixed: compiled builds restore their immutable build ID define, and injected project environment capture preserves the established unprefixed Kong and Vector overrides.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a7c282d0b3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/cli/src/shared/runtime/config-environment.ts Outdated
Comment thread apps/cli/src/shared/telemetry/posthog-client.unit.test.ts Outdated
Comment thread apps/cli/src/shared/output/output.layer.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d12a47a5f6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/config/src/io.ts
Comment thread apps/cli-e2e/src/server/replay-server.ts
Comment thread apps/cli/src/legacy/shared/legacy-hostname.ts Outdated

@avallete avallete left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed the unique delta vs feat/remote-stack-control-plane (not the #6303 RPC transport). Lint wiring looks right, and most remediations are careful. Two things still matter before this can land.

env() interpolation lost ambient shell values. Effect loadProjectConfig no longer defaults to process.env when projectEnv is omitted. Call sites that were not updated — next start/status/functions dev/branches switch, config push, gen signing-key/bearer-jwt, plus functions-dev-config.ts switching to baseEnv: {} — now ignore shell/CI overrides. The test named “falls back to ambient process.env when .env is missing” was rewritten to inject projectEnv, so it no longer locks the old contract. Thread already-collected env (ProjectContext.projectEnv, collectConfigEnvironment) into those callers; do not put process.env back in the config core.

Branch does not merge onto current #6303. Conflicts in build.ts, version.ts, switch.integration.test.ts, build-identity.integration.test.ts (modify/delete), RemoteStack.ts, SupervisorReplacement.ts, supervisor.ts, and supervisor-child.ts. These are shared-file overlap with the parent, not lint-only drift.

Record-mode replay-server writes are also still racy across fixture keys and undrained on stop(); default replay CI is fine.

Parked: SSO metadata timeout-through-body (same shape on the parent), functions temp-dir cleanup, PortAllocator Date.now() staleness, and the rejected encodeUnknownSync / Path runSync items.

Comment thread apps/cli/src/next/commands/functions/dev/functions-dev-config.ts Outdated
Comment thread apps/cli-e2e/src/server/replay-server.ts
Comment thread apps/cli/src/legacy/commands/gen/gen.signing-keys-config.ts
Comment thread packages/config/src/io.ts
Comment thread apps/cli/src/legacy/commands/config/push/push.handler.ts
@jgoux
jgoux force-pushed the chore/effect-linter branch from d12a47a to 49f8b22 Compare August 24, 2026 15:58

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6edaa03437

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/config/src/io.ts
Comment on lines 762 to 764
(yield* loadProjectEnvironment({
cwd: projectRoot,
baseEnv: process.env,
search: options?.search,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restore ambient environment in default config loads

When a consumer calls the public Node or Bun loadProjectConfig facade without projectEnv, a shell-only variable referenced by env(...) is no longer available here: both facades still call store.load directly, so numeric fields can fail decoding and string fields retain the literal reference. Fresh evidence after the earlier env-propagation comments is that the final facades—and direct callers such as gen types—still bypass the environment-materializing path; collect the ambient environment at those composition boundaries and pass it as projectEnv.

AGENTS.md reference: AGENTS.md:L101-L108

Useful? React with 👍 / 👎.

Comment on lines +57 to +60
const own = node._tag === "Value" || node.value === undefined ? [] : [entry(node.value)];
if (node._tag === "Value") return [entry(node.value)];
const children =
node._tag === "Record"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Match ConfigProvider nodes with public exhaustive helpers

Replace these direct node._tag branches with Match.valueTags or another public exhaustive matcher. This newly added release-note environment collector knows the complete ConfigProvider node union statically, so inspecting its runtime representation and treating every non-Value/non-Record node as an Array violates the repository's Effect invariant and makes the maintenance script silently depend on internal representation details.

AGENTS.md reference: AGENTS.md:L169-L175

Useful? React with 👍 / 👎.

@@ -1,12 +1,8 @@
import { DateTime } from "effect";
import type { Tracer } from "effect";

function formatTimestamp(ms: number): string {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve local time in debug span timestamps

On hosts outside UTC, DateTime.makeUnsafe(ms) creates a UTC value, so taking the time portion of its ISO representation shifts every telemetry debug timestamp by the host's offset. The previous formatter deliberately used Date#getHours/getMinutes/getSeconds, which displayed local wall-clock time; retain that behavior or convert the instant to the local zone before formatting.

AGENTS.md reference: apps/cli/AGENTS.md:L52-L53

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

run-ci Run full develop CI (tests + preview pkgs) on drafts and non-develop PRs.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants