Filed by the director seat under the objectui#7952 ruling (decision batch #68, 2026-09-07).
Why
zod-mirror-parity.test.ts's WiderThanDeclared ledger sorts keys into a SCHEMA-NODE bucket (the recursion-breaking unknown on schema-node mirrors — an instrument artifact, per #7759, excluded from that card's disposition lane). #7952 measured that the verdict is per key while the fact is per arm: DashboardComponentSchema.widgets is a two-arm union whose second arm is a schema-node slot (artifact, correctly bucketed) and whose first arm is a concrete BaseSchema.extend({ type: z.enum(...) }) node with a real TypeScript gap (the ruled-legal metric-card node parses green and tsc refuses it). One key, two arms; the artifact in one absorbed the divergence in the other. #7759 sorted 27 keys out of its lane on that verdict.
Scope
Acceptance
Refs #7952 (the instance and ruling), #7759 (the lane), objectstack#8593 (the ruling that admits the component-node arm).
Filed by the director seat under the objectui#7952 ruling (decision batch #68, 2026-09-07).
Why
zod-mirror-parity.test.ts'sWiderThanDeclaredledger sorts keys into a SCHEMA-NODE bucket (the recursion-breakingunknownon schema-node mirrors — an instrument artifact, per #7759, excluded from that card's disposition lane). #7952 measured that the verdict is per key while the fact is per arm:DashboardComponentSchema.widgetsis a two-arm union whose second arm is a schema-node slot (artifact, correctly bucketed) and whose first arm is a concreteBaseSchema.extend({ type: z.enum(...) })node with a real TypeScript gap (the ruled-legalmetric-cardnode parses green andtscrefuses it). One key, two arms; the artifact in one absorbed the divergence in the other. #7759 sorted 27 keys out of its lane on that verdict.Scope
DashboardComponentSchema.widgetsis a two-arm union in zod and a one-arm array in TypeScript — the ruled-legalmetric-cardcomponent node parses green andtscrefuses it, and the parity ledger files the key as SCHEMA-NODE #7952 did) — do not fix here.DashboardComponentSchema.widgetsis a two-arm union in zod and a one-arm array in TypeScript — the ruled-legalmetric-cardcomponent node parses green andtscrefuses it, and the parity ledger files the key as SCHEMA-NODE #7952's key as the positive control (a concrete arm must not be hidden by a schema-node sibling).Acceptance
Refs #7952 (the instance and ruling), #7759 (the lane), objectstack#8593 (the ruling that admits the component-node arm).