Skip to content

[Decision] objectui execution half of the merged responsive retirement (objectstack#11027) — deleting the two dead implementations does NOT unblock the spec bump, and the retirement's "no other authorable carrier" is false here #7580

Description

@os-project-manager

Opened by the domain:ui execution-seat PM (session session_01EMrWaQw3XS5DxTHxp4yRyC) out of #4773, which stays as the measurement record. The work has grown a half that card never contained, and its body plus ten comments are a measurement history a removal PR would bury.

Not dispatchable as filed — the second half below needs a maintainer's ruling.

Where this stands

objectstack#11027 is merged on objectstack main (35e94c96b). packages/spec/src/ui/responsive.zod.ts no longer declares ResponsiveConfigSchema/ResponsiveConfig, BreakpointName, BreakpointColumnMapSchema/BreakpointColumnMap or BreakpointOrderMapSchema/BreakpointOrderMap — a REMOVED — tombstone stands where they were, with RETIRED_DEFS_BY_MAJOR[18] and the protocol-18 conversion. Merged and unreleased, so the discovery point is a lockfile refresh on caret ranges, not a deliberate bump. objectstack's own merged changeset names #4773 as the objectui execution half.

Half 1 — ruled, mechanical, and NOT sufficient on its own

The two implementations objectstack measured at zero callers: useResponsiveConfig (@object-ui/mobile) and ResponsiveProtocol (@object-ui/core). Their deletion is ruled and uncontested.

Do not dispatch this half alone. Every existing comment on #4773 says "delete the two dead implementations", and a PR that does only that leaves the bump red. That is the whole point of what follows.

Half 2 — unruled, and it reaches LIVE code

Measured on objectui origin/main, verified independently of the report that surfaced it:

site what it imports status
packages/types/src/mobile.ts:19 BreakpointName from @objectstack/spec/ui re-exported at :32 into @object-ui/types
packages/layout/src/ResponsiveGrid.tsx:11 BreakpointColumnMap, BreakpointOrderMap re-exported at :32
packages/mobile/src/__tests__/responsive-config-spec-parity.test.ts:53 ResponsiveConfigSchema a runtime value import, not type-only

Neither of the first two is dead:

  • BreakpointName is a chokepoint. Republished into @object-ui/types and consumed by live code — packages/mobile/src/breakpoints.ts:9,12,22,54 (BREAKPOINTS, BREAKPOINT_ORDER, getCurrentBreakpoint), ResponsiveContainer.tsx:10, and the ResponsiveValue<T> generic itself (types/src/mobile.ts:35).
  • ResponsiveGrid is a registered SDUI component. packages/layout/src/index.ts:206ComponentRegistry.register('responsive-grid', ResponsiveGrid, …), with layout:responsive-grid and responsive-grid both in cli/src/utils/known-schema-types.ts, and a test that renders it precisely to prove the key is registered (app-shell-not-a-component-key.test.tsx:166). Its columns input is authorable and reaches resolveColumnClasses(columns) on the render path.

⭐ The retirement's stated ground is measurably overbroad, and that is the decision

The tombstone on responsive.zod.ts gives this as the reason the four types left with the key:

ResponsiveConfigSchema, BreakpointColumnMapSchema, BreakpointOrderMapSchema and the BreakpointName enum had no other authorable carrier and left with the key

The census behind it measured page.components[].responsive and found it inert. That finding is sound. But "no other authorable carrier" is a claim about the whole surface, and objectui has one: responsive-grid's columns is authorable, typed by BreakpointColumnMap, and applied by a resolver on the render path.

⚠️ The tombstone also states the condition for return, in its own words:

The Tailwind-style xs…2xl layout vocabulary returns if and when a renderer implements it — in one change, with the engine (the #4834 rule).

A renderer implements it. That is why this is a ruling and not a repair.

The options

what it does cost
A — re-home in objectui declare BreakpointName locally in packages/types, and the column/order maps locally in packages/layout ⚠️ reverses a recorded, reasoned decision. types/src/mobile.ts carries the reason verbatim: "Bound to the spec rather than re-declared (objectstack#4115): a local union under a spec export's name is read by the next reader as the spec's own definition, so a copy that is correct today is a planted premise tomorrow." Whoever takes A owes that comment an answer, not a deletion.
B — widen the retirement into objectui retire ResponsiveGrid's columns and the mobile breakpoint hooks too refuted by measurement. It deletes a registered component's authorable input and a resolver that runs on the render path, on no evidence that either is unused.
C — take it back to the spec seat ask whether the column vocabulary should survive, since the retirement's own return-condition appears already met a cross-repo round trip on a merged, maintainer-ruled retirement — but it is the option the tombstone's own text points at

This seat is not ruling between A and C. A reverses a recorded decision about published surface; C questions the stated ground of a merged retirement. Either is a maintainer's call. B is off the table on measurement, not on preference.

⚠️ BreakpointOrderMap may be a third case: its own comment in ResponsiveGrid.tsx says it has no read point even there, so it may simply retire rather than be re-homed. That is not the same question as columns, and answering them together would hide it.

What a dispatchable brief needs, once ruled

Both halves in one change, because half 1 alone leaves the bump red. Plus the third site (responsive-config-spec-parity.test.ts:53) — a runtime value import, so it fails differently from the type-only ones and needs its own disposition.

Provenance

The live-code half was found by the os-dev seat working #4773 under a brief that told it to stop and report if the premise had changed. It did, and it was right to; every measurement above was re-verified here against origin/main and objectstack main before this card was written. Related: #4773 (the measurement record) · objectstack#11027 (the merged retirement) · objectstack#11029 (the cloud reading) · #7519 (owns the surviving MobileResponsiveConfig third).

Activity

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

Metadata

Metadata

Assignees

Labels

domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions