Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

@object-ui/layout 的 PageNodeRenderer 是没人注册的死渲染器,props 还是 … & any #3223

Closed

Description

@os-zhuang

在 objectui#3161(objectstack#4115 台账批次 7)把 @object-ui/layout 的 Page 改名为 PageNodeRenderer 时发现,未在该 PR 处理(改名之外都是行为变更)。

两件事

1. 它没有被注册,也没有任何调用点。

packages/layout/src/index.ts 的 registerLayout() 明确写着:

NOTE: 'page' registration is handled by @object-ui/components PageRenderer. That renderer supports page types (record/home/app/utility), named regions, and PageVariablesProvider. Do NOT re-register 'page' here to avoid conflicts.

全仓 grep 也没有任何地方从 @object-ui/layout import 它。也就是说这个组件只通过 export * from './Page' 出现在公开 API 里,ComponentRegistry 里的 page 键归 @object-ui/components 的 PageRenderer。要么它是死代码该删,要么它是一个未接线的能力——两者的处置不同,需要知道意图的人拍板。

2. props 是 { schema: PageNodeSchema; className?; style?; id? } & any。

与 any 求交会吸收整个类型:这个签名除了"有个 schema"以外什么都没说,任何拼错的 prop、任何类型不符的 schema 都能通过。与 objectui#3221([key: string]: any)、objectstack#4075 同一机制,只是写法不同——批次 6 记录的三种"注销编译期检查"的写法之外的第四种。

如果结论是保留,应把透传 props 收敛成显式类型(它只是把 ...props 转发给每个子 SchemaRenderer);如果结论是删除,连同 export * from './Page' 一起删,并加 changeset(公开 API 移除)。

关联:objectstack#4115、objectui#3161、objectui#3221。

Activity

  1. os-zhuang commented on Aug 2, 2026

    @os-zhuang
    ContributorAuthor

    PM 处置:入队,建议删除;不单独占一个决策位

    「删还是接线」表面上要知道意图,但这一处已经被既有规则覆盖,不必等拍板:

    • ADR-0049(enforce-or-remove) 的默认答案就是删。它没有注册、没有调用点,page 键已经明确归 @object-ui/components 的 PageRenderer,而且 registerLayout() 里那条 NOTE 是在主动劝阻把它注册回去;
    • 「不扩边界」轴:接线意味着让 page 有两个渲染器,那是新增一条要长期维护的分叉,没有任何需求在要;
    • 代价不对称:删错了,git revert 就回来;留着,它就是一份带 & any 签名的公开 API——下一个 session(或 AI 作者)读到 @object-ui/layout 导出一个 PageNodeRenderer,合理推断它是页面渲染的入口,然后接一个永远不会被调用的东西。

    所以按 删除 派工:连同 export * from './Page' 一起移除,加 major changeset(公开 API 移除)。

    若维护者的本意是「它是一个未接线的能力,将来要用」,在此留言即可 —— 我会改派为「收敛 props 类型 + 记录为什么不注册」。在收到相反意见之前,按上面执行。

    不与 batch 7(#3224)合并施工:那个 PR 已开,不扩它的范围。

    关联依赖:与 #3221 无冲突(不同包),可并行。


    Generated by Claude Code

  2. self-assigned this
    on Aug 2, 2026
  3. os-zhuang commented on Aug 2, 2026

    @os-zhuang
    ContributorAuthor

    认领:PM 循环第 6 轮(分片:objectui 整仓)
    会话:session_01PRJtkgUAaVG11FsJQbvZWA
    分支:claude/issue-3223-remove-dead-page-renderer
    Worktree:objectui-issue-3223

    按前一条评论的处置:删除(ADR-0049 默认),连同 export * from './Page',加 major changeset。

    同轮并行:#3218(app-shell)、#3221(packages/fields),文件宇宙不相交。


    Generated by Claude Code

  4. added a commit that references this issue on Aug 3, 2026
    6d868e1
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