Filed unassigned by the domain:devx @ objectui execution seat (#5748), PM session session_019b5UBNMtTzKbVtZZGvFuxe, from the #6023 handback. Labelled domain:ui — it is a rendering inconsistency, not gate tooling. ⛔ Deliberately not fixed in #6023, whose dispatch reserved it.
The fact
Three consumers render the same RecentItem['type'] label, and one of them falls back differently:
| consumer | fallback |
|---|
packages/app-shell/src/console/home/HomeRail.tsx:251 | { defaultValue: it.type } → the bare lowercase word |
packages/app-shell/src/console/home/RecentApps.tsx:55 | { defaultValue: capitalizeFirst(item.type) } → Report |
packages/app-shell/src/console/home/StarredApps.tsx:61 | { defaultValue: capitalizeFirst(item.type) } → Report |
So whenever a union member has no home.recentApps.itemType.* key, the rail reads report while the cards on the same screen read Report.
Why it is worth recording now, when it is about to stop being visible
#6023 adds the two missing keys (report, metadata), so the fallback stops firing for every member of the union today — the symptom disappears and the defect does not.
⚠️ That is precisely the shape worth a card rather than a shrug: the next member added to RecentItem['type'] will render inconsistently again, in a place where nothing fails, and the only evidence will be one screen showing two capitalisations of the same word. objectui#3517 established that a defaultValue is what hides a missing key for months; this is the same mechanism producing an inconsistency rather than a gap.
Shape of a fix — ⛔ not prescribed
Either make the three call sites agree, or make the fallback a single shared helper so they cannot drift again. ⚠️ Worth deciding deliberately which is right: capitalizeFirst on a raw union member is itself a guess about presentation, and several locales do not capitalise common nouns — so "make them all capitalise" may be the wrong unification. The honest question is whether an unkeyed member should be rendered at all, or whether the absence should be visible.
Reproduce
rg -n 'defaultValue' packages/app-shell/src/console/home/HomeRail.tsx \
packages/app-shell/src/console/home/RecentApps.tsx \
packages/app-shell/src/console/home/StarredApps.tsx
Refs: #6023 (which makes it dormant) · #3517 (the defaultValue mechanism) · #4964.
Filed unassigned by the
domain:devx@ objectui execution seat (#5748), PM sessionsession_019b5UBNMtTzKbVtZZGvFuxe, from the #6023 handback. Labelleddomain:ui— it is a rendering inconsistency, not gate tooling. ⛔ Deliberately not fixed in #6023, whose dispatch reserved it.The fact
Three consumers render the same
RecentItem['type']label, and one of them falls back differently:packages/app-shell/src/console/home/HomeRail.tsx:251{ defaultValue: it.type }→ the bare lowercase wordpackages/app-shell/src/console/home/RecentApps.tsx:55{ defaultValue: capitalizeFirst(item.type) }→Reportpackages/app-shell/src/console/home/StarredApps.tsx:61{ defaultValue: capitalizeFirst(item.type) }→ReportSo whenever a union member has no
home.recentApps.itemType.*key, the rail readsreportwhile the cards on the same screen readReport.Why it is worth recording now, when it is about to stop being visible
#6023 adds the two missing keys (
report,metadata), so the fallback stops firing for every member of the union today — the symptom disappears and the defect does not.RecentItem['type']will render inconsistently again, in a place where nothing fails, and the only evidence will be one screen showing two capitalisations of the same word. objectui#3517 established that adefaultValueis what hides a missing key for months; this is the same mechanism producing an inconsistency rather than a gap.Shape of a fix — ⛔ not prescribed
Either make the three call sites agree, or make the fallback a single shared helper so they cannot drift again.⚠️ Worth deciding deliberately which is right:
capitalizeFirston a raw union member is itself a guess about presentation, and several locales do not capitalise common nouns — so "make them all capitalise" may be the wrong unification. The honest question is whether an unkeyed member should be rendered at all, or whether the absence should be visible.Reproduce
Refs: #6023 (which makes it dormant) · #3517 (the
defaultValuemechanism) · #4964.