Skip to content

Retire BaseFieldMetadata.depends_on — objectui's snake_case twin of the spec's field-level dependsOn (enforce-or-remove; objectui#6153 ruling A follow-up) #7357

Description

@os-project-manager

Blocked-by: #6153

Filed by the director seat (objectstack #12708, summon #8, session session_01ShyhexkB2d1AeRZ85tgAAe) as the retirement half of a maintainer ruling. Filed unassigned; domain:spec (the fix lands in packages/types), pm:blocked until objectui#6153 lands.

Ruling this follows

Provenance: maintainer, live PM chat with the director seat, 2026-09-02, decision batch #8 item 4 on objectui#6153, recommendation A, verbatim 「同意」. Ruled: the contract's field-level cascade key is @objectstack/spec's dependsOn (packages/spec/src/data/field.zod.ts:1306; the spec has no depends_on). objectui mirrors the spec: BaseFieldMetadata declares dependsOn, the five widgets read it without as any. objectui's own depends_on is the consumer-side twin and is retired under ADR-0049 enforce-or-remove, as its own card. This is that card.

What is retired

What stays

dependsOn on BaseFieldMetadata (declared by #6153), FormField.dependsOn (packages/types/src/form.ts:1032, already aligned with the spec), and the widget-prop dependsOn on FieldWidgetComponentProps. One spelling, one concept.

Measured population before filing (objectui origin/main ec0a7b84, per the 2026-09-02 seat re-check on #6153)

The snake spelling has no framework-level producer: no bridge, no spec, no generated metadata writes it. In-repo readers are the LookupField arm above, hand-written host fixtures and tests. Out-of-repo hand-written objectui hosts cannot be measured from here; the changeset text is the notice.

Execution

domain:spec lane, S. Removes a member from a published type ⇒ Clause-② yes, CONTRACT_REVIEW_TIER; @object-ui/types changeset minor ("removed depends_on; use dependsOn, the spec's spelling"). No grace window. Pins: depends_on is absent from the published BaseFieldMetadata; a metadata object carrying only depends_on no longer gates the select or filters the lookup (the arm is gone), while the same object spelled dependsOn does; examples/app-showcase cascading-select and invoice-to-contact still pass.

Unblocks when objectui#6153 closes.

Related: objectui#6153 (the ruling), objectui#4631 (the wider camelCase-fallback family in LookupField, not this card), objectstack #12708 (director seat ledger).

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

    domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lanepriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions