Company OS

架构评审

docs/07-roadmap-stages.md

纪律比日历重要

一个阶段只解决一层问题,过了退出标准才开下一阶段。地基(阶段 2–4)不出现任何业务表单;阶段 5 起才有页面,七环一环一个门。

一阶段一层,一环一个门先对象后页面模块之间零 import先事件后报表先谓词后角色名DMS 冲突标黄,不发明通讯外购紧急需求走审批覆盖并记审计禁用不删数据,运行时不装模块
阶段总览 · 箭头上的字就是过门条件mermaid
正在绘制…

七个阶段全部过门;ontology v0.1 已冻结,此后只修不扩。周计划版已废弃,阶段之间靠退出标准衔接,不靠日历。

  1. 阶段 0拍板已完成

    ADR 0005:借 Odoo 模块契约,不用 Odoo。六条拍板 + 依赖图、扩展点图确认。

    退出标准
    • ADR 0005 无异议
    • 两张图确认无异议
  2. 阶段 1声明层已完成

    ModuleManifest 契约、7 个模块 manifest、buildRegistry 校验、网关算管线不执行、dependency-cruiser 进 verify。

    退出标准
    • npm run verify 绿
    • 任一模块间 import 让 CI 变红
    • /modules 可见两张图与每条命令的管线
  3. 阶段 2持久层已完成

    内核 schema(object_record / relation / domain_event 只追加 / audit / approval / module_record);每模块一个 schema,按拓扑跑迁移;party 三条命令真写库。

    退出标准
    • 干净机器 db:up → migrate → verify 一条龙绿
    • RegisterParty 经网关后,业务表、户籍、事件三者同一 ObjectId
    • module_record 恰有 kernel + 7 个模块
    • 去掉 hr 重启:数据仍在、标记 disabled、/modules 不再显示
    • 对 domain_event 的 UPDATE 被数据库拒绝
    • 故意加 customers 表时「第二张人表」测试变红
    不做

    任何 UI 表单;登录;除 party 外的业务表。

  4. 阶段 3管线层已完成

    validate 可否决、before 补全、after 事务后执行;ApprovalCase 生命周期;AuditRecord 记录经过的模块;谓词只收紧。验证用例固定为 SignContract(crm owner + fin 钩子)。

    退出标准
    • SignContract 审计时间线完整:policy(fin) → approval → validate(fin) → handler(crm) → emit → after(fin) → audit
    • fin validate 拒绝时无新增行、无事件、有拒绝审计
    • 去掉 fin 重启,SignContract 仍能跑,crm handler 不变
    • agent 提交 SignContract → 403 + ApprovalCase 草案
    不做

    合同表单、电子签、合同变更。

  5. 阶段 4身份与权限层已完成

    标准 OIDC(推荐开源 Casdoor,国内登录方式内置);登录主体绑定 Party,没有用户表;can_command 在网关、can_approve 在审批箱、can_read / can_export 在查询层强制,基线片段由 party 模块贡献;AgentSession 绑定发起人与允许的命令。

    退出标准
    • 无登录 → 401,谓词不满足 → 403,都进审计
    • 代码里搜不到 if (role === "经理") 之类分支
    • 可导出集合是可读集合的子集,有测试作证
    • Agent 每条命令的审计能回链到 AgentSession
    不做

    组织架构树 UI、字段级权限。

  6. 阶段 5工作台壳 + 脊椎七环已完成

    5.0 壳(已完成):/work,菜单由 manifest 生成、对象详情页命名槽位、审批箱、模块读模型经 can_read 过滤。5.1 线索、5.2 报价、5.3 合同、5.4 要货、5.5 施工节点机制(seeds 待 DMS 对齐)、5.6 验收、5.7 收款(全部完成)。 施工节点(DMS 对齐环)→ 验收 → 收款。

    退出标准
    • ✓ 去掉一个模块,其菜单与槽位随之消失;hr 只靠一个标签槽位出现在 Party 360
    • ✓ 5.1 一条线索能回答「谁的哪套房」
    • ✓ 5.2 报价指向业主与房屋;签发即冻结金额,改价只能出新 Quote
    • ✓ 5.3 合同只能从报价起草,金额客户房屋沿报价带出;签署管线在真实链路上全绿
    • ✓ 5.4 要货必须属于已开项目;scm 不 import eng 就能否决目录外材料;采购单审批后 fin 同事务入成本
    • ✓ 5.5 节点类型只认 seeds(须带 dmsRef),代码里搜不到工序名;seeds 为空时 StartNode 一律被拒 —— 配置等 DMS 对齐
    • ✓ 5.6 验收强制审批、项目转完工、fin 尾款应收转到期
    • ✓ 5.7 合同 → 应收 → 回款 一条 SQL 金额守恒;crm optional 订阅回显回款状态;开票信息经 UpdateParty 钩子落 fin.party_ext
    • 每环新增对象只在 owner 模块 manifest;命令经网关有审计;事件至少被 decision 收到
    不做

    电销、效果图编辑器、电子签全套、库存、供应商门户、质保、总账、工资。

  7. 阶段 6决策投影 · Agent L0已完成

    decision 三个投影只消费事件;Agent 只读检索经本体 API,可出草案不可提交。

    退出标准
    • ✓ decision_replay 角色读业务表被拒,重放结果与实时逐行相等
    • ✓ Agent 每次读有审计回链会话;直接提交 → 403 + 草案
    • ✓ 「本月哪些项目回款落后」落到回款账龄投影,给出合同链接
    不做

    经营驾驶舱大而全、自动签发、自动采购。

  8. 阶段 7硬化 · 冻结 v0.1已完成

    权限抽检 20 对象 × 5 身份;MergeParty 全流程;ADR 回写;打 tag。

    退出标准
    • ✓ 20 对象 × 5 身份 × 2 谓词 = 200 次抽检,与独立 SQL 预言机零违规
    • ✓ MergeParty 全流程:旧 ID 可解析、无悬空关系、历史不改、角色去重、绑定跟走
    • ✓ ADR 0007 收拢九条偏离;注册表可从 manifest 以 v0.1 重建
    • ✓ tag ontology-v0.1,此后只修不扩