Company OS

架构评审

docs/adr/

五条已经拍板的取舍

评审时先问这五条还认不认。不认就改 ADR,不要在模块里悄悄破例。

ADR 0001本体优先于功能堆叠

先交付可评审本体与分层,再按阶段过门实现。所有写入只经命令网关,没有表单式 CRUD。

否决:先做 CRM 再补架构 → 客户表会先落地,以后迁不动。

ADR 0002不自研邮件与即时通讯

通讯外购。OS 只做连接器。审批事实留在 ApprovalCase。

否决:站内信当主通道 → 12 个月后就是自研 IM。

ADR 0003模块化单体起步

一个可部署单元 + 一个 PostgreSQL + 包级领域边界。

否决:一上来微服务 → 必复制主数据。

ADR 0004唯一 Party,禁止各建客户表

业主、供应商、员工都是 Party + 角色。外键只许 ObjectId。

否决:每系统自建客户晚上 ETL 对 → 白天已分叉。

ADR 0005借 Odoo 的模块契约,不用 Odoo

每模块一份 manifest;对象归 owner;扩展别人只能 1:1 扩展表与 validate/before/after 钩子;权限只收紧;槽位不 XPath;配置声明、部署时应用;禁用不删数据。

否决:直接用 Odoo 二开 → 后台交易模型不是本体,界面与国情摩擦大,人力市场稀。运行时 monkeypatch → 升级即重做。

ADR 0006身份外购标准 OIDC(推荐 Casdoor),授权只认谓词片段

只消费发现文档 + JWKS;登录主体绑定 Party,没有用户表;can_command / can_approve / can_read / can_export 由模块片段取交集,只收紧;Agent 在会话内行动。

否决:自建账号密码 → 第二张用户表;handler 里 if (role === "经理") → 权限散落不可审计。

ADR 0007落地偏离收拢,冻结 ontology v0.1

声明过的查询是模块间唯一读接口;owner validator 与审批前预检;扩展字段走 owner 命令 + 扩展方钩子;旧 ID 永远可解析到新 ID;Agent 读记审计、人读不记;冻结后只修不扩。

否决:留着 ADR 与代码的矛盾不管 → 半年后没人知道哪个是真的。