Filing gate ① — a product defect with a named landing site, finding class (b): the published text contradicts a declared contract.
Reader, and what they do: the domain:skills execution seat. It corrects the published skill text and its eval so that they teach action ids. skills/** is a governed surface (Tier H), so the PR waits on the maintainer's hand.
Found by the #20105 dev (PR #20171, report on #20105, out_of_scope_findings[0]). Filed by domain:spec seat 2 (session_01QcAS3qiYYZNezaxZxaUdMV, seat post #18549), which re-read every site below on origin/main. ⛔ Not graded or routed here; that belongs to triage.
The contract
The published text that contradicts it (origin/main)
skills/objectstack-ui/rules/pages.md:50 — the catalogue row: 「page:header | Title + subtitle + breadcrumb + inline actions: Action[]」.
skills/objectstack-ui/rules/pages.md:90 — the example: actions: [ConvertLeadAction], // inline action buttons in header, where ConvertLeadAction is a defineAction(...) object (:69).
skills/objectstack-ui/rules/pages.md:124-125 — the note: 「pass full Action objects into page:header.properties.actions」.
skills/objectstack-ui/evals/views-apps-actions-pages.json — its expected_output names 「the Action object passed in properties.actions」 (read by the dev; the eval grades an AI author against the wrong shape).
Reach
A public door. The dev ran the component-props rule of os validate (validateComponentProps) on exactly the taught shape. It reports component-props-invalid (warning) 「actions.0: Invalid input: expected string, received object」. An AI author following the skill writes metadata that validation flags. The renderer's object arm is only an undeclared transition tolerance.
Seam: spec:PageHeaderProps.actions → renderer: objectui PageHeaderRenderer (id lookup per ruling B) | producer: skills/objectstack-ui/rules/pages.md and its eval.
Dedupe
Two queries (mcp__github__search_issues, repo-scoped, semantic, closed included):
Dedupe words: objectstack-ui pages.md page:header actions Action objects · skill inline action objects page header ids · PageHeaderProps.actions skill ConvertLeadAction
Generated by Claude Code
Filing gate ① — a product defect with a named landing site, finding class (b): the published text contradicts a declared contract.
Reader, and what they do: the
domain:skillsexecution seat. It corrects the published skill text and its eval so that they teach action ids.skills/**is a governed surface (Tier H), so the PR waits on the maintainer's hand.Found by the #20105 dev (PR #20171, report on #20105,
out_of_scope_findings[0]). Filed bydomain:specseat 2 (session_01QcAS3qiYYZNezaxZxaUdMV, seat post #18549), which re-read every site below onorigin/main. ⛔ Not graded or routed here; that belongs to triage.The contract
packages/spec/src/ui/component.zod.ts:PageHeaderPropsdeclaresactions: z.array(z.string()).optional().describe('Action IDs to show in header').PageHeaderProps.actionsdeclaresz.array(z.string())but objectui's canonicalpage:headerrenderer consumes ActionDef objects — satisfying the schema deletes every header button #11592 (maintainer 「全部同意」, 2026-08-25): the canonicalpage:headerimplements the id-lookup contract the spec already declares. objectui implemented it (changeset6252-page-header-action-ids), andPageHeaderProps.actionsdeclaresz.array(z.string())but objectui's canonicalpage:headerrenderer consumes ActionDef objects — satisfying the schema deletes every header button #11592 is closed completed.The published text that contradicts it (
origin/main)skills/objectstack-ui/rules/pages.md:50— the catalogue row: 「page:header| Title + subtitle + breadcrumb + inlineactions: Action[]」.skills/objectstack-ui/rules/pages.md:90— the example:actions: [ConvertLeadAction], // inline action buttons in header, whereConvertLeadActionis adefineAction(...)object (:69).skills/objectstack-ui/rules/pages.md:124-125— the note: 「pass fullActionobjects intopage:header.properties.actions」.skills/objectstack-ui/evals/views-apps-actions-pages.json— itsexpected_outputnames 「the Action object passed inproperties.actions」 (read by the dev; the eval grades an AI author against the wrong shape).Reach
A public door. The dev ran the component-props rule of
os validate(validateComponentProps) on exactly the taught shape. It reportscomponent-props-invalid(warning) 「actions.0: Invalid input: expected string, received object」. An AI author following the skill writes metadata that validation flags. The renderer's object arm is only an undeclared transition tolerance.Seam:
spec:PageHeaderProps.actions→ renderer: objectuiPageHeaderRenderer(id lookup per ruling B) | producer:skills/objectstack-ui/rules/pages.mdand its eval.Dedupe
Two queries (
mcp__github__search_issues, repo-scoped, semantic, closed included):objectstack-ui skill pages.md page:header actions passes full Action objects but PageHeaderProps.actions is action ids→ 0 hits.page header actions inline Action objects skill teaches wrong shape action ids→ 1 hit:PageHeaderProps.actionsdeclaresz.array(z.string())but objectui's canonicalpage:headerrenderer consumes ActionDef objects — satisfying the schema deletes every header button #11592 (closed completed). That is the ruling this card applies to the skill text, not a duplicate.Dedupe words:
objectstack-ui pages.md page:header actions Action objects·skill inline action objects page header ids·PageHeaderProps.actions skill ConvertLeadActionGenerated by Claude Code