feat(persistence)!: V1.4.0 退场 legacy 槽位存储,persistNextStates 成为唯一写路径 (ACM2-29 P4)

- V1.4.0 迁移:DROP FLIGHT_SCHD 全部 77 个槽位/里程碑/紧凑航路列(V1.3.0 起
  零写入、P2-2 起零读取)+ 三个与 PK 前缀冗余的 (flid) 单列索引;回退窗口关闭
  (对拍留档:P2-1 FS7 v2 双读差异记录)
- 接口收敛:FlightSchdRepository 删除 upsertSnapshotBatch/upsertIncremental,
  删除废弃 FlightStateRepository 及 Jdbc/Stub 适配器;仓储与装配器删除全部
  legacy flatten/slot/milestone/route 视图代码,ALL_COLUMNS 收敛为无损承载列
- FS7 对拍工具移除 diffDualRead(legacy 槽位基准退场);diff() 对 legacy
  FLTR JSON 比对保留;FlightStoreDualReadTest 随工具移除
- 测试种子统一走 v2 写路径(support/SeedHelpers),GuardedFlightSchd 简化
- docs/decision-flight-state.md:头部复核入口更新 + 新增 §10 v2 落地终态索引,
  §1–§9 保留为历史记录

验证:MSGX_PG_PORT=5433 真实 PG 全量 100 用例 0 失败 0 跳过;无环境变量
Testcontainers 全新容器 V1.0.0→V1.4.0 迁移链 18/18 全绿
This commit is contained in:
windyboy
2026-09-08 17:44:20 +08:00
parent 107be5d74a
commit 7c2d22e8f1
15 changed files with 142 additions and 746 deletions
+24 -2
View File
@@ -7,8 +7,10 @@
> **2026-09-08 复核入口**:详细证据与重构提案见 [运营航班状态设计评审](review-flight-state-2026-09-08.md)。
> 本轮确认的部署边界:现场提供 Oracle 时使用 Oracle 11g,否则自行部署 PostgreSQL。
> 评审保留单库原子提交方向,但发现 §9 固定资源槽位与本仓库三登机门样例冲突,
> 并指出集合往返、迁移与快照 CAS 的风险。下文保留历史定案记录;新提案尚未实装
> 不应将历史“全部交付/保真”措辞视为双数据库生产验收证据。
> 并指出集合往返、迁移与快照 CAS 的风险。**§9 全宽表·零子表方案已按 v2 设计撤销**
> 现行权威口径见 [§10 v2 落地](#10-acm2-29-v2-无损明细表方案落地2026-09-08)、
> [flight-state-design-v2.md](flight-state-design-v2.md) 与
> [flight-state-semantics.md](flight-state-semantics.md);§1–§9 保留为历史记录。
## 1. 问题
@@ -158,3 +160,23 @@ B-tree 逐列追加,11g/PG 零方言成本。
Oracle 11g 的 `MERGE INTO` 方言、Flyway 11.2 支持版本和 ojdbc 认证组合仍必须在目标数据库环境
中完成平台决策与集成验收;不能用 PostgreSQL 测试结果替代该外部环境证据。
## 10. ACM2-29 v2 无损明细表方案落地(2026-09-08)
按 [评审报告](review-flight-state-2026-09-08.md)F1F9)与
[flight-state-design-v2.md](flight-state-design-v2.md) 评审定案,撤销 §9「全宽表·零子表」
作为权威存储形态,落地无损模型;本节为当前有效规则索引:
- **存储**`FLIGHT_SCHD` 保留标量/异常前缀/无界文本列(V1.4.0 已 DROP 槽位、里程碑与紧凑
航路列及冗余索引);10 类重复集合由 9 张明细表 + `flight_route_point(ROUTE_KIND)` 承载,
PK `(FLID, ORDINAL)``SOURCE_SEQ` 不去重不设唯一(v2 §3.2)。
- **写路径**`persistNextStates` 是唯一写路径;引擎产生显式命令
Unchanged/Set/Clear/Replace/Apply),序号 0 条目仅在整集合清除时翻译为 Clear,
混排 fail fast;异常对象 `"null"`/`{}`/空串 = 显式清除置 NULL。
- **事务**PIPELINE_LOCK 行锁内复核快照身份(`schd_gen.last_message_id`)与当前态,
CAS 失败一律回滚 `FAILED(INFRA)`;提交后共享信箱回填失败落 `backfill_todo` 补偿重试,
成功终态不降级(v2 §5)。
- **读模型**:明细表为权威读;`flight_schd_display` 视图提供首/次资源与总数投影。
- **双库**`SqlDialect` 接缝(PG 实装;`Oracle11gDialect` 为编译级交付),
11g 激活门控见 `db/migration/oracle11g/README.md`——现场 11.2 实测通过前不切换。
- **字段语义唯一索引**[flight-state-semantics.md](flight-state-semantics.md)。