Company OS

架构评审

阶段 3 · 管线层

一条命令穿过扩展点,每一步都留下是谁做的

用 SignContract 验证:crm 是 owner,fin 只靠 manifest 里声明的 validate / after 钩子和一条收紧谓词参与,内核负责审批与审计。下面每一次演练都是真写库。

谓词只收紧

多个模块对同一命令的 can_command 片段取交集;声明了没实现的片段按拒绝处理。

审批挂在网关

approval: required 的命令先成为 ApprovalCase,批准后沿用同一 commandId 继续跑 validate → handler → after。

validate 可否决

钩子抛出即整条回滚:owner 的 handler 根本不会执行。

after 同事务

主 handler 与事件写入之后、同一事务内执行;合同签了应收没生成这种半状态不存在。

订阅走 outbox

sync 订阅同事务;async 订阅先落 event_delivery 再派发。模块没实现 handler 也记 routed。

审计记每一步

谁(模块)在哪一步做了什么、结果如何。人和 Agent 同一条时间线。

命令管线 · 由注册表解析mermaid
正在绘制…

预期:party 与 fin 的谓词放行 → 挂起审批 → 老板批准(can_approve:管理者)→ fin 校验通过 → crm 签署 → fin 同事务生成应收 → eng / decision 收到事件。

身份:提交人 dev:sales(员工),审批人 dev:boss(管理者),复核 dev:cfo(管理者)。三个令牌由开发签发器签发,每个请求带各自的 Bearer; 谁能提交、谁能批由 party 的谓词片段决定,不是页面里写死的。

审批箱(评审用) · 待决 0

没有待决的 ApprovalCase。跑一遍演练,或用命令探针提交 MergeParty / SignContract。