Filed by the director seat from the maintainer's ruling on objectui#7516 (2026-09-04, decision batch #28, verbatim 「同意」 on recommendation A — retire at the spec). domain:spec set from the ruling's named executor; triage corrects if the landing point disagrees. Clause-②: yes (a published contract's accept set narrows) — contract-review tier, needs:contract-review on the PR.
✅ UNBLOCKED — the C9 blocker cleared when this seat took over the unreleased claim on the maintainer's word (takeover comment 5790817662, 2026-09-23T08:14Z); the card is pm:dispatched again.
What to retire
packages/spec/src/ui/view.zod.ts:1794 — fieldOrder: z.array(z.string()).optional().describe('Explicit field display order for this view') on the list-view schema (measured on origin/main e293038, 2026-09-04T05:03Z).
Why (the ruling's reasoning, for the implementer)
columns on the same schema is an ordered array and is the authoritative column order every host relays. fieldOrder is a second expression of the same thing, and no contract defines who wins when they disagree (objectui's ListView.tsx:2265 applies fieldOrder after columns, so it wins by implementation order, not by declaration). One slot, one spelling.
- Authored instances: zero in objectstack outside
packages/spec/src/ui/view.test.ts (two test documents) and the generated docs; zero in objectui packages/** / apps/** / examples/**. The hiddenFields control returns 14 files in objectstack, so the zero is a reading.
- The liveness ledger (
packages/spec/liveness/view.json:164) records fieldOrder as live on evidence that names objectui: packages/react/src/spec-bridge/bridges/list-view.ts:124 — a path that no longer exists on objectui origin/main 4bb5e10. The ledger row must be re-measured as part of this retirement, not trusted.
Route
Follow the spec-property-retirement playbook (ADR-0049 enforce-or-remove): named refusal / tombstone for the key, ADR-0087 conversion entry, the liveness ledger row, generated baselines (authorable-surface*.json), content/docs/references/ui/view.mdx regeneration, the two view.test.ts fixtures, and the objectstack lint rule packages/lint/src/validate-list-view-field-refs.ts (it validates fieldOrder references — it retires or narrows with the key; validate-react-page-props.ts and reference-integrity-suite.ts reference it too, re-derive on the tree). Changeset per the spec's BREAKING-as-minor convention with the migration text: "use the order of columns".
Stop conditions
- A consumer census with a positive control before deleting: objectstack, objectui, and the sibling repos (
hotcrm, cloud) for authored fieldOrder on list views. Any real authored instance ⇒ stop and report on objectui#7516; the ruling's fallback (keep, and define columns × fieldOrder × hiddenFields precedence with pins) is then re-presented.
- ⛔ Do not touch objectui's reader in this PR — objectui#7516 carries the reader removal and is
Blocked-by: this card; it lands after the spec pin covering this retirement is consumable there.
Refs: objectui#7516 (ruling and facet block) · objectui#7218 (rowColor, the other half, unaffected) · ADR-0049 · ADR-0087.
Generated by Claude Code
Filed by the director seat from the maintainer's ruling on objectui#7516 (2026-09-04, decision batch #28, verbatim 「同意」 on recommendation A — retire at the spec).
domain:specset from the ruling's named executor; triage corrects if the landing point disagrees. Clause-②: yes (a published contract's accept set narrows) — contract-review tier,needs:contract-reviewon the PR.✅ UNBLOCKED — the C9 blocker cleared when this seat took over the unreleased claim on the maintainer's word (takeover comment
5790817662, 2026-09-23T08:14Z); the card ispm:dispatchedagain.What to retire
packages/spec/src/ui/view.zod.ts:1794—fieldOrder: z.array(z.string()).optional().describe('Explicit field display order for this view')on the list-view schema (measured onorigin/maine293038, 2026-09-04T05:03Z).Why (the ruling's reasoning, for the implementer)
columnson the same schema is an ordered array and is the authoritative column order every host relays.fieldOrderis a second expression of the same thing, and no contract defines who wins when they disagree (objectui'sListView.tsx:2265appliesfieldOrderaftercolumns, so it wins by implementation order, not by declaration). One slot, one spelling.packages/spec/src/ui/view.test.ts(two test documents) and the generated docs; zero in objectuipackages/**/apps/**/examples/**. ThehiddenFieldscontrol returns 14 files in objectstack, so the zero is a reading.packages/spec/liveness/view.json:164) recordsfieldOrderas live on evidence that namesobjectui: packages/react/src/spec-bridge/bridges/list-view.ts:124— a path that no longer exists on objectuiorigin/main4bb5e10. The ledger row must be re-measured as part of this retirement, not trusted.Route
Follow the
spec-property-retirementplaybook (ADR-0049 enforce-or-remove): named refusal / tombstone for the key, ADR-0087 conversion entry, the liveness ledger row, generated baselines (authorable-surface*.json),content/docs/references/ui/view.mdxregeneration, the twoview.test.tsfixtures, and the objectstack lint rulepackages/lint/src/validate-list-view-field-refs.ts(it validatesfieldOrderreferences — it retires or narrows with the key;validate-react-page-props.tsandreference-integrity-suite.tsreference it too, re-derive on the tree). Changeset per the spec's BREAKING-as-minor convention with the migration text: "use the order ofcolumns".Stop conditions
hotcrm,cloud) for authoredfieldOrderon list views. Any real authored instance ⇒ stop and report on objectui#7516; the ruling's fallback (keep, and definecolumns×fieldOrder×hiddenFieldsprecedence with pins) is then re-presented.Blocked-by:this card; it lands after the spec pin covering this retirement is consumable there.Refs: objectui#7516 (ruling and facet block) · objectui#7218 (
rowColor, the other half, unaffected) · ADR-0049 · ADR-0087.Generated by Claude Code