6 row properties on SelectOptionSchema in packages/spec/src/data/field.zod.ts render column headers from raw property keys.
The fence on this file has DROPPED. It was held by #17477, which landed — measured on origin/main 76ddab772f: git grep -c 'COLUMN_CONSTRAINT_FLAT_KEYS' -- packages/spec/src/data/field.zod.ts reads 5.
⭐ One schema, two ledger carriers: field:options and object:fields.options both resolve to the same SelectOptionSchema. Titling it once should clear BOTH ledger entries — verify that it does rather than assuming it, and delete both entries in the same change.
Smallest of the three follow-ups; a reasonable first slice.
Part of #17232. The mechanism that makes this measurable is packages/spec/src/kernel/repeater-item-titles.test.ts — an exact, shrink-only ledger: a carrier absent from the ledger must be fully titled (a new untitled repeater reds on arrival), and a carrier present in it must still be untitled (a paid debt must be DELETED from the ledger). So the work here is: add .meta({ title }) to each row property, then remove this carrier's ledger entry. ⛔ Do not weaken the ledger to make it pass.
Titles are hard-coded English by design, not a gap. packages/spec/src/system/translation.zod.ts states it: a row property is rendered from items.properties[k].title, and resolveMetadataFormSchemaTitles overlays the locale bundle on top of that node. The English default has to live on the schema.
⚠️ Anchor by CONTENT, not line number — this area is moving daily.
⚠️ Known trap, found by the pin itself: a .meta({ title }) on a schema that zod hoists into $defs is emitted as a sibling of the $ref — {"title":"…","$ref":"#/$defs/__schema0"}. Read the property node first, as Studio does; deref'ing first reports genuinely-titled properties as untitled.
⛔ Ungraded — triage sets type and priority. Filed by the domain:spec execution seat 2026-09-10T18:04Z.
Generated by Claude Code
6 row properties on
SelectOptionSchemainpackages/spec/src/data/field.zod.tsrender column headers from raw property keys.The fence on this file has DROPPED. It was held by #17477, which landed — measured on
origin/main76ddab772f:git grep -c 'COLUMN_CONSTRAINT_FLAT_KEYS' -- packages/spec/src/data/field.zod.tsreads 5.⭐ One schema, two ledger carriers:
field:optionsandobject:fields.optionsboth resolve to the sameSelectOptionSchema. Titling it once should clear BOTH ledger entries — verify that it does rather than assuming it, and delete both entries in the same change.Smallest of the three follow-ups; a reasonable first slice.
Part of #17232. The mechanism that makes this measurable is
packages/spec/src/kernel/repeater-item-titles.test.ts— an exact, shrink-only ledger: a carrier absent from the ledger must be fully titled (a new untitled repeater reds on arrival), and a carrier present in it must still be untitled (a paid debt must be DELETED from the ledger). So the work here is: add.meta({ title })to each row property, then remove this carrier's ledger entry. ⛔ Do not weaken the ledger to make it pass.Titles are hard-coded English by design, not a gap.
packages/spec/src/system/translation.zod.tsstates it: a row property is rendered fromitems.properties[k].title, andresolveMetadataFormSchemaTitlesoverlays the locale bundle on top of that node. The English default has to live on the schema..meta({ title })on a schema that zod hoists into$defsis emitted as a sibling of the$ref—{"title":"…","$ref":"#/$defs/__schema0"}. Read the property node first, as Studio does; deref'ing first reports genuinely-titled properties as untitled.⛔ Ungraded — triage sets type and priority. Filed by the
domain:specexecution seat 2026-09-10T18:04Z.Generated by Claude Code