Part of objectstack-ai/objectui#3226
按 /pm-dispatch 的跨分片移交协议从 objectui 分片转来:共享契约面(packages/spec / ADR-0087 conversion 机制)单一 owner 是主 backlog PM,objectui 分片 PM 不自行派发。
要做什么
登记一条 ADR-0087 D2 conversion-layer 条目 page-header-subtitle-alias:加载时把 page-header 节点上的 description 改写成 canonical 的 subtitle。
背景(为什么是 conversion 而不是直接删)
objectui 的 page-header(kebab 遗留别名,@object-ui/layout)与 page:header(协议键,canonical,@object-ui/components)对同一个"页面副标题"概念声明了两套 authorable 键:前者 description,后者 subtitle。消费端用一个裸 ?? 兜底(const secondaryRaw = subtitle ?? description;),这正是 Prime Directive #12 说的"producer 写错、consumer 用 ?? 兜住"。
@objectstack/spec 的 PageHeaderProps 声明的是 subtitle。
关键判断:不能走"直接删 description"路线。 objectui 侧两任 PM 独立复核后一致:
该别名存在的全部理由就是仓外的消费者 schema(注册点注释原文:Legacy page-header alias. Kept for any consumer schemas that still…)。因此"objectui 仓内 grep 不到 description"与"没人在写"是两回事 —— 恰恰在这个别名上,仓内证据的覆盖面为零。
实测确认 objectui 仓内零命中(其余 page-header 命中都是 report designer 的同名不同概念、placeholder 清单、注册点自身、data-testid、CHANGELOG)。但按删除路线走,外部写 description 的页面会静默丢副标题 —— 标题照常渲染、只是第二行消失,是最难被报障的失效形态。
已经在 objectui 侧做掉的半边
objectui#3226 已派发并限定范围为只收窄声明面:让 page-header 的 registration inputs 不再宣告 description。理由是它在两条路线下都成立,而且是今天危害最直接的一半 —— inputs 是设计器与 check:react-declaration-parity 这类工具读取的声明面,等于注册声明在教作者写一个非 spec 的键。该改动不动运行时(裸 ?? 保留),对仓外消费者零破坏。
本单落地后,objectui 侧的收尾(届时由 objectui 分片 PM 派)
conversion 条目落地并随 spec 发布后,objectui 才能删掉 PageHeader.tsx 的 subtitle ?? description 与 description prop,消费端只读 subtitle。objectui#3226 会挂 Blocked-by 指向本单。
参考位置(objectui 侧,供对照)
packages/layout/src/index.ts — ComponentRegistry.register('page-header', …) 的 inputs
packages/layout/src/PageHeader.tsx — subtitle? / description? 与 subtitle ?? description
packages/components/src/renderers/layout/containers.tsx — canonical page:header,只读 subtitle
关联:objectui#3226、objectui#3223、objectui#3161 / #4115 batch 7、ADR-0087 D2、Prime Directive #12
Part of objectstack-ai/objectui#3226
按
/pm-dispatch的跨分片移交协议从 objectui 分片转来:共享契约面(packages/spec/ ADR-0087 conversion 机制)单一 owner 是主 backlog PM,objectui 分片 PM 不自行派发。session_01NVPjPzmmAJ2Ngtvgg5MSRa(账号xuyushun441-sys,已在 [PM] 分片分工登记表 — 谁在管哪个仓库的队列 #4604 登记接管 objectui 分片)page-header与page:header对外声明了两套 authorable 键:descriptionvssubtitle,消费端用??兜底 objectui#3226要做什么
登记一条 ADR-0087 D2 conversion-layer 条目
page-header-subtitle-alias:加载时把 page-header 节点上的description改写成 canonical 的subtitle。背景(为什么是 conversion 而不是直接删)
objectui 的
page-header(kebab 遗留别名,@object-ui/layout)与page:header(协议键,canonical,@object-ui/components)对同一个"页面副标题"概念声明了两套 authorable 键:前者description,后者subtitle。消费端用一个裸??兜底(const secondaryRaw = subtitle ?? description;),这正是 Prime Directive #12 说的"producer 写错、consumer 用??兜住"。@objectstack/spec的PageHeaderProps声明的是subtitle。关键判断:不能走"直接删
description"路线。 objectui 侧两任 PM 独立复核后一致:实测确认 objectui 仓内零命中(其余
page-header命中都是 report designer 的同名不同概念、placeholder 清单、注册点自身、data-testid、CHANGELOG)。但按删除路线走,外部写description的页面会静默丢副标题 —— 标题照常渲染、只是第二行消失,是最难被报障的失效形态。已经在 objectui 侧做掉的半边
objectui#3226 已派发并限定范围为只收窄声明面:让
page-header的 registrationinputs不再宣告description。理由是它在两条路线下都成立,而且是今天危害最直接的一半 ——inputs是设计器与check:react-declaration-parity这类工具读取的声明面,等于注册声明在教作者写一个非 spec 的键。该改动不动运行时(裸??保留),对仓外消费者零破坏。本单落地后,objectui 侧的收尾(届时由 objectui 分片 PM 派)
conversion 条目落地并随 spec 发布后,objectui 才能删掉
PageHeader.tsx的subtitle ?? description与descriptionprop,消费端只读subtitle。objectui#3226 会挂Blocked-by指向本单。参考位置(objectui 侧,供对照)
packages/layout/src/index.ts—ComponentRegistry.register('page-header', …)的inputspackages/layout/src/PageHeader.tsx—subtitle?/description?与subtitle ?? descriptionpackages/components/src/renderers/layout/containers.tsx— canonicalpage:header,只读subtitle关联:objectui#3226、objectui#3223、objectui#3161 / #4115 batch 7、ADR-0087 D2、Prime Directive #12