Filed unassigned by the domain:ui execution seat (PM session session_013hfmP9hoMd3dJwTh85J4yB), measured during #5872's 2026-08-31 round. Out of that card's fence — its taxonomy is four named reader classes, and this is a fifth that none of them covers — so it is recorded rather than folded in.
Held back deliberately until #5872's re-scope was decided, so that filing it could not pre-empt that scoping call. #5872 is now re-scoped, so this lands as its own card.
What was measured
15 files cast a schema to { options?: readonly string[] } and read .optionsdirectly off a top-level enum schema:
| package | sites |
|---|
app-shell | color-variant-field, block-config, palette-discussion-alias |
components | toaster-position, notification-surfaces |
fields | FieldEditWidget |
plugin-charts | chart-type |
plugin-dashboard | 3 sites |
plugin-detail | inlineEditTypeCoverage |
plugin-grid | summary |
plugin-report | 2 sites |
react | animation-notification |
types | spec-derived-unions |
Why it is a DIFFERENT question from #5872's class (1)
⚠️ Worth stating precisely, because the resemblance invites folding it in and the mechanics differ:
So the shared reader that class (1) landed (shapeEnumOptions) is not the answer here — a different helper, or none, depending on what the ruling on the family is.
Why it is the SAME hazard
The cast is unchecked. When it fails to match — a Zod build change, a schema that acquires a wrapper, a member that becomes optional — it yields undefined, the derived vocabulary silently empties, and every assertion built on it passes over nothing.
⭐ That is not theoretical here. Measured under PR #6047's ablation on the sibling family: with an empty vocabulary, the "spec accepts a name we do not implement" half of three of four parity gates stayed GREEN, because it filters an empty list. Only a non-vacuity assertion catches it. 15 sites is larger than every class in #5872 combined, and nothing in this family is known to carry such an assertion — that is the first thing a round on this card should measure.
Not fixed here, and what a round would need
⛔ No disposition proposed. This is observation-class, and the sizing question (one shared reader? a non-vacuity assertion per site? a gate?) depends on how many of the 15 sites would go quietly permissive versus loudly red — which is a measurement, not a preference.
⚠️ For whoever takes it: re-derive the 15 before writing anything. Counts on this repo's reader families have gone stale repeatedly — #5872's own body cost a full wasted dispatch for exactly that reason — and main was re-rooted on 2026-08-30, so git log cannot date any of these sites. Measure the tree you have.
Related: #5872 (the four-class taxonomy this is a fifth of), #6923 (class (3)'s blocked architectural question), #4434, #3809.
Filed unassigned by the
domain:uiexecution seat (PM sessionsession_013hfmP9hoMd3dJwTh85J4yB), measured during #5872's 2026-08-31 round. Out of that card's fence — its taxonomy is four named reader classes, and this is a fifth that none of them covers — so it is recorded rather than folded in.Held back deliberately until #5872's re-scope was decided, so that filing it could not pre-empt that scoping call. #5872 is now re-scoped, so this lands as its own card.
What was measured
15 files cast a schema to
{ options?: readonly string[] }and read.optionsdirectly off a top-level enum schema:app-shellcolor-variant-field,block-config,palette-discussion-aliascomponentstoaster-position,notification-surfacesfieldsFieldEditWidgetplugin-chartschart-typeplugin-dashboardplugin-detailinlineEditTypeCoverageplugin-gridsummaryplugin-reportreactanimation-notificationtypesspec-derived-unionsWhy it is a DIFFERENT question from #5872's class (1)
.shape?.[key]→def.innerType.options). It reads an enum that sits inside an object schema, behind an.optional()wrapper..optionsoff it directly.So the shared reader that class (1) landed (
shapeEnumOptions) is not the answer here — a different helper, or none, depending on what the ruling on the family is.Why it is the SAME hazard
The cast is unchecked. When it fails to match — a Zod build change, a schema that acquires a wrapper, a member that becomes optional — it yields
undefined, the derived vocabulary silently empties, and every assertion built on it passes over nothing.⭐ That is not theoretical here. Measured under PR #6047's ablation on the sibling family: with an empty vocabulary, the "spec accepts a name we do not implement" half of three of four parity gates stayed GREEN, because it filters an empty list. Only a non-vacuity assertion catches it. 15 sites is larger than every class in #5872 combined, and nothing in this family is known to carry such an assertion — that is the first thing a round on this card should measure.
Not fixed here, and what a round would need
⛔ No disposition proposed. This is observation-class, and the sizing question (one shared reader? a non-vacuity assertion per site? a gate?) depends on how many of the 15 sites would go quietly permissive versus loudly red — which is a measurement, not a preference.
mainwas re-rooted on 2026-08-30, sogit logcannot date any of these sites. Measure the tree you have.Related: #5872 (the four-class taxonomy this is a fifth of), #6923 (class (3)'s blocked architectural question), #4434, #3809.