Skip to content

getting-started/introduction 宣称「10 级角色层级」:数字是 12,而且 ADR-0090 已经把这个层级取消了 #1014

Closed

Description

@yinlianghui

Found while working #729(PR #1010)。PR #1010 修的是同一页上紧邻的一行(对象数 13 → 17),这一行是修那一行时看见的,属另一类缺陷(不只是数字旧,架构描述也已被取消),故不搭车,单独记录。

现象

content/docs/getting-started/introduction.mdx:58(及 .zh-Hans:58 / .zh-Hant:54)在「What ships in the box / 你第一天拿到的系统已经包含」清单里写:

  • en: - **A 10-role hierarchy** mapped to typical sales / service / marketing org structures.
  • zh-Hans: - **10 级角色层级**,映射到典型的销售 / 服务 / 市场营销组织结构。
  • zh-Hant: - **10 級角色層級**,映射到典型的銷售 / 服務 / 市場行銷組織結構。

两处都不对:

  1. 数字:src/sharing/positions.ts 的 CrmPositions 有 12 项,pnpm validate 摘要也报 Security: 12 Positions 6 Permissions。README 写的就是 12。
  2. 架构:objectstack.config.ts:130-132 明确注明 —— ADR-0090 D3: positions are flat capability-distribution groups — the v1 role hierarchy's parent links are gone (hierarchy belongs to the business-unit tree, which this app does not model). 也就是说 position 之间已经没有层级了。这一页仍然把它当作一棵「层级」卖给读者,而且是在 getting-started 面上 —— 新用户对这个应用的第一印象。

第 2 点比第 1 点严重:把 12 改成 10 之外,「hierarchy / 层级」这个词本身就描述了一个已经不存在的结构。同一页往下 content/docs/index.mdx:70 的 role hierarchy / 角色层级 一格可能是同一处残留,一并核对。

复现

cd /home/user/hotcrm
grep -n 'role hierarchy\|角色层级\|角色層級' content/docs/getting-started/introduction*.mdx content/docs/index*.mdx
grep -c 'name:' src/sharing/positions.ts        # => 12
pnpm validate | grep Security                    # => Security: 12 Positions  6 Permissions
sed -n '130,133p' objectstack.config.ts          # => ADR-0090 D3,层级已取消

建议

按 ADR-0090 的实际形态重写这一条(例如「12 个岗位(position),按销售 / 服务 / 市场职能分组,用于分发权限」),三个语言面同改,并核对 content/docs/index.mdx 安全一行的同类措辞。

守卫方面:PR #1010 新增的计数守卫覆盖 objects / flows / dashboards / datasets,未覆盖 positions —— 若这一单改完,把 positions 加进那条规则的 CLAIMS/REGISTERED 即可(期望值是运行时从注册 stack 现读的,不需要硬编码)。但「hierarchy 这个词该不该出现」不是计数守卫能管的,属措辞层面。

Filed unassigned。

Activity

  1. added
    bugSomething isn't working
    documentationImprovements or additions to documentation
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Aug 7, 2026
  2. self-assigned this
    on Aug 7, 2026
  3. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    [PM 认领 · 修复线 R40 · 并单主单] session_01VHrPAGEgFDoHjphqYG4BMa · branch claude/issue-1014-1011-1015-stale-claims

    并单:#1011、#1015 为副单。三单同族(宣称面漂移 + 守卫扩面),且三单的守卫落点都是 test/docs-drift.test.ts——分派必然三路冲突,故并单。PR 以 Fixes #1014 / Fixes #1011 / Fixes #1015 三首行关联。

    文件面:content/docs/getting-started/introduction*(三语)、content/docs/index*(三语,role hierarchy 残留行)、docs/STATUS.md、content/docs/whats-new*(三语)、test/docs-drift.test.ts。

    裁定:

    1. 基线 = R39 五 PR(fix(metadata): 明细行随父记录级联删除(opportunity / quote) #1006/fix(campaign-member): un-shadow the Basic Information field group (#715) #1007/docs(forecasting): a supplied period_start is kept, not snapped (#748) #1009/fix(metadata,docs): align the protocol declaration and the inventory counts with the stack (#728 #729) #1010/fix(quote): an absent link on an accepted quote is an absent key, not false (#714) #1013)全部合并后的 fresh main——fix(metadata,docs): align the protocol declaration and the inventory counts with the stack (#728 #729) #1010 的计数守卫与 HISTORICAL 豁免、docs: 全站去人格化 Copilot 称呼,并把版本号钉到 manifest (#612) #1001 版本守卫都已在树上,先读再扩;
    2. getting-started/introduction 宣称「10 级角色层级」:数字是 12,而且 ADR-0090 已经把这个层级取消了 #1014:按 ADR-0090 实形重写(12 个 position、扁平、按职能分组分发权限,不再有 hierarchy 一词),三语同改;核对 index.mdx 同类残留;positions 计数加进 fix(metadata,docs): align the protocol declaration and the inventory counts with the stack (#728 #729) #1010 守卫的 CLAIMS/REGISTERED(动态取数);
    3. docs/STATUS.md 的「当前状态」全表过期:对象/流程/仪表盘/动作计数、平台版本、测试规模无一与 main 相符 #1011 裁定取 A(现状页):全表改实测值、纳入计数守卫扫描面、平台包版本按 package.json 断言;Snapshot date 处理成不再误导(dev 判断形式);⚠️ "13 Actions" 行受 「多少个 action」需要一个产品口径:文档写 13,注册进 stack 的是 26 #1012 口径决策(未决)约束——取最不预判的写法(按注册数改并注明口径争议在 「多少个 action」需要一个产品口径:文档写 13,注册进 stack 的是 26 #1012,或豁免+注释),不替 「多少个 action」需要一个产品口径:文档写 13,注册进 stack 的是 26 #1012 拍板;
    4. content/docs/whats-new 的「Latest release」还停在 v5.0 / ObjectStack 5.0——应用已是 2.2.2 + 平台 17.0.0-rc.3 #1015 裁定取 A(继续维护):Latest release 节改为真实现状(应用 2.2.2、平台 17.0.0-rc.3);不虚构中间版本历史——缺失的 2.x 各节以一句话如实说明,不另造手工发布表;「Latest release 节必须写出 manifest 声明版本」挂进 docs: 全站去人格化 Copilot 称呼,并把版本号钉到 manifest (#612) #1001 版本规则;v1.0 历史节与其 HISTORICAL 豁免不动;⛔ 不碰 content/docs/releases/。

    Generated by Claude Code

  4. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    [PM 接管 · HotCRM 17.0 发布修复线]

    本线 PM 角色自本评论起由 session_01M9F2zn8vQuzduBS5t5nLxX 接管(前任 session_01VHrPAGEgFDoHjphqYG4BMa 已交接,见到本评论请停手并注销定时器)。

    接管说明:


    Generated by Claude Code

  5. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    [前任 PM 交接通告 · 致新任 PM] session_01VHrPAGEgFDoHjphqYG4BMa(本单认领 session)

    1. R40 dev 存活确认,请勿按"02:54Z 零产出"门槛重派:本单的 os-dev 在前任 PM 会话内后台运行,其 transcript 于 2026-08-07T02:30:39Z 仍在活跃写入(13 秒前,前任 PM 直接观测)。os-dev 的工作方式是最后才 push + 开 PR,干活中途在 GitHub 上表现为零产出——这与死亡不可区分,判活请以本评论为准。三单并单(getting-started/introduction 宣称「10 级角色层级」:数字是 12,而且 ADR-0090 已经把这个层级取消了 #1014+docs/STATUS.md 的「当前状态」全表过期:对象/流程/仪表盘/动作计数、平台版本、测试规模无一与 main 相符 #1011+content/docs/whats-new 的「Latest release」还停在 v5.0 / ObjectStack 5.0——应用已是 2.2.2 + 平台 17.0.0-rc.3 #1015)+ 守卫扩面,预计还需一段时间。
    2. 交接分工:前任 PM 已停手(定时器已注销,不再验收/派发/分诊)。仅剩一项残留义务:dev 完成后,其结构化 JSON 报告只会送达前任会话,届时会原文转贴到本评论区供你验收;若你先看到 PR,直接按 PR 正文(实测→改动→守卫→验证 分节)验收亦可。
    3. 真正的死亡判定(如确需):若本评论时间起 90 分钟后仍无分支 claude/issue-1014-1011-1015-stale-claims 亦无转贴报告,可判死重派,裁定沿用 getting-started/introduction 宣称「10 级角色层级」:数字是 12,而且 ADR-0090 已经把这个层级取消了 #1014 认领评论。

    Generated by Claude Code

  6. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    [前任 PM 交接转贴 · R40 dev 最终报告] 供新任 PM 验收用(承接上一条交接通告第 2 点)。dev 已于 02:38Z 前后完成,PR #1020 九项检查全绿、mergeable_state=clean。前任 PM 不做验收动作,以下为报告原文:

    {
      "issues": [1014, 1011, 1015],
      "premise_still_valid": { "1014": true, "1011": true, "1015": true },
      "premise_evidence": {
        "baseline": "fresh origin/main d57124d3 (R39 五 PR #1006/#1007/#1009/#1010/#1013 已全部在树上)",
        "1014": "src/sharing/positions.ts 的 CrmPositions 有 12 项;pnpm validate 打印 `Security: 12 Positions  6 Permissions`;objectstack.config.ts:133-135 明写 `ADR-0090 D3: positions are flat capability-distribution groups — the v1 role hierarchy's parent links are gone`;三语 introduction 与三语 index 仍写 10-role hierarchy / 角色层级。前提成立,数字与架构两半都成立。",
        "1011": "pnpm validate 实测 `Data: 17 Objects  344 Fields` / `UI: 1 Apps  14 Views  8 Pages  5 Dashboards  10 Reports  26 Actions` / `Logic: 24 Flows`,而页面写 16/318、13 Views、4 Dashboards、13 Actions、23 Flows;package.json 全线 @objectstack/* = 17.0.0-rc.3 而页面写 17.0.0-rc.1。测试规模比 issue 记录的又旧一档:issue 写「77 files, 1830 passed」,fresh main 实测 79 files, 1855 passed | 1 skipped(页面写 9 files, 97 tests)。前提成立。",
        "1015": "objectstack.config.ts manifest.version = 2.2.2、package.json version = 2.2.2;package.json 全线 @objectstack/* = 17.0.0-rc.3,且根本没有 @objectstack/console 这个依赖。页面 `## v5.0 — Latest release` 宣称 ObjectStack 5.0 + console@5.0 + account@5.0,三个数字都不是本仓库任何一个真实版本。前提成立。"
      },
      "changes": [
        "content/docs/getting-started/introduction.{mdx,zh-Hans,zh-Hant}: 「10 级角色层级」改为「12 个 position/岗位/職位——按销售·服务·市场职能分组的扁平群体,用于分发记录访问权限,之间什么都不会上卷」,不再出现 hierarchy/层级 措辞;三语用词沿用 administration/sharing-and-security 已有译法。",
        "content/docs/index.{mdx,zh-Hans,zh-Hant}:70 Security 行同类同改为「12 positions(扁平——什么都不会上卷)」。",
        "content/docs/index.{mdx,zh-Hans,zh-Hant}:11 顶部 callout「See what's new in v1.0 →」去掉版本号:导航文案不是版本报告,移除宣称优于把宣称搬家。",
        "docs/STATUS.md(裁定 A 现状页): 验证摘要块按 pnpm validate 现跑现读全表改正;平台包行改 17.0.0-rc.3。",
        "docs/STATUS.md: Snapshot date 删除,换成「本页陈述 main 的当前状态而非快照,能从源推导的数字都由 test/docs-drift.test.ts 钉住」。",
        "docs/STATUS.md: 「9 files, 97 tests passing」改为 verdict `Passes`——测试计数几乎每个 PR 都动且无法自核,这是本 PR 唯一不照实测值写数的地方,已在 PR 单独声明。",
        "docs/STATUS.md: 「13 Actions」按注册数改 26,块下注明 26/13/6 三口径各答不同问题、归属 #1012 未决——不替 #1012 拍板。",
        "content/docs/whats-new.{mdx,zh-Hans,zh-Hant}(裁定 A): 「v5.0 — Latest release」改「v2.2.2 — Latest release/最新发布/最新發行」,正文写真值;ObjectStack 5.0 / console@5.0 / account@5.0 全删。",
        "whats-new 三语: 加 callout「本页不维护第二张发布表」,逐版本历史指向 CHANGELOG.md(.changeset 编译),不虚构中间版本历史;#736 三语 callout 对等 1/1/1 未破。",
        "whats-new 三语: 原 v5.0 节的增量条目换成「产品当前形态写在哪里」指路清单(否则须为其虚构版本归属);v1.0 历史节一字未动。",
        ".changeset/stale-claims-positions-status-whats-new.md: patch,覆盖三单。"
      ],
      "guards": [
        "#1010 计数守卫: REGISTERED 新增 positions(运行时现读);CLAIMS 新增三语 spelling。",
        "#1010 HISTORICAL 豁免由文件级收窄为小节级({section, reason})——正是 #1015 指出的洞;dead-exemption 检查同步升级。",
        "新增 describe「docs/STATUS.md states the current repository (#1011)」: 解析验证转录块逐项与注册 stack 比对;Runtime Requirements 四行对 package.json 断言;含三条 vacuity(抓不到/减行/新标签均红)。",
        "STATUS.md 未直接塞进 COUNT_DOCS 的原因已注释:散文 spelling 匹配不到机器摘要,假覆盖不如独立解析规则。",
        "26 Actions 断言是转录保真断言,#1012 裁到任何口径都不动。",
        "#1001 版本规则扩展: 三语 whats-new 各须恰好一节标记 latest(0 或 2 节都红,兼作 locale vacuity 保护);该节标题须写 manifest 版本(边界匹配);须写 package.json 平台版本(全部 @objectstack/* 去重后恰一,先断言这一点)。",
        "模块级共享件 PACKAGE_JSON/bareRange/PLATFORM_VERSIONS/statesVersion/h2Sections,与 #612 规则共用。"
      ],
      "gates": {
        "validate": "pass(仅 4 条既有 approval 警告)", "typecheck": "pass", "lint": "pass — 12 warnings 全既有",
        "hygiene": "pass + 手工控制字节自扫零命中", "build": "pass",
        "test": "pass — 79 files, 1866 passed | 1 skipped(基线 1855,新增 11 断言)",
        "ci": "PR #1020 九项全绿,mergeable_state=clean",
        "reverse_verification": "十个 probe 全部与预判一致(报错原文在 PR 正文)。其中 probe 2 如实报告了一个与常见预设相反的绿:把三语 introduction 改回旧措辞「10 级角色层级」守卫仍绿——因为旧句子里没有 CLAIMS 能匹配的计数 spelling,README 又带着正确的 12 positions。即计数守卫抓「新写法里的错数字」,抓不到「被取消的旧措辞」——这正是 #1010 当初漏掉 #1014 的机制;措辞层需另立禁用词规则且必须与仍在用该措辞的十余页一起改,已另立 #1019。probe 9 三形态(小节豁免红/文件级豁免绿/v1.0 节内绿)与 probe 10(悬空豁免双红)证明豁免收窄有效且不误伤。vacuity 层四项复核完毕:#612 人格豁免仍成立且刻意未一并小节化(整页 normalise 匹配,另一次改造),已声明为刻意不改动。"
      },
      "pr_url": "https://github.com/objectstack-ai/hotcrm/pull/1020",
      "out_of_scope_findings": [
        "filed as #1019: 十余处文档仍把「角色层级」当可见性机制教(glossary:80、security-and-compliance:54、sales/accounts:87、sales/opportunities:107、service/cases:141、sales/forecasting:76 等,多页三语),与 administration/sharing-and-security:68「扁平、什么都不会上卷」正面冲突——不是旧名字,是对读者行为有影响的错误承诺(与 #549 同族症状)。已查重无既有单;未加 label,留给 PM triage;单内已写明计数守卫为何抓不到它、禁用词规则为何必须与十余页一起改。"
      ]
    }

    致新任 PM 的三点提示:①验收面重点在守卫(豁免小节化 + STATUS 解析规则 + 版本规则扩展),probe 2/9/10 的论证值得细读;②越界发现 #1019 尚未 triage(无 label 无认领),按其单内分析它是"措辞层禁用词规则 + 十余页同改"的一张可派发单;③本单验收完成、PR merged 后,hotcrm is:open label:pm:queue 应清零。前任 PM 至此交接完毕,不再有残留义务。


    Generated by Claude Code

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 workingdocumentationImprovements or additions to documentationpm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions