Skip to content

spec span/colSpan tier prose is anchored to the current .objectui-sha and goes stale at the bump that absorbs objectui#9253 — nothing mechanical holds the ticket #18508

Description

@os-warren

Filed by the domain:spec execution seat, session session_01KB5PFtxuy1x3dcR5gxudx6, 2026-09-16T17:10Z, out of the #17670 remediation round (PR #18492). ⛔ Unlabelled beyond finding and unassigned; grading and routing are triage's.

⭐ This is a scheduled staleness, not a defect on the tree today. Everything below is correct right now and becomes wrong at a known future event.

What PR #18492 does, and why it is right

FormField.colSpan and FormField.span carried two claims that #17328 measured false. PR #18492 replaces them with text that states what each key resolves to — true on both renderer states — and then anchors the tier behaviour to a named commit rather than asserting it timelessly:

at the .objectui-sha pin 53ded82bf7 only the widest tier's class is emitted (@2xl:col-span-3 for a 3-column grid), so at intermediate widths the field rendered identically to omitting the key

That is the honest shape while the pin sits where it does. Measured at both states by executing the two renderer implementations:

probe, 3-column grid pin 53ded82bf7 objectui main
span: 'full' @2xl:col-span-3 @md:col-span-2 @2xl:col-span-3
colSpan: 4 @2xl:col-span-3 @md:col-span-2 @2xl:col-span-3

The renderer-side fix is objectui#9253, commit bd09957380 (2026-09-12), trailer 「Part of objectui#9244」. It is unreleased at this repo's pin (@object-ui/components 17.6.0 at both the pin and objectui main; 0 tags contain the commit).

The edge

At the .objectui-sha bump that absorbs bd09957380, this prose goes stale in the OTHER direction: the pin-anchored sentences will describe a renderer state the repo no longer builds against, and a reader has no way to tell from the text that the anchor has moved past it.

⚠️ Nothing mechanical enforces the re-read. The PR's TSDoc says so in place

objectui#9253 (objectui bd09957380, ahead of that pin) emits one clamped class per multi-column tier … re-read this block at the pin bump that absorbs it

— which is the only durable channel prose has, but it is an instruction to a future human, ⛔ not a gate. And the gate that looks adjacent does not cover it: check:objectui-pin-citations checks citations that assert the current pin label (26 of them at last run); these are historical-spelling citations, and it deliberately records those as 「recorded and not checked」 (38 at the same run). ⇒ the one gate in the area is designed not to fire here.

⛔ Why this is not solved by 「just don't anchor to a pin」

The alternative is what PR #18492 is removing: a timeless assertion about renderer behaviour, which is exactly what went false. Anchoring is the right call; the gap is that an anchored sentence has a known expiry and nothing holds the ticket.

Possible directions — ⛔ no ruling implied

  1. Extend check:objectui-pin-citations so a historical-spelling citation whose sha becomes an ancestor of the new pin is reported at the bump — it already parses both spellings, so it has the inputs.
  2. A Restart-when: card parked against the bump, with the touched files listed, so the re-read is a queued state rather than a comment.
  3. Accept the in-place instruction as the guard and close this. ⛔ Recorded as an option, not recommended: the instruction lives in the file whose wrongness it predicts.

⚠️ Not measured

How many other pin-anchored sentences exist in packages/spec with the same expiry shape. The 38 「recorded and not checked」 historical citations are the obvious place to count, and that count is the first thing a fixing round owes.

Dedupe words

spanLadderFor · objectui#9253 · span-full-tier-ladder · pin bump reconcile · objectui-pin-citations historical

Refs

#17670 / PR #18492 · #17328 (the original measurement) · objectui#9253 (bd09957380) · .objectui-sha = 53ded82bf7


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

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions