Skip to content

[移交自 objectui] 登记 ADR-0087 D2 conversion 条目 page-header-subtitle-alias(descriptionsubtitle) #4827

Description

@xuyushun441-sys

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/specPageHeaderProps 声明的是 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.tsxsubtitle ?? descriptiondescription prop,消费端只读 subtitle。objectui#3226 会挂 Blocked-by 指向本单。

参考位置(objectui 侧,供对照)

  • packages/layout/src/index.tsComponentRegistry.register('page-header', …)inputs
  • packages/layout/src/PageHeader.tsxsubtitle? / 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions