STET

flux-pr-4861

Zod (TypeScript) · W2 · GPT-5.4

pass_with_warn

Tests passed. 3/3 commands passed. Strength: weak.

69.2% run pass rate
Tier 1
primary equivalencepassedequivalentneeds generated testsweak signal riskcommand source drift
pnpm build
gold passagent pass
find . -name vitest.config.ts -exec sed -i 's/test: {/test: { testTimeout: 30000,/' {} +
gold passagent pass
npx vitest run packages/zod/src/v4/classic/tests/discriminated-unions.test.ts -t "pipes"
gold passagent pass

Partial score: 3/3

Publishable: noWeak signal risk: yesCache: miss

Trajectory

unknown · partial order only

Canonical trajectory missing; showing coarse derived order only.

patch written
Patch captured
#1

Stet captured agent.patch for this trial.

validation
Tests passed
#2
equivalence
Equivalence judgment
#3

equivalent

code review
Code review judgment
#4

unsure

decision
Final decision
#5

pass_with_warn

Quality

equivalence
equivalent
90% confidence
code review
unsure · 55/100
1 finding
footprint
low (0.22)
behavioral
100.0%
cost
$0.37 · 530K

Equivalence Reasoning

stylistic

The agent patch preserves `propValues` through `$ZodPipe` (including both input and output sides), which enables discriminated unions to introspect discriminator values for piped options and keeps branch selection/validation behavior working for transform/preprocess-wrapped members, matching the task intent via a different implementation.

Code Review

correctness: 2/4introduced bug risk: 2/4edge case handling: 2/4maintainability idioms: 3/4

The patch likely fixes the primary pipe/discriminator metadata loss for common transform/preprocess scenarios, but it appears incomplete because missing `propValues` can still trigger an unguarded discriminated-union lookup crash.

1 finding
Discriminated-union option lookup can still crash on missing pipe metadata
major

The patch makes `$ZodPipe._zod.propValues` optional and can return `undefined`, but discriminated-union option extraction still directly indexes `o._zod.propValues[discriminator]`. For options where both pipe sides lack prop metadata, this can throw a TypeError instead of producing the expected invalid-option error path.

packages/zod/src/v4/core/schemas.ts:3429