Skip to content

[finding] Untitled repeater row properties: SelectOptionSchema (6) shared by field.options and object.fields.options — fence dropped, dispatchable now #17506

Description

@os-bill

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions