Filed by the domain:spec execution seat, session session_01KB5PFtxuy1x3dcR5gxudx6, 2026-09-16T15:5xZ, out of the #17670 round (PR #18492). ⛔ Unlabelled beyond finding and unassigned; grading and routing are triage's. ⛔ Filed rather than fixed: the primary carrier is skills/** — a governed surface, human-merge only — so the domain:spec lane did not and will not touch it.
Why this one matters more than the carriers already fixed
#17328 measured two claims about FormField.colSpan / span: 'full' false. PR #18492 removes them from packages/spec and the generated reference page. The line below is the only place left in the tree that still states them — and it is the carrier most likely to be acted on, because it is prescriptive, it is shipped to customer projects, and the spelling it prescribes is the one the measurement puts on the worse side.
Carrier 1 — skills/objectstack-ui/rules/navigation.md:139 (governed)
Both falsified sentences, verbatim:
Use the relative span: full to make a field take the whole row
Do not use the absolute colSpan — it only lines up at one width and is deprecated.
⚠️ "deprecated" is false on its own terms, independently of #17328. Measured in packages/spec today: no .deprecated(), no retiredKey, no ADR-0087 conversion entry and no UNKNOWN_KEY_GUIDANCE row for colSpan; and #17328's own changeset states "Authored metadata is untouched: FormField.colSpan is unchanged and still valid."
Measured after PR #18492, over the tree excluding content/docs/releases/ and **/CHANGELOG.md (where historical entries correctly keep the old wording):
| probe |
result |
git grep -F 'only lines up at' |
exactly this one line |
git grep -F 'at any column count' |
0 |
lit control git grep -c -F colSpan, same exclusion set |
lit across 20+ files |
Carrier 2 — examples/app-showcase/src/ui/views/task.view.ts:363-366
Same claim plus one now stale on its own terms:
'full' = whole row at any / derived column count — the primary primitive; absolute colSpan / is legacy and lint-discouraged
⚠️ The lint rule it names was withdrawn by #17328 and is gone from the tree.
⭐ Why the card that produced this one missed it: the phrase breaks across a comment line, so a line-oriented grep reads 0. grep -z finds it. ⇒ any successor sweeping for these sentences must use grep -z or it will report a false all-clear.
⛔ Scope note, so this is not over-read
Carrier 2 is recorded as a boundary, ⛔ not an expansion of the finding classes: copying the example does not fail (so ⛔ not class (a)), no declared contract is violated (⛔ not (b)), and a warning steering an author toward metadata the runtime does honour but which makes the result worse is explicitly outside class (c). It travels with carrier 1 because they are one routing round, ⛔ not because it is independently fileable.
Carrier 1 is where the decision sits: skills/** is governed, so ⛔ no code lane may land it. It needs the rules-layer owner.
Dedupe words
only lines up at · span: full · colSpan · objectstack-ui/rules/navigation · lint-discouraged
Refs
#17328 (the measurement) · #17670 / PR #18492 (the packages/spec carriers) · content/docs/protocol/objectui/layout-dsl.mdx:846 (a FormField listing that omits span entirely — incompleteness, ⛔ not an error, and ⛔ not part of this card)
Generated by Claude Code
Filed by the
domain:specexecution seat, sessionsession_01KB5PFtxuy1x3dcR5gxudx6, 2026-09-16T15:5xZ, out of the #17670 round (PR #18492). ⛔ Unlabelled beyondfindingand unassigned; grading and routing are triage's. ⛔ Filed rather than fixed: the primary carrier isskills/**— a governed surface, human-merge only — so thedomain:speclane did not and will not touch it.Why this one matters more than the carriers already fixed
#17328 measured two claims about
FormField.colSpan/span: 'full'false. PR #18492 removes them frompackages/specand the generated reference page. The line below is the only place left in the tree that still states them — and it is the carrier most likely to be acted on, because it is prescriptive, it is shipped to customer projects, and the spelling it prescribes is the one the measurement puts on the worse side.Carrier 1 —
skills/objectstack-ui/rules/navigation.md:139(governed)Both falsified sentences, verbatim:
packages/spectoday: no.deprecated(), noretiredKey, no ADR-0087 conversion entry and noUNKNOWN_KEY_GUIDANCErow forcolSpan; and #17328's own changeset states "Authored metadata is untouched:FormField.colSpanis unchanged and still valid."Measured after PR #18492, over the tree excluding
content/docs/releases/and**/CHANGELOG.md(where historical entries correctly keep the old wording):git grep -F 'only lines up at'git grep -F 'at any column count'git grep -c -F colSpan, same exclusion setCarrier 2 —
examples/app-showcase/src/ui/views/task.view.ts:363-366Same claim plus one now stale on its own terms:
⭐ Why the card that produced this one missed it: the phrase breaks across a comment line, so a line-oriented
grepreads 0.grep -zfinds it. ⇒ any successor sweeping for these sentences must usegrep -zor it will report a false all-clear.⛔ Scope note, so this is not over-read
Carrier 2 is recorded as a boundary, ⛔ not an expansion of the finding classes: copying the example does not fail (so ⛔ not class (a)), no declared contract is violated (⛔ not (b)), and a warning steering an author toward metadata the runtime does honour but which makes the result worse is explicitly outside class (c). It travels with carrier 1 because they are one routing round, ⛔ not because it is independently fileable.
Carrier 1 is where the decision sits:
skills/**is governed, so ⛔ no code lane may land it. It needs the rules-layer owner.Dedupe words
only lines up at·span: full·colSpan·objectstack-ui/rules/navigation·lint-discouragedRefs
#17328 (the measurement) · #17670 / PR #18492 (the
packages/speccarriers) ·content/docs/protocol/objectui/layout-dsl.mdx:846(aFormFieldlisting that omitsspanentirely — incompleteness, ⛔ not an error, and ⛔ not part of this card)Generated by Claude Code