Files
JX-BPOS/apps/api/src/modules/process/CONTRACT.md
T
JCAI Main AgentandClaude Opus 5 a8f6eef610 M5(2/3): process 用例与流转 —— 流程引擎的确定性调度
- routing domain:选边(XOR 恰取一条 + 默认分支兜底;AND 全走)、边映射装配(四类来源 +
  S-FEEL 转换)、AND 汇合回齐(容忍分支不阻汇合)、审批点驳回走向声明式
- process-service:起单 → 调度节点 → 负责人四策略解析(结果与依据留痕)→
  活动起单 / 审批点卡工位 / 终点收束按来源回执;任务终态到达继续流转或走失败走向四选一;
  审批驳回按声明回指定节点重开新实例;状态每次变动后重算聚合投影
- adapter:流程包(id × version)、工作流实例、节点实例三表持久 —— 崩溃后可续跑

ADR 待补项登记为 debt M5-1:§6.1 的 Mastra workflow 编译器作为可替换 adapter 后补,
当前由自持确定性状态机承担,语义等价、usecase 不动

325 个测试通过,门禁五道全绿

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
2026-07-27 02:01:08 +08:00

3.3 KiB

module: process

职责: 流程层:流程包定义与版本、边映射闭合校验(连线即映射 · 画图即校验 · 不闭合不得发布)、 负责人四策略的确定性解析、工作流状态的聚合投影、失败走向的消化判定、节点实例重开 不负责: 活动的执行(见 task 与范式引擎)、触发器(与流程包平级,见 trigger)、 画布的绘制(见 apps/web 的 gov-process)

公开出口: index.ts

  • 类型:ProcessService StartWorkflowInput WorkflowRecord ClosureReport ClosureViolation ActivityContractFace Candidate Resolution NodeInstance WorkflowState Dispatch
  • 错误:NotPublishableError PositionVacantError
  • 端口类型:ProcessStore ActivityDirectory OrgDirectory TaskGateway ApprovalGateway Sfeel FlowEventPublisher ReceiptNotifier
  • 用例工厂:createProcessService(deps): ProcessService
  • 纯函数:checkClosure publishable resolveOwner aggregateWorkflowState isDigested nextInstanceNumber selectEdges assemble joinReady rejectRouteOf dispatchOf startNodeOf
  • adapter:createProcessStore;Drizzle 表:processPackageTable workflowTable nodeInstanceTable

层级: L7(编码规范 §4) 依赖: @contracts;task(L6)、@sfeel 被依赖: trigger, app(治理台 · 工作流管理)

不变量(OS 03 / 3.2):

  • 不闭合不得发布:未完成边、必填未映射、类型冲突、孤立节点、异或出边缺条件、 汇合同名字段来源不明、容忍分支被下游必填依赖 —— 任一即 publishable = false
  • 求值语义前后端同源:画布的即时校验与后端裁决共用 checkClosure
  • 负责人解析确定性:轮值并列时按 staffId 稳定排序;同输入必同结果,结果与依据留痕
  • 工作流状态是聚合投影:流程层不另设状态机;计量对象是节点实例, 重开产生新实例、旧实例不再入算;XOR 未选分支从未激活、不入集合
  • 失败走向的消化:改道 / 容忍 / 升审批一经生效即消化;终止流待人工处置中算异常
  • 流级重做一律重开新实例 —— 同节点、新任务 ID、留痕关联,不复活旧任务

其它不变量:

  • 流转零 LLM:选边与条件求值全部经 @sfeel;判定依据入事件记录
  • XOR 恰取一条:条件命中优先,无条件的边作默认分支兜底
  • AND 汇合要回齐:未回齐就不进汇合节点;容忍分支以「已消化」计,不阻汇合
  • 流程层不自动重试活动(过程内重试归 Harness); 流级重做一律人裁决后重开新任务实例
  • 驳回走向声明式:审批点的驳回按 reject 声明回指定节点重开新实例,不由临场决定
  • 凡单必有来源:source 必填;终点按输出声明交付、按来源回执

M5 待补(docs/PROGRESS.md · docs/debt.md M5-1)

internal/adapter/workflow-compiler.ts —— 编码规范 §6.1 规定流程包动态编译为 Mastra createWorkflow/createStep(XOR → .branch(),AND → .parallel(),节点 suspend()/resume())。 当前流转由本模块自持的确定性状态机 + sys.node_instance 持久承担,语义等价且已可测; Mastra 编译器作为可替换的 adapter 后补,替换时 usecase 不动。