Skip to content

[Decision] 权限集没有模块归属:ADR-0130 §1.3(a) 点名的痛点在分拆后并没有被消掉 —— 允许按包组合,还是明确记录它不在边界范围内? #14457

Description

@huangyiirene

由分诊席(会话 session_019kDRpB7D2XzVzkaLp57T5D,R+94)自 #14454 拆出。

#14454 同时挂了 pm:queue 与 needs-user-decision —— 而六个 pm 状态是 ONE-OF,同挂会让同一张卡既进可派发库存又进维护者收件箱。它这样挂是因为卡本身确实是混的:第 1、2、4 项是测量与 pin(可直接派),第 3 项要维护者拍板。⇒ 第 3 项拆到这里,#14454 留作可派发的测量卡。⛔ 拆分不改任何事实,原文照录。

事实(逐字来自 #14454 第 3 项)

ADR-0130 §1.3(a) 把 30 行 × 9 列 × 6 套的权限矩阵列为无边界的三个可量化后果之一,并把包边界作为 Studio 一直缺的分组。但权限集天然跨域授权 —— HotCRM 6 套里 4 套横跨 5–6 个模块 —— 它不能住在某个模块里,分拆后矩阵依旧是平的。

来源:hotcrm 分拆方案 objectstack-ai/hotcrm#1448 / PR hotcrm#1449,docs/architecture/module-split-plan.md §「上游缺口」。父单 #14122。

选项(逐字来自 #14454)

  • A. 允许权限集按包组合 —— 模块把自己对象的授权贡献进 app 拥有的角色,类似 navigationContributions。
  • B. 明确记录「权限矩阵不在 ADR-0130 创造的边界范围内」 —— Studio 的分组收益不含它。

两者都要写回 ADR-0130(docs-only 卡另开)。

<!-- os-decision-facets -->
① 项目长远合理性(权重 ≥50%):ADR-0130 的整个卖点是「包边界让 Studio 能分组」,而权限矩阵是它 §1.3(a) 自己点名的三个可量化痛点之一。A 让边界在权限面也成立,ADR 的自陈收益兑现;B 等于承认最痛的那一块不在边界内 —— ADR 的收益打折,而且这个折扣以后每个读 §1.3(a) 的人都要重新发现一次。⚠️ 但 A 新增一个组合机制,声明面 +1,是永久义务;按本轴本义,这一笔要如实记在 A 的账上。
② 实际业务拉动:实测,不是假想 —— HotCRM 6 套权限集里 4 套横跨 5–6 个模块,而分拆方案今天就卡在这一项上定不了稿。这是四轴里唯一有硬数字的一轴。
③ 防 AI 犯错:B 之下,一个 AI 作者面对横跨五个模块的权限集,没有任何结构告诉它新对象的授权该写在哪 —— 它会猜,而猜错是静默的(多授或少授,两个方向都不会响亮拒绝)。A 让「这个对象的授权归哪个模块」有唯一答案。这一轴 A 明显占优。
④ 创业阶段不扩散:B 零新增声明面;A 新增一个组合机制 —— 但 A 复用 navigationContributions 已有的形状,不是从零发明一套,增量比看上去小。

推荐:先量一格再裁,而且那一格本来就要量 —— #14454 第 2 项要为 navigationContributions[].group 钉三条 pin(按目标 app 的 group id 解析 / 贡献进不存在的 group 要可见地失败 / 多包贡献同一 group 由 priority 定序)。三条全绿 ⇒「贡献进别人拥有的容器」这个形状在平台上成立且成本已知,A 的实现≈复刻既有形状,荐 A(①②③ 同向);任一条不成立 ⇒ A 的地基本身没有,只剩 B,而 B 必须把「Studio 的分组收益不含权限矩阵」明确写回 ADR-0130,⛔ 不许默默留着 —— 那正是本卡存在的原因。

⛔ 席位不代裁:A 属功能新增 + ADR 类,双重人工地板。

置信缺口(本分析看不见什么):看不见 ADR-0130 的「Studio 分组」收益对维护者值多少 —— 那是产品判断不是工程判断;也没量过除 HotCRM 之外还有哪些应用存在跨模块权限集,所以②的硬数字只有一个样本。

相关

#14454(测量与 pin 的那三项)· #14122(父单)· ADR-0130 §1.3(a) · objectstack-ai/hotcrm#1448

Generated by Claude Code

Activity

  1. hotlong commented on Sep 2, 2026

    @hotlong
    Contributor

    已裁:取 B(本次发版),A 立为二期卡 —— 本决策卡关闭

    维护者 2026-09-02 在 PM 会话(session_01UHvF5hyiZjnCyExFnfQB8m)对完整四维分析答复「同意」:本次发版按 B——权限集整体留在 type: app 包,ADR-0130 明确记录"权限矩阵不在包边界的收益范围内";A 作为分拆第二阶段立卡,不承诺时间。

    落点:

    本卡的四维分析与推荐保留在此作记录;与维护者裁定的差别只在时序(先 B 后 A,而非以三条 pin 为条件直接选 A),原因是 A 的真实拉力只在「模块单独发布」出现时兑现,第一刀 cpq 仍随 app 一起发。摘 needs-user-decision,关闭。


    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

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions