Filed by the domain:spec PM seat, session_01LvwGppdonww4zGLWZo5rho, from the #17852 executing round. ⛔ Unassigned and ungraded — grading is triage's.
AssignmentConfigSchema.assignments at packages/spec/src/automation/builtin-node-config.zod.ts:923 is
z.record(z.string().min(1), AssignmentValueSchema)
keyed by author-named flow VARIABLE names. It is structurally the same trap as ObjectSchema.fields in #17852: a variable named __proto__ is silently dropped from the parsed flow config while the parse reports success.
Why it is a separate card rather than part of #17852
That round was fenced off packages/spec/src/automation/** (held by PR #18688), so this site was reported, not touched. It is filed here so the re-ruling on #17852 can decide explicitly whether its chosen mechanism covers this site too — ⛔ rather than have a future round discover it as a survivor.
The mechanism, measured — and why the obvious fix does not work here either
$ZodRecord's open-key branch, read in zod's own source:
for (const key of Reflect.ownKeys(input)) {
if (key === "__proto__")
continue;
if (!Object.prototype.propertyIsEnumerable.call(input, key))
continue;
let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);
The continue sits above def.keyType._zod.run. ⇒ no key schema can see __proto__ — not .min(1), not a regex, not .refine(), not .superRefine(), not a schema that rejects every string. So tightening this slot's key type does nothing for this name.
⚠️ Measured on the pinned 4.4.3 by the #17852 round and re-read by this seat on 4.6.5 (the only copy on its box) — same skip in both. ⛔ This seat did not re-read 4.4.3's source itself; that half is the round's reading.
What is NOT claimed
Dedupe words
AssignmentConfigSchema · assignments · flow variable name · z.record __proto__ drop · builtin-node-config
Blocked-by: #17852
⛔ 本行由分诊席补写(R+285),与本卡的 pm:blocked 成对落地(SKILL.md:112 / :137);#17852 关闭时由解锁扫描放回。⛔ 立卡席原文未动一字。
Generated by Claude Code
Filed by the
domain:specPM seat,session_01LvwGppdonww4zGLWZo5rho, from the #17852 executing round. ⛔ Unassigned and ungraded — grading is triage's.AssignmentConfigSchema.assignmentsatpackages/spec/src/automation/builtin-node-config.zod.ts:923iskeyed by author-named flow VARIABLE names. It is structurally the same trap as
ObjectSchema.fieldsin #17852: a variable named__proto__is silently dropped from the parsed flow config while the parse reports success.Why it is a separate card rather than part of #17852
That round was fenced off
packages/spec/src/automation/**(held by PR #18688), so this site was reported, not touched. It is filed here so the re-ruling on #17852 can decide explicitly whether its chosen mechanism covers this site too — ⛔ rather than have a future round discover it as a survivor.The mechanism, measured — and why the obvious fix does not work here either
$ZodRecord's open-key branch, read in zod's own source:The
continuesits abovedef.keyType._zod.run. ⇒ no key schema can see__proto__— not.min(1), not a regex, not.refine(), not.superRefine(), not a schema that rejects every string. So tightening this slot's key type does nothing for this name.What is NOT claimed
__proto__. The finding(spec): zod z.record() SILENTLY DROPS a__proto__key from its parse OUTPUT while reporting success — ObjectSchema accepts the document and hands back a different one #17852 census covered record keys in authored metadata acrossobjectstack,examples/andobjectuiand found zero, but it did not enumerate flow variable names specifically, andcloud/hotcrmwere out of that container's repo scope entirely.__proto__key from its parse OUTPUT while reporting success — ObjectSchema accepts the document and hands back a different one #17852 was originally filed as — and finding(spec): zod z.record() SILENTLY DROPS a__proto__key from its parse OUTPUT while reporting success — ObjectSchema accepts the document and hands back a different one #17852's own history is the warning: that card was filed 「LATENT today, not live」 and a later round measured three live production consumers. A zero here needs the same treatment.Dedupe words
AssignmentConfigSchema·assignments· flow variable name ·z.record__proto__drop ·builtin-node-configBlocked-by: #17852
⛔ 本行由分诊席补写(R+285),与本卡的
pm:blocked成对落地(SKILL.md:112/:137);#17852 关闭时由解锁扫描放回。⛔ 立卡席原文未动一字。Generated by Claude Code