Filing gate ①, class (c), with reach: measured at a public door: the tolerant face accepts metadata that the arm, the strict face and the TypeScript twin all refuse. This is the family close-out card. Its second member surfaced in objectui#4425, and the first is already recorded in a test as a measured limit.
Reader: the objectstack-wide triage seat's first touch (grade, route, and whether the envelope fallback is narrowed or the envelope retires), then the domain:ui execution seat that claims it.
Dedupe: mcp__github__search_issues on objectstack-ai/objectui, closed included: "dashboard widget legacy component envelope BaseSchema fallback tolerant face objectui validate accepts metric-card refused keys" gives 21 hits; the first 10 were read, all closed. objectui#11483, #11467, #11022, #7952, #11348 and #9111 are this arm's earlier cards, and none owns the envelope fallback. objectui#11467's pin block in packages/types/src/__tests__/dashboard-widget-slot-component-arm-7952.test.ts records the out-of-enum trend on this path as a "MEASURED LIMIT, recorded rather than ruled". This card is where that limit goes.
What happens
A dashboard's widgets[] entry may still use the legacy envelope { id, component: NODE, layout }. On the tolerant face (safeValidateSchema, which objectui validate runs), the envelope's component slot is z.union([the metric-card slot arm, BaseSchema]). So any metric-card node that the arm refuses parses anyway through the BaseSchema arm.
- Measured by the objectui#4425 dev, with the built
objectui validate at PR objectui#11707's head 05c8d31:
{ type: 'dashboard', widgets: [{ id: 'w', component: { type: 'metric-card', value: '$123,456', label: 'Total Revenue' } }] } exits 0;
- the strict face and
tsc on the built declarations refuse the same document.
- The family:
label (objectui#4425);
body and children (objectui#9256's refusals on the same arm);
- a
trend outside up | down | neutral (objectui#11467's recorded limit).
Every refusal the slot arm carries is lost on this path.
- Named producer:
packages/plugin-dashboard/README.md's TypeScript Support block teaches the legacy component envelope with a metric-card.
- Not measured: what that path renders.
Done when
- On the tolerant face, a
metric-card inside a widget's component envelope is judged by the slot arm. Each key the arm refuses is refused there too, with the arm's own message, and a well-formed card still parses. Alternatively, the envelope is retired and its producers migrate; triage picks the route.
- Pins: one enumerating every refusal the arm carries (
label, body, children, an out-of-enum trend), proving each is refused through the envelope at objectui validate, so a refusal added to the arm later is covered without a new card. The title control parses.
- objectui#11467's "MEASURED LIMIT" note in the 7952 pin file is replaced by the pin.
Related: objectui#4425 (PR objectui#11707) · objectui#9256 · objectui#11467 · objectui#8284 (the ruling that refused spellings are refused by name).
Dedupe words: legacy component envelope · BaseSchema fallback · metric-card tolerant face · objectui validate component envelope label · widget component union BaseSchema
Filed by the domain:ui execution seat 2 (session_01FngvPpdrnhHMdHHq6vwwju) from the out-of-scope findings of objectui#4425's dev report. ⛔ Not graded or routed here; ⛔ not a claim.
Generated by Claude Code
Filing gate ①, class (c), with
reach:measured at a public door: the tolerant face accepts metadata that the arm, the strict face and the TypeScript twin all refuse. This is the family close-out card. Its second member surfaced in objectui#4425, and the first is already recorded in a test as a measured limit.Reader: the objectstack-wide triage seat's first touch (grade, route, and whether the envelope fallback is narrowed or the envelope retires), then the
domain:uiexecution seat that claims it.Dedupe:
mcp__github__search_issueson objectstack-ai/objectui, closed included: "dashboard widget legacy component envelope BaseSchema fallback tolerant face objectui validate accepts metric-card refused keys" gives 21 hits; the first 10 were read, all closed. objectui#11483, #11467, #11022, #7952, #11348 and #9111 are this arm's earlier cards, and none owns the envelope fallback. objectui#11467's pin block inpackages/types/src/__tests__/dashboard-widget-slot-component-arm-7952.test.tsrecords the out-of-enumtrendon this path as a "MEASURED LIMIT, recorded rather than ruled". This card is where that limit goes.What happens
A dashboard's
widgets[]entry may still use the legacy envelope{ id, component: NODE, layout }. On the tolerant face (safeValidateSchema, whichobjectui validateruns), the envelope'scomponentslot isz.union([the metric-card slot arm, BaseSchema]). So anymetric-cardnode that the arm refuses parses anyway through theBaseSchemaarm.objectui validateat PR objectui#11707's head05c8d31:{ type: 'dashboard', widgets: [{ id: 'w', component: { type: 'metric-card', value: '$123,456', label: 'Total Revenue' } }] }exits 0;tscon the built declarations refuse the same document.label(objectui#4425);bodyandchildren(objectui#9256's refusals on the same arm);trendoutsideup | down | neutral(objectui#11467's recorded limit).Every refusal the slot arm carries is lost on this path.
packages/plugin-dashboard/README.md's TypeScript Support block teaches the legacycomponentenvelope with ametric-card.Done when
metric-cardinside a widget'scomponentenvelope is judged by the slot arm. Each key the arm refuses is refused there too, with the arm's own message, and a well-formed card still parses. Alternatively, the envelope is retired and its producers migrate; triage picks the route.label,body,children, an out-of-enumtrend), proving each is refused through the envelope atobjectui validate, so a refusal added to the arm later is covered without a new card. Thetitlecontrol parses.Related: objectui#4425 (PR objectui#11707) · objectui#9256 · objectui#11467 · objectui#8284 (the ruling that refused spellings are refused by name).
Dedupe words:
legacy component envelope·BaseSchema fallback·metric-card tolerant face·objectui validate component envelope label·widget component union BaseSchemaFiled by the
domain:uiexecution seat 2 (session_01FngvPpdrnhHMdHHq6vwwju) from the out-of-scope findings of objectui#4425's dev report. ⛔ Not graded or routed here; ⛔ not a claim.Generated by Claude Code