Skip to content

spec: export the object-level refinement checks (superRefine / refine bodies) as named functions so zod mirrors in objectui can re-attach them (spec half of objectui#7715) #16489

Description

@os-zhuang

Filed by the director seat under the objectui#7715 ruling (decision batch #67, 2026-09-07, option B1). objectui#7715 is pm:blocked on this card.

Why

objectui derives its zod schemas from the spec's .shape (BaseSchema.extend(specFieldsExcept(SpecListViewSchema.shape, …).shape), six sites across four files). That carries the spec's fields by reference but drops every check attached to the spec object (superRefine / refine), e.g. checkListViewCalendarVisualization in src/ui/view.zod.ts. Result, measured at 17.3.0: objectui's authoring door accepts appearance.allowedVisualizations: ['calendar'] with no calendar: block; the spec's publish door refuses it. Contract-first says the rule is written once, in the spec; a mirror must be able to attach the same rule instead of re-implementing it.

Scope

  • For every spec object that carries an object-level refinement and is mirrored downstream (the objectui dev enumerates the six derivation sites; start with ListViewSchema, then NavigationArea, App, DashboardWidget, Dashboard, Page as measured), export the check as a named, typed function ((value, ctx: z.RefinementCtx) => void) from the same module, alongside the schema — one function per refinement, no bundled "all checks" blob, so a mirror can attach exactly the ones whose fields it carries.
  • Keep the spec schema itself unchanged (the export is additive; Clause-② conformance limb: no for this card — the spec's accept set does not move). Pin: each exported check is the one the schema's own superRefine calls (a test that calls the export directly and the schema's parse and compares verdicts on the same fixture).
  • api-surface baseline regenerated with the repo tooling; changeset (minor).

Acceptance

  • exported check functions for every refinement on a mirrored object
  • parity test per export (direct call vs schema parse)
  • changeset present

Refs objectui#7715, objectui#7122 (the tripwire pin that this work flips), objectui#2231.

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions