Skip to content

[17.0-rc2验收] crm_campaign_member 的 "Basic Information" 字段组四字段全部被提升进详情页高亮条 —— 组在详情页永不渲染(lint field-group-shadowed) #715

Closed

Description

@yinlianghui

现象

pnpm exec objectstack lint 在 rc.2 上稳定报告(两次运行一致):

⚠ object "crm_campaign_member": crm_campaign_member: every field in group "basic"
  (member_number, crm_campaign, crm_lead, crm_contact) is hoisted into the detail
  highlight strip (or is the record title) — the group renders on forms but never
  on detail pages
    field-group-shadowed  at objects[2].fieldGroups

即 src/objects/campaign_member.object.ts:64-67 声明的两个字段组里,basic 组(Basic Information)的全部 4 个字段(member_number / crm_campaign / crm_lead / crm_contact)都会被详情页高亮条(或记录标题)提走 —— 该组标签在表单上出现、在详情页永不出现,详情页只剩 "Response Tracking" 一个组,表单与详情的分组结构不一致。

复现

  1. hotcrm@0899b4f,pnpm exec objectstack lint(带不带 --skip-i18n 均可);
  2. 观察上述唯一一条 field-group-shadowed warning(同批 12 条 naming/namespace-prefix 为 lint 规则误报,另案 objectstack#5510,勿混)。

期望 vs 实际

  • 期望:详情页与表单呈现同一套分组结构;或者该组本来就只想供表单使用 —— 那也应当是显式的授权选择,而不是被高亮条副作用「碰巧」清空。
  • 实际:basic 组在详情页是死标签,浏览者看到的分组与表单作者声明的不一致。

证据

lint 输出摘录见上;campaign_member.object.ts fieldGroups/fields 段可对照(4 个字段全部 group: 'basic')。

环境

hotcrm@0899b4f + @objectstack 17.0.0-rc.2

落点分析

HotCRM 元数据侧(非平台):src/objects/campaign_member.object.ts。可选修法:给 basic 组补一个不被提升的字段(如 status / responded_date 调整归组),或删除该组把 4 个字段留给高亮条并将其余字段并入单组 —— 取决于修复线想要的详情页信息层次。验收组只测不改,故立单记录。

Activity

  1. added
    bugSomething isn't working
    metadataDeclarative metadata — schema, security posture, UI surfaces
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 5, 2026
  2. self-assigned this
    on Aug 6, 2026
  3. yinlianghui commented on Aug 6, 2026

    @yinlianghui
    ContributorAuthor

    [PM 认领 · 修复线 R39] session_01VHrPAGEgFDoHjphqYG4BMa · branch claude/issue-715-campaign-member-highlight-shadow

    文件面:crm_campaign_member 的对象/页面元数据(highlightFields 与 fieldGroups)。

    裁定:

    1. premise-check:lint field-group-shadowed 在 fresh main 是否仍报;
    2. 修复方向:高亮条与字段组去重,让 "Basic Information" 组在详情页可渲染——哪些字段留高亮、哪些回组,对齐仓内同类对象的既有处理口径;
    3. ⛔ 范围栅栏:相邻 campaign-members 三语文档的《Standard list views》承诺了 Members 选项卡与四个成员列表视图,元数据里一个都没有;「Add Members」选人流程同样不存在 #961(campaign-members 文档的 Members 选项卡/成员视图承诺)在决策箱,其文档宣称面一字不动;
    4. lint 已覆盖此缺陷类则不必新增守卫;changeset patch。

    Generated by Claude Code

  4. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    ContributorAuthor

    [PM 验收 · R39] ✅ 通过。PR #1007 已转 ready 并武装 auto-merge。

    • premise 在 rc.3 fresh main 逐字复现(lint 告警原文 + 元数据双写取证 + 从 @objectstack/lint dist 里读出 hoisting 模型:title + 前四个非 title 高亮项)。
    • 修法取的是语义正解:added_date 是"成员关系何时建立"而非"如何响应",移回 basic 组一行了账;高亮条一字未动并注释了取舍。lint 13→12 警告,field-group-shadowed 归零。
    • 守卫补全漂亮:test/field-groups-coverage.test.ts 本就复刻了 validateSemanticRoles 三规则之二,这次补上第三条(组不得被高亮条整体遮蔽)正好收口整个家族;反向验证方向预判正确,红报错带平台规则自己的字段清单。
    • 报告如实记录两条未立单发现(lint 警告不 gate、平台 missing-name-field 规则与 ADR-0079 自相矛盾),PM 接手处理:前者查重后立 finding,后者直接立 objectstack 上游单。

    Generated by Claude Code

  5. added and removed on Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingmetadataDeclarative metadata — schema, security posture, UI surfacespm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions