Filed by the objectstack spec seat (session session_012xGvxcwPRTJfA7RfjXEYA4, R8) per the contract-first split recorded on objectstack#12126 — the accepted PR objectstack-ai/objectstack#12616 declares headerColor on the spec's strict record:details section schema as a closed enum; this card is the objectui leg the maintainer's ruling names.
Ruling (binding — not re-opened here)
Maintainer, 2026-08-26, recorded at objectstack#12126 comment 5419726057, verbatim provenance 「其他接受你的建议」 (ruling A): the spec declares headerColor as z.enum over the six tokens objectui#6294 ships — muted, muted/50, accent, primary/10, secondary/10, destructive/10 — "and the @object-ui/types mirror narrows to match."
What this card does
Narrow the headerColor declaration in @object-ui/types (the record:details/detail-section mirror — views.ts / zod/views.zod.ts, currently string-typed with @example 'muted', 'primary/10') to the same closed six-token vocabulary, so the two repos' contracts agree. The renderer itself (packages/plugin-detail/src/headerColor.ts) already ships exactly these six as its lookup; its bg-* pass-through stays an undeclared renderer affordance (spec ruling explicitly rejected declaring it — option B's capability illusion).
Executable acceptance criterion
@object-ui/types' headerColor declaration accepts exactly the six tokens (parse/type-level), rejects other strings, and matches HEADER_COLOR_CLASSES' key set one-to-one (pin it against the module so the two cannot drift). objectui#6267 held the types package earlier — check for surface conflicts at claim.
Blocked-by: objectstack-ai/objectstack#12616
(Unlock: when that PR merges, the spec-side vocabulary is on objectstack main; this card is then a mechanical mirror narrowing. Reader: the objectui execution seat's queue scan.)
Filed by the objectstack spec seat (session
session_012xGvxcwPRTJfA7RfjXEYA4, R8) per the contract-first split recorded on objectstack#12126 — the accepted PR objectstack-ai/objectstack#12616 declaresheaderColoron the spec's strictrecord:detailssection schema as a closed enum; this card is the objectui leg the maintainer's ruling names.Ruling (binding — not re-opened here)
Maintainer, 2026-08-26, recorded at objectstack#12126 comment 5419726057, verbatim provenance 「其他接受你的建议」 (ruling A): the spec declares
headerColorasz.enumover the six tokens objectui#6294 ships —muted,muted/50,accent,primary/10,secondary/10,destructive/10— "and the@object-ui/typesmirror narrows to match."What this card does
Narrow the
headerColordeclaration in@object-ui/types(the record:details/detail-section mirror —views.ts/zod/views.zod.ts, currentlystring-typed with@example 'muted', 'primary/10') to the same closed six-token vocabulary, so the two repos' contracts agree. The renderer itself (packages/plugin-detail/src/headerColor.ts) already ships exactly these six as its lookup; itsbg-*pass-through stays an undeclared renderer affordance (spec ruling explicitly rejected declaring it — option B's capability illusion).Executable acceptance criterion
@object-ui/types' headerColor declaration accepts exactly the six tokens (parse/type-level), rejects other strings, and matchesHEADER_COLOR_CLASSES' key set one-to-one (pin it against the module so the two cannot drift). objectui#6267 held the types package earlier — check for surface conflicts at claim.Blocked-by: objectstack-ai/objectstack#12616
(Unlock: when that PR merges, the spec-side vocabulary is on objectstack main; this card is then a mechanical mirror narrowing. Reader: the objectui execution seat's queue scan.)