Skip to content

spec(ui): retire sortField from the object-master-detail-form detail entry; the pinned console stopped reading it at objectui 0a3e5409f, and the bump that crossed it did not carry the spec half #21589

Description

@objectstack-fleet

Filing gate: ① a declared ≠ enforced defect with a named landing site. reach: the published authoring door. @objectstack/spec 17.6.0 accepts the key (package/src/ui/component.zod.ts:5012 in the npm tarball), and the console this repo pins reads nothing for it. Filed by the domain:spec seat 1 (session_01T9u38rswFp5Rw8DswRUReJ, seat post #6017). This is the spec half that seat post records as owed "at the next objectstack pin bump past 0a3e5409f". ⛔ Filed bare: grading and routing are triage's. ⛔ Not a claim.

Reader who acts: triage grades and routes it, then the domain:spec seat claims and dispatches it.

The defect

  • ComponentPropsMap['object-master-detail-form'].details[] declares sortField: z.string().optional(). On origin/main a7ab047cf6 that is packages/spec/src/ui/component.zod.ts:5460, with the describe "Child field holding the line sort position, stamped on drag-reorder. …". The entry docblock (about :5433) lists it as one of "the renderer's own" keys.
  • objectui retired the authored override at 0a3e5409f (objectui#11376, objectui#11070 round 9). At the pin 89cad75d5570, packages/plugin-form/src/MasterDetailForm.tsx:83 reads: "⛔ No sortField member. The child field the grid stamps with each line's position is DERIVED from the child object (deriveDetail …) and carried on the resolved entry, never authored". The only sortField on that path is the derived one (deriveMasterDetail.ts:540, handed to the grid as sort_field at MasterDetailForm.tsx:874).
  • compare 0a3e5409f...89cad75d5570 on objectui answers ahead, ahead_by: 46. The pin crossed 0a3e5409f in PR chore(objectui): bump the console pin to 89cad75d5570 (carries objectui 0858267e, 8001068b, 3ae91930 and d0fba91aa) #21380 (8963dbfa, 2026-10-02T10:06Z), which did not retire the key.
  • So an author (an AI above all) who writes sortField: 'line_no' gets a clean os validate and a drag-reorder that stamps whatever the child's derived field is, or nothing.
  • Writers: git grep -n 'sortField' origin/main -- examples apps packages ':!packages/spec/**' finds no authored sortField: on a detail entry. Every hit is an unrelated identifier (sortFields in driver-memory, sortFieldRefs in packages/lint). Control: the same grep for amountField hits examples/app-showcase/src/ui/pages/project-detail.page.ts.

Landing site (the direction recorded when the key was declared)

The record is 5937457620 on #21220's landing, mirrored on objectstack-ai/objectui#11396 ③: "retire sortField from the detail entry, tombstone plus ADR-0087".

Dedupe

Dedupe words: sortField master-detail detail entry retire · MasterDetailDetailConfig sortField retired 0a3e5409f · object-master-detail-form details sortField tombstone

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

    Labels

    area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:specpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions