forked from ChaiHao/BPOS-MVP
- 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
1.9 KiB
1.9 KiB
技术债登记簿
编码规范 §17:历史违规集中登记于此——旧路径
warn、新代码error,清零后升级。 例外必须注明原因与预期清理时间;散落的eslint-disable不算例外,算违规。
| # | 债 | 原因 | 预期清理 | 状态 |
|---|---|---|---|---|
| M0-1 | pnpm db:seed 只打印种子计划,未真正写库 |
种子数据(五岗位 / 五员工)已在 apps/api/src/app/seed.ts 冻结为常量并定义 OrgSeeder 端口;写入实现依赖 org 模块的 Drizzle schema,属 M1 |
M1 | 已清理(M1) |
| M0-2 | packages/{sfeel,activity-sdk,ui-kit} 仅有版本常量 |
M0 只立骨架,内容按里程碑序填(§15);@contracts 已于 M1 落首版 |
M3–M5 | 进行中 |
| M1-1 | container.ts 里两个占位端口:InFlightWorkProbe(空集)、TriggerMatcher(恒不命中) |
二者的真身在 task(L6,M4)与 trigger(L7,M5);MessageFallback 已于 M2 接真身 |
M4 / M5 | 进行中 |
| M1-2 | 条件求值 passthroughEvaluator 恒真 |
@sfeel 属 M3;M1 的监听只用类型 + 关联键过滤,不用内容条件 |
M3 | 进行中 |
| M1-3 | 派发器已于 M2 落地(advisory lock 串行 + 消费幂等);消费者(任务 / 触发器)随 M4 / M5 注册 | M2 | 已清理 | |
| M2-1 | 派发器的消费者表为空 —— 投递只标记已送达 | 任务消费者属 task(M4),触发器消费者属 trigger(M5);投递链路本身已可测 | M4 / M5 | 进行中 |
| M5-1 | process 未用 Mastra workflow 编译器,流转由自持确定性状态机 + sys.node_instance 承担 |
编码规范 §6.1 规定流程包编译为 Mastra 图;二者语义等价(挂起/恢复由节点实例表承担),先落可测的自持实现,Mastra 编译器作为可替换 adapter 后补 —— usecase 不动 | M5 收尾 | 进行中 |
| M2-2 | pg-boss 已装未用 | 定时作业(监听时限扫描、周期触发器)随 M5 落地;当下派发器用 setInterval | M5 | 进行中 |