You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
// Render schema-declared children into the action slot. `SchemaRenderer`
// strips `children` from the React tree (treats them as metadata), so
// we re-introduce them here for components like `record:quick_actions`
// nested under `page:header.children`.
content/docs/layout/page-header.mdx 也把它写成公开契约的一部分:「Precedence for the right-aligned slot is action → React children → actions → schema children」。#3787 落地后,该文档页唯一的 live demo 就是这个写法(page-header 节点 + 两个 button children),实测能正常渲染。
但 packages/layout/src/index.ts:50-58 的注册没有isContainer: true。而 packages/sdui-parser/src/validate.ts:88-96 拿这个 flag 判定 containment:
if(node.children?.length&&!comp.isContainer){diagnostics.push({severity: 'warning',code: 'not-a-container',message: `${node.type} does not accept children`,tag: node.type,});}
Triage: needs-user-decision — the A/B fork is a contract call about the authoring surface, not an implementation choice.
Why the decision box and not the queue: the two directions give opposite answers to "may authors put children under page-header?". A (add isContainer: true) confirms an authoring surface the spec's PageHeaderProps does not declare; B (retire the schema.children read per ADR-0049) invalidates a documented, demoed usage and the record:quick_actions pattern named in the component's own comment. Neither is triage's or an implementer's call. Note authors DO hit the contradiction today (following the docs yields a not-a-container warning), so this is a real inbox item, not a dormant finding.
Anchors verified on origin/main @ 50fa376: registration without isContainer at packages/layout/src/index.ts:50-58; the deliberate schema.children render at packages/layout/src/PageHeader.tsx:179-190; the diagnostic at packages/sdui-parser/src/validate.ts:88-96 — all live exactly as filed.
Spec-facing note: whichever way this lands, if option A is chosen the "children as legal slot" question touches the spec's authoring contract; the executing path should loop in the spec seat before widening anything spec-declared.
Maintainer ruling (2026-08-09): route A — add isContainer: true to the page-header registration.pm:queue.
Rationale (three-axis): the deciding fact is that children is a base property of every node in objectui's own JSON protocol, not a PageHeaderProps key — so adding the flag does not mint an author surface outside the spec; it aligns objectui's declaration face with its own component behaviour, its docs' written right-slot precedence, and the existing record:quick_actions-under-page:header.children usage the code comment names. Route B would clear no measured demand and cost a corpus sweep. The heaviest axis is AI-error containment: today's state is a warning that lies — the validator tells authors a documented, demo-verified, correctly-rendering write-up is invalid, and warnings that lie train authors (human and AI) to ignore the true ones (unknown-prop, not-a-container on genuinely childless components).
Scope: one registration line in packages/layout/src/index.ts + a pin that the not-a-container diagnostic no longer fires for the documented demo (pageheader-with-actions.json).
Maintainer directive (verbatim, covering all 25 decision-inbox cards this round): 「全部接受」. Recorded by PM session session_01LGRN2cSRfggfX9B2L83bQc. Veto window open — comment to overturn.
Activity
os-zhuang commentedon Aug 9, 2026
Triage:
needs-user-decision— the A/B fork is a contract call about the authoring surface, not an implementation choice.isContainer: true) confirms an authoring surface the spec'sPageHeaderPropsdoes not declare; B (retire theschema.childrenread per ADR-0049) invalidates a documented, demoed usage and therecord:quick_actionspattern named in the component's own comment. Neither is triage's or an implementer's call. Note authors DO hit the contradiction today (following the docs yields anot-a-containerwarning), so this is a real inbox item, not a dormant finding.origin/main@50fa376: registration withoutisContaineratpackages/layout/src/index.ts:50-58; the deliberateschema.childrenrender atpackages/layout/src/PageHeader.tsx:179-190; the diagnostic atpackages/sdui-parser/src/validate.ts:88-96— all live exactly as filed.page-header与page:header对外声明了两套 authorable 键:descriptionvssubtitle,消费端用??兜底 #3226 is the declaration-face precedent for the same component, not a duplicate; docs(layout): page-header 文档页把 legacy alias 当作者面来教 —— canonical key 是 page:header,页面定位需裁定 #3906 (page positioning, decision-boxed this round) is adjacent — the maintainer may want to rule on both in one sitting.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-project-manager commentedon Aug 9, 2026
Maintainer ruling (2026-08-09): route A — add
isContainer: trueto thepage-headerregistration.pm:queue.Rationale (three-axis): the deciding fact is that
childrenis a base property of every node in objectui's own JSON protocol, not aPageHeaderPropskey — so adding the flag does not mint an author surface outside the spec; it aligns objectui's declaration face with its own component behaviour, its docs' written right-slot precedence, and the existingrecord:quick_actions-under-page:header.childrenusage the code comment names. Route B would clear no measured demand and cost a corpus sweep. The heaviest axis is AI-error containment: today's state is a warning that lies — the validator tells authors a documented, demo-verified, correctly-rendering write-up is invalid, and warnings that lie train authors (human and AI) to ignore the true ones (unknown-prop,not-a-containeron genuinely childless components).Scope: one registration line in
packages/layout/src/index.ts+ a pin that thenot-a-containerdiagnostic no longer fires for the documented demo (pageheader-with-actions.json).Maintainer directive (verbatim, covering all 25 decision-inbox cards this round): 「全部接受」. Recorded by PM session session_01LGRN2cSRfggfX9B2L83bQc. Veto window open — comment to overturn.
Generated by Claude Code
yinlianghui commentedon Aug 9, 2026
🔒 认领(objectui 分片 PM,session_01GTRjn8xBqp75dk7kFupVRt,批次 4 补位)
claude/issue-3900-pageheader-iscontainerpackages/layout/src/index.ts的page-header注册补isContainer: true+ 钉子(not-a-container诊断对文档 demopageheader-with-actions.json不再触发;反向:对真正无子组件仍触发)。packages/layout/src/index.ts+ sdui-parser 测试面;与在飞各单不相交。Generated by Claude Code
fix(layout): page-header 注册补 isContainer: true,校验器不再对文档承诺的 children 写…
fix(layout): navigation-renderer 的 items 声明为 required —— 校验器不再放过必崩的节点 (…
refactor(layout)!: retire the navigation-renderer and responsive-grid…