forked from ChaiHao/BPOS-MVP
真容器 + 真迁移 + 真种子;推进不靠定时器,靠手动泵 (dispatchOnce + advanceOnce 循环到静止)—— 每一拍都是生产同一份代码,零 mock。 **库绝不回落到开发库**:E2E 要清库播种,碰开发库就是清人数据。次序: JCAI_TEST_DATABASE_URL → 在开发实例上另建独立库 jcai_it_flow → Testcontainers; 都不可得则跳过并告警(skipIf,跳过可见,不变成沉默的通过)。 每次从零:四 schema drop-cascade 重建 → 迁移 → 种子 —— E2E 的前提是起点确定。 八条(本机 PG 实测 15s): 主路径 不选型不寻源 → A4 → A5 → G3 → A6 选成交 → end_won,completed G1 需选型 进 A2,A2 办结(不再寻源)→ 经 G2/G2J 进 A4 —— 异或汇合不等的回归 G2 需寻源 进 A3 → G2J → A4 G3 驳回 走图上的驳回边:A4#2 重开,A4#1 released 留痕不动 G4 有异议 A4#2 重开,流仍 running G4 拒绝 A7 归档 → end_arch,completed 恰选一口 A6 放行不选口 → 同步拒收、工单还活着;补选 won 后 completed 零死路 全程 route-dead-end 事件 0 条 这套矩阵是后续一切编排层改动(包括网关去节点化)的护栏: 改完跑一遍,九个网关分支的行为有没有变,15 秒内见分晓。 typecheck ✓ lint ✓ depcruise ✓ 506 测试 ✓ api:check ✓ Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m