diff --git a/.changeset/spec-accessor-key-citations.md b/.changeset/spec-accessor-key-citations.md new file mode 100644 index 0000000000..96a37e8f34 --- /dev/null +++ b/.changeset/spec-accessor-key-citations.md @@ -0,0 +1,32 @@ +--- +"@objectstack/spec": patch +--- + +docs(spec): re-cite objectui's data-table column accessor as `accessorKey` only (#14166) + +Two notes in this package described objectui's `data-table` accessor as +resolving two spellings, `accessorKey || name`: + +- `liveness/field.json` — the `relatedListColumns` entry's `note` +- `src/conversions/registry.ts` — the `field-column-lists-canonicalized` + docblock + +objectui#6963 retired the `name` alias, and the console pin this repo builds +against (`.objectui-sha` = `67dadd602a3a891666ea1513c5de677140784b6a`) contains +it: at that commit the adapter maps `accessorKey: col.accessorKey` with no +fallback (`packages/components/src/renderers/complex/data-table.tsx:872-876`), +while `columnIdentity` still resolves canonical `field` first +(`packages/core/src/utils/column-identity.ts:69`). Both notes described a +two-spelling resolution that no longer exists, and each carried a measurement +date that predated the retirement. + +Citation accuracy only. Both notes reach the same conclusion they already did — +a spec-canonical `{ field }` object entry renders blank cells, so the +conversion folds an object entry to its identity string and the parse refuses +what has no resolvable identity. No verdict moves, no ledger state changes, no +accepted shape moves, and no code changes: the `relatedListColumns` entry keeps +its `live` status, its `verifiedAt`, its `evidence` and every count. + +Why this publishes at all: `liveness/**` is in this package's `files`, and the +`registry.ts` docblock ships inside `dist/*.map` `sourcesContent`, so both +edited byte-ranges are in the tarball. diff --git a/packages/spec/liveness/field.json b/packages/spec/liveness/field.json index 9a9fab68ee..0fdd5dbf3c 100644 --- a/packages/spec/liveness/field.json +++ b/packages/spec/liveness/field.json @@ -395,7 +395,7 @@ "verifiedAt": "2026-08-17", "evidenceScope": "cross-repo", "evidence": "objectui: packages/app-shell/src/utils/deriveRelatedLists.ts (columns override on the derived descriptor) → views/RecordDetailView.tsx → plugin-detail/RelatedList.tsx (normalizeColumn hydrates STRING entries: header from the child field label, type-aware cell via makeCell)", - "note": "LIVE via objectui renderer. #9227 narrowed the elements to child FIELD-NAME STRINGS — the only authored form in-repo (three showcase objects) and the only form the renderer hydrates fully; the page-block sibling record:related_list.columns (ui/component.zod.ts) is the same strings-only shape. Measured 2026-08-17 against objectui main: object entries span two vocabularies (RelatedList resolves identity via columnIdentity, canonical `field`; the data-table accessor resolves `accessorKey || name` only), so a spec-canonical {field} object renders BLANK cells — refused at parse instead." + "note": "LIVE via objectui renderer. #9227 narrowed the elements to child FIELD-NAME STRINGS — the only authored form in-repo (three showcase objects) and the only form the renderer hydrates fully; the page-block sibling record:related_list.columns (ui/component.zod.ts) is the same strings-only shape. RE-CITED 2026-09-03 (#14166): the 2026-08-17 reading against objectui main had the data-table accessor resolving `accessorKey || name`; objectui#6963 retired the `name` alias, and at the `.objectui-sha` pin `67dadd602a3a` object entries span two vocabularies (RelatedList resolves identity via columnIdentity, canonical `field`; the data-table accessor resolves `accessorKey` only), so a spec-canonical {field} object renders BLANK cells — refused at parse instead. Verdict unchanged: LIVE." }, "relatedListFilter": { "status": "planned", diff --git a/packages/spec/src/conversions/registry.ts b/packages/spec/src/conversions/registry.ts index 78009dde15..30b0fef6f6 100644 --- a/packages/spec/src/conversions/registry.ts +++ b/packages/spec/src/conversions/registry.ts @@ -7264,9 +7264,10 @@ const translationComponentSubmitLabelRemoved: MetadataConversion = { * - `relatedListColumns` entries are child FIELD-NAME STRINGS. The * conversion folds an object entry to its identity string * (`field` → `name` → `fieldName`, objectui's `columnIdentity` order) and - * drops the decoration keys: measured on objectui main, an object entry's - * display keys span two vocabularies (`columnIdentity` is - * canonical-`field`, the data-table accessor reads `accessorKey || name`), + * drops the decoration keys: re-measured at the `.objectui-sha` pin + * `67dadd602a3a`, an object entry's display keys span two vocabularies + * (`columnIdentity` is canonical-`field`, the data-table accessor reads + * `accessorKey` only — objectui#6963 retired the `name` alias), * so no object spelling renders reliably — the derived-from-schema string * is the one form that always has. An object with no resolvable identity * is left for the parse to refuse; a conversion must not invent data.