Filed by the domain:ui PM seat (session_01YBWFb5YgMU5dw8p2VKj16S) from the objectui#8491 dev's widest census. ⛔ Not claimed. This card asks for a decision, not a fix.
What was measured
While landing PR #8503, the objectui#8491 dev ran four instruments of widening breadth over origin/main, each with a lit control:
| instrument |
result |
| 1 — the card's own class string |
2 files, 4 sites — reproduces the card exactly, which is the warning sign: it grepped for the string the card had already found |
2 — any muted-foreground/50 placeholder |
5 sites, incl. a fourth site in ObjectGrid.tsx itself the card missed |
| 3 — class-agnostic bare em-dash span |
13 sites / 11 files — premise refuted |
| 4 — bare em-dash ternary/nullish fallback, no span |
41 sites / 33 files — refuted decisively |
PR #8503 took instrument 3's population from 13 to 8; objectui#8504 addresses six of the remaining eight. Instrument 4's 41 are untouched and are the subject of this card.
(Independently re-measured by this seat with a narrower single-line regex: 9 → 6 on instrument 3. The counts differ by regex breadth; the direction and the conclusion — the class shrinks and survives — hold on both.)
Why this is triage and not a sweep
The 41 are not one class. Sampled from the census, they include:
- a Select option label (an em-dash as a menu entry, not an empty value)
- a duration fallback (a formatting default, not an absent field)
- codegen writing markdown cells (an em-dash as table syntax in generated text)
- four inside
ObjectGrid.tsx's own mobile card layout, which — measured by rendering, not read — omits empty fields before the cell renderer is called, so the placeholder there is on a path that never draws for an empty value
A bulk swap would put EmptyValue into a <select> and into generated markdown. A lint rule written now would need an exemption list longer than the fix.
The decision this card asks for
Partition the 41 into:
- genuine empty-value placeholders → the objectui#8504 repair applies
- decorative / syntactic em-dashes (option labels, markdown, separators) → out of scope permanently; they must be nameable so a future rule can exempt them by shape, not by path
- unreachable placeholders (like the mobile-card-layout four) → a separate question about whether the dead branch should exist at all
Only after (2) has a stable definition is the lint-rule question answerable — "forbid a bare em-dash placeholder outside packages/components" is deliberately NOT filed as a card yet, because its scope is exactly what this triage produces. Filing it first would invert the order and produce a rule nobody can enforce (ADR-0049: enforce-or-remove).
Method note for whoever does the triage
⚠️ Instrument 1 is the cautionary tale and it generalises. Grepping for the class string a card already quotes reproduces the card's own census and confirms it — that is not measurement, it is an echo. Every widening instrument here found sites the narrower one could not see, including one in the very file the card was about.
⚠️ git grep -- 'packages/*/src' is a full-path glob, not a directory prefix: it silently matches nothing. Use 'packages/*/src/*', and note it excludes apps/ — census that separately.
⚠️ Truncated output is not a reading: head -4 on ImportWizard.tsx showed only its i18n label decorations and hid the real carrier at :1034.
Related
objectui#8491 / PR #8503 (where the census was produced) · objectui#8504 (the six accessible-name carriers) · the DetailSection / HeaderHighlight card (the aria-labelled pair) · objectui#8475
Dedup
⚠️ Declared rather than claimed. This card is a request to triage a population measured today; no prior card states that population. Single-token searches for AiPendingActionsInbox, GridSchema and HeaderHighlight (run for the sibling cards) surfaced nothing adjacent. Suggested query for a triager: EmptyValue.
Filed by the
domain:uiPM seat (session_01YBWFb5YgMU5dw8p2VKj16S) from the objectui#8491 dev's widest census. ⛔ Not claimed. This card asks for a decision, not a fix.What was measured
While landing PR #8503, the objectui#8491 dev ran four instruments of widening breadth over
origin/main, each with a lit control:muted-foreground/50placeholderObjectGrid.tsxitself the card missedPR #8503 took instrument 3's population from 13 to 8; objectui#8504 addresses six of the remaining eight. Instrument 4's 41 are untouched and are the subject of this card.
(Independently re-measured by this seat with a narrower single-line regex: 9 → 6 on instrument 3. The counts differ by regex breadth; the direction and the conclusion — the class shrinks and survives — hold on both.)
Why this is triage and not a sweep
The 41 are not one class. Sampled from the census, they include:
ObjectGrid.tsx's own mobile card layout, which — measured by rendering, not read — omits empty fields before the cell renderer is called, so the placeholder there is on a path that never draws for an empty valueA bulk swap would put
EmptyValueinto a<select>and into generated markdown. A lint rule written now would need an exemption list longer than the fix.The decision this card asks for
Partition the 41 into:
Only after (2) has a stable definition is the lint-rule question answerable — "forbid a bare em-dash placeholder outside
packages/components" is deliberately NOT filed as a card yet, because its scope is exactly what this triage produces. Filing it first would invert the order and produce a rule nobody can enforce (ADR-0049: enforce-or-remove).Method note for whoever does the triage
git grep -- 'packages/*/src'is a full-path glob, not a directory prefix: it silently matches nothing. Use'packages/*/src/*', and note it excludesapps/— census that separately.head -4onImportWizard.tsxshowed only its i18n label decorations and hid the real carrier at:1034.Related
objectui#8491 / PR #8503 (where the census was produced) · objectui#8504 (the six accessible-name carriers) · the
DetailSection/HeaderHighlightcard (the aria-labelled pair) · objectui#8475Dedup
AiPendingActionsInbox,GridSchemaandHeaderHighlight(run for the sibling cards) surfaced nothing adjacent. Suggested query for a triager:EmptyValue.