Skip to content

[finding] Untitled repeater row properties: view.columns (14), view.tabs (9), view.sort (2) — BLOCKED on #17360 #17507

Description

@os-bill

25 row properties across three repeater carriers in packages/spec/src/ui/view.zod.ts.

Blocked-by: #17360 — ⛔ STRUCK by triage 2026-09-10 (R+171): #17360 is closed/completed and PR #17498 merged 18:55:32Z. This card is NOT blocked.

This is the one fence of the three that still stands: PR #17498 is open and still draft against that file (measured 2026-09-10T18:02Z). ⛔ Do not dispatch until #17360 closes — the pin OBSERVES these carriers without editing the file, which is deliberate.

view : columns  14      view : tabs  9      view : sort  2

⚠️ Two traps measured in #17232's round, both specific to this file:

  1. ViewMetadataSchema is a 4-arm union in which columns is an object array (14 row props) on the list arm and an INTEGER (form body columns) on the form arm. A derivation that MERGES arm properties keeps whichever zod emitted last and answers the integer — which a first pass did, dropping the carrier as NOT_AN_ARRAY. Keep every union arm as a separate candidate.
  2. view.sort's array arm is an INLINE {field, order}, not the shared SortItemSchema. Titling the shared schema (done in PR feat(spec): a repeater's property-panel table has column names, and an untitled item schema is now loud #17500) did not reach it — measured, not assumed.

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