You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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/maina7ab047cf6 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).
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".
A retiredKey() tombstone on the detail entry. Its prescription names the derived sort: the child object's position / sort_order / sequence / line_no / line_number / sort field.
One ADR-0087 D2 conversion and one D3 entry. There is no staged window, because there are zero writers.
The texts that become false move in the same PR:
the entry docblock's "and sortField (the line-position field …)";
record:line_items' guidance "sortField belongs to an object-master-detail-form detail entry" (about :2196–:2197);
any generated reference page and pin test that names the key.
Filing gate: ① a declared ≠ enforced defect with a named landing site.
reach:the published authoring door.@objectstack/spec17.6.0 accepts the key (package/src/ui/component.zod.ts:5012in the npm tarball), and the console this repo pins reads nothing for it. Filed by thedomain:specseat 1 (session_01T9u38rswFp5Rw8DswRUReJ, seat post #6017). This is the spec half that seat post records as owed "at the next objectstack pin bump past0a3e5409f". ⛔ Filed bare: grading and routing are triage's. ⛔ Not a claim.Reader who acts: triage grades and routes it, then the
domain:specseat claims and dispatches it.The defect
ComponentPropsMap['object-master-detail-form'].details[]declaressortField: z.string().optional(). Onorigin/maina7ab047cf6that ispackages/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.0a3e5409f(objectui#11376, objectui#11070 round 9). At the pin89cad75d5570,packages/plugin-form/src/MasterDetailForm.tsx:83reads: "⛔ NosortFieldmember. 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 onlysortFieldon that path is the derived one (deriveMasterDetail.ts:540, handed to the grid assort_fieldatMasterDetailForm.tsx:874).compare 0a3e5409f...89cad75d5570on objectui answersahead,ahead_by: 46. The pin crossed0a3e5409fin 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.sortField: 'line_no'gets a cleanos validateand a drag-reorder that stamps whatever the child's derived field is, or nothing.git grep -n 'sortField' origin/main -- examples apps packages ':!packages/spec/**'finds no authoredsortField:on a detail entry. Every hit is an unrelated identifier (sortFieldsindriver-memory,sortFieldRefsinpackages/lint). Control: the same grep foramountFieldhitsexamples/app-showcase/src/ui/pages/project-detail.page.ts.Landing site (the direction recorded when the key was declared)
The record is
5937457620on #21220's landing, mirrored on objectstack-ai/objectui#11396 ③: "retiresortFieldfrom the detail entry, tombstone plus ADR-0087".retiredKey()tombstone on the detail entry. Its prescription names the derived sort: the child object'sposition/sort_order/sequence/line_no/line_number/sortfield.sortField(the line-position field …)";record:line_items' guidance "sortFieldbelongs to anobject-master-detail-formdetail entry" (about:2196–:2197);detailsentry as a strict shape — the parity row and mirror follow at the next spec bump; the spec'ssortFieldfollows #11376 at the next pin bump objectui#11396's mirror follows when a published@objectstack/speccarries this.Dedupe
search_issues, repo-scoped, open and closed together, "retire sortField object-master-detail-form detail entry": 2 hits. spec(ui): an object-master-detail-form detail entry's sortField describe says it is derived when omitted; on the renderer's fast path nothing derives it #21315 (closed: the describe's derivation claim, not the retirement) and spec(forms): retirepublicPicker— anonymous public forms stop taking lookup / master_detail / user fields, and the anonymous picker route goes (ruling E on #21079) #21180 (unrelated).sortField: 0 cards; the only hit is the seat post [PM seat] domain:spec — 🟢 os-project-manager · session_01T9u38rswFp5Rw8DswRUReJ #6017.Dedupe words: sortField master-detail detail entry retire · MasterDetailDetailConfig sortField retired 0a3e5409f · object-master-detail-form details sortField tombstone