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
This commit is contained in:
JCAI Main Agent
2026-07-27 02:01:08 +08:00
co-authored by Claude Opus 5
parent 291fc39179
commit a8f6eef610
15 changed files with 4072 additions and 10 deletions
+32
View File
@@ -3,6 +3,7 @@
*/
export type {
ActivityContractFace,
AssembleScope,
Candidate,
ClosureInput,
ClosureReport,
@@ -10,12 +11,40 @@ export type {
NodeInstance,
OwnerSpec,
ProcessPackage,
ProcessService,
ResolveContext,
Resolution,
StartWorkflowInput,
WorkflowRecord,
WorkflowState,
} from './contract.ts';
export { NotPublishableError, PositionVacantError } from './contract.ts';
export type {
ActivityDirectory,
ApprovalGateway,
Clock,
FlowEventPublisher,
IdGenerator,
OrgDirectory,
ProcessStore,
ReceiptNotifier,
Sfeel,
TaskGateway,
} from './port.ts';
export type { ProcessServiceDeps } from './internal/usecase/process-service.ts';
export { createProcessService } from './internal/usecase/process-service.ts';
export {
assemble,
dispatchOf,
joinReady,
rejectRouteOf,
selectEdges,
startNodeOf,
} from './internal/domain/routing.ts';
export { checkClosure, publishable } from './internal/domain/closure.ts';
export {
aggregateWorkflowState,
@@ -24,3 +53,6 @@ export {
nextInstanceNumber,
resolveOwner,
} from './internal/domain/owner-resolution.ts';
export { createProcessStore } from './internal/adapter/process-store.ts';
export { nodeInstanceTable, processPackageTable, workflowTable } from './internal/adapter/process-schema.ts';