Skip to content

showcase: ContactViews 从 views barrel 导出却从未登记进 config 的 views: —— 「创建表单 ≠ 编辑表单」这个被文档引用的示例根本不在运行的 stack 里 #5457

Description

@baozhoutao

发现于 #5417 的实测(PR #5455):跑新规则时,examples/app-showcase 全配置命中 14 条,但 showcase_contact 那条(formViews.create 的 { label: 'Who is this?' })没有出现。追下去发现原因不是规则漏了,而是那份元数据压根没进 stack。

事实

examples/app-showcase/src/ui/views/index.ts 导出五个视图容器:

TaskViews / ProjectViews / InquiryViews / BusinessUnitViews / ContactViews

examples/app-showcase/objectstack.config.ts:196 只登记了四个:

views: [TaskViews, ProjectViews, InquiryViews, BusinessUnitViews],

ContactViews 不在其中,contact.object.ts 也没有内嵌 views,所以 showcase_contact 在运行的 stack 里一个视图容器都没有。os validate 的统计行也印证:UI: 1 Apps 4 Views 28 Pages ...。

为什么这不是「无所谓的死代码」

  1. src/ui/apps/index.ts:53 的导航 { id: 'nav_contacts', type: 'object', objectName: 'showcase_contact', label: 'Contacts' } 是开着的 —— 点进去拿到的是平台派生的默认视图,而不是 contact.view.ts 里手写的那对。
  2. contact.view.ts 用约 30 行注释把自己定位成「创建表单 ≠ 编辑表单」这一模式的范本,并点名了 content/docs/guides/solutions/create-vs-edit-form.mdx 与 ADR-0047。文档指向的示例元数据,运行时从来没被加载过。
  3. 它的 list.addRecord: { enabled: true, mode: 'form', formView: 'create' } 指向的 formViews.create 同样不在 stack 里 —— 这条引用当前不悬空,只是因为整个容器都不在;一旦有人只把容器补进去而不检查,才会暴露。
  4. 没有任何门禁会说话:views/index.ts 的 barrel 导出没有消费者检查,config 的 views: 是一个手写数组,少一项和少写一行注释在工具链看来没有区别。

showcase_contact 上还有一条相邻但不同的发现 #5443(九个字段声明了 group 却没有 fieldGroups)—— 那条讲对象侧的分组,本条讲视图容器根本没进 stack,两者不重叠;不过如果有人要修 showcase_contact 这一片,值得一起看。

复现

cd examples/app-showcase && pnpm validate     # 统计行显示 4 Views
grep -n 'views:' objectstack.config.ts        # ContactViews 不在数组里

建议方向(供分诊,不预实现)

要么把 ContactViews 补进 views:(然后确认它带来的告警 —— 按 #5417 的规则,formViews.create 那个无名段落会多一条 advisory,不 gate),要么把这个文件与它引用的文档一起下掉。哪一种是对的,取决于 showcase 是否还想 demo 这个模式,属产品判断。

顺带值得问一句更一般的问题:是否需要一条门禁,检查 src/ui/views/index.ts(以及同类 barrel)导出的每个容器都真的被 config 登记 —— 「导出了、写了文档、却没进 stack」这一类漏,今天全靠人眼。


发现于 #5417 / PR #5455 的实测过程,超出该 issue 范围,按 Prime Directive #10 单独记录,不认领。

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions