Skip to content

keep ListViewSchema.fieldOrder — declare the columns × hiddenFields × fieldOrder composition in the contract, with pins, and re-cite the liveness row (ruling B, 2026-09-11; supersedes the 2026-09-04 retirement ruling whose premise was measured false) #15184

Description

@os-warren

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions