chore(core): clean up after ConfigPermission Effect Schema migration (#23749)

This commit is contained in:
Kit Langton
2026-04-21 17:40:54 -04:00
committed by GitHub
parent 0bcf734a67
commit d6dea3f3e0
2 changed files with 3 additions and 15 deletions

View File

@@ -97,7 +97,7 @@ creating a parallel schema source of truth.
## Escape hatches ## Escape hatches
The walker in `@/util/effect-zod` exposes three explicit escape hatches for The walker in `@/util/effect-zod` exposes two explicit escape hatches for
cases the pure-Schema path cannot express. Each one stays in the codebase cases the pure-Schema path cannot express. Each one stays in the codebase
only as long as its upstream or local dependency requires it — inline only as long as its upstream or local dependency requires it — inline
comments document when each can be deleted. comments document when each can be deleted.
@@ -109,19 +109,7 @@ Replaces the entire derivation with a hand-crafted zod schema. Used when:
- the target carries external `$ref` metadata (e.g. - the target carries external `$ref` metadata (e.g.
`config/model-id.ts` points at `https://models.dev/...`) `config/model-id.ts` points at `https://models.dev/...`)
- the target is a zod-only schema that cannot yet be expressed as Schema - the target is a zod-only schema that cannot yet be expressed as Schema
(e.g. `ConfigAgent.Info`, `ConfigPermission.Info`, `Log.Level`) (e.g. `ConfigAgent.Info`, `Log.Level`)
### `ZodPreprocess` annotation
Wraps the derived zod schema with `z.preprocess(fn, inner)`. Used by
`config/permission.ts` to inject `__originalKeys` before parsing, because
`Schema.StructWithRest` canonicalises output (known fields first, catchall
after) and destroys the user's original property order — which permission
rule precedence depends on.
Tracked upstream as `effect:core/wlh553`: "Schema: add preserveInputOrder
(or pre-parse hook) for open structs." Once that lands, `ZodPreprocess` and
the `__originalKeys` hack can both be deleted.
### Local `DeepMutable<T>` in `config/config.ts` ### Local `DeepMutable<T>` in `config/config.ts`

View File

@@ -3,7 +3,7 @@ export * as ConfigAgent from "./agent"
import { Schema } from "effect" import { Schema } from "effect"
import z from "zod" import z from "zod"
import { Bus } from "@/bus" import { Bus } from "@/bus"
import { zod, ZodOverride } from "@/util/effect-zod" import { zod } from "@/util/effect-zod"
import { Log } from "../util" import { Log } from "../util"
import { NamedError } from "@opencode-ai/shared/util/error" import { NamedError } from "@opencode-ai/shared/util/error"
import { Glob } from "@opencode-ai/shared/util/glob" import { Glob } from "@opencode-ai/shared/util/glob"