Commit Graph
52 Commits
Author SHA1 Message Date
windyboy 62f61ad9e4 feat(delivery): 真实 Kafka 投递端口 + 闭合 G-BACKFILL-BACKOFF 配置缺口
- 新增 KafkaDeliveryPort:ProducerRegistry + 同步 Future.get() 至少一次投递,
  闭合 OPS-1 真实适配器要求与 US-07 INV-10/C-29
- 回填退避从硬编码 30s/15min 提升为 backfill-backoff-ms / backfill-backoff-cap-ms
  配置绑定,闭合 [G-BACKFILL-BACKOFF]
- 删除死依赖 micronaut-redis-lettuce(代码零引用,ACM2-28 Redis 已退出阶段 A)
2026-09-13 16:26:03 +08:00
windyboy 5bb9d6bb07 docs(spec): 精简需求边界闭合方案 2026-09-13 16:01:07 +08:00
windyboy fc744d0cfd feat(acm2): 闭合 G-KAFKA-D3 / G-IGNORE / G-EVENT-RETENTION 三个缺口
- G-KAFKA-D3:max-in-flight 默认收敛到 1,KafkaD3Check 启动自检钉住三项联合满足 D3
- G-IGNORE:IgnoreRules 在身份绑定后精确匹配 TYPE 字段,命中写 SKIPPED + 回填意图
- G-EVENT-RETENTION:V10 迁移加 SENT_AT 列,投递原子写,EventCleanupJob 有界清理过期 SENT 行
2026-09-13 15:48:16 +08:00
windyboy d37a9eb38e docs(spec): 收敛领域边界闭合方案为三个缺口
- 本轮只做 G-KAFKA-D3 / G-IGNORE / G-EVENT-RETENTION,其余缺口不再写入 spec
- 删除约束与表结构副本、User Stories 重复、phase B 清单与进度记录
- US-04 AC1 明确先绑定身份再转 SKIPPED,引用改用稳定 ID US-03
2026-09-13 13:49:06 +08:00
windyboy 30dc8adf00 docs(spec): 领域边界闭合 spec 与配套文档修正
新增 docs/spec-boundary-closure.md:自包含 spec,内联展开所有
PRE/INV/CLM/D/C/US/PARAM/Q/错误分类/表结构/时间常数序引用,
覆盖 G-KAFKA-D3 / G-IGNORE / G-EVENT-RETENTION / G-BACKFILL-BACKOFF
/ G-PROC-HST 五个缺口的实现决策、验收与测试决策。

同步修正 design.md(归档段落改条件 DELETE、ARCHIVED 影子行、
SENT_AT 描述)与 user-stories.md US-11(AC1 改 UPDATED_AT、
AC2 删投递判据、AC3 补条件回滚语义)。
2026-09-13 12:52:21 +08:00
windyboy 729e102b8e docs(lifecycle): 补齐清除生命周期与逐对象归档边界
- design.md 9.3 扩为「生命周期与清除」:清除通则、逐对象生命周期表、
  处理终态归档判据(终态 ∧ 回填了结 ∧ 终局后到期)与时间常数排序
- contracts.md 新增 C-16:回填放弃清单在对应信箱边界清除前必须保持可查
- invariants.md 缺口索引新增 G-HST-RETENTION、G-FLIGHT-HIST-RETENTION、
  G-REQ-TRACK-RETENTION
- flight-state.md 补航班历史存储保留期开放项
- 同步 architecture.md / user-stories.md 的 9.3 交叉引用
2026-09-13 10:49:48 +08:00
windyboy 17a4bfe91b feat(codec): 观测未落库的 SRVT/VIPF 集合
SRVT/VIPF 只保留在 wire/domain 并计数告警,不落明细表、不参与合并:
出现事实不再被静默丢弃,为 Q13 定案提供真实流量证据([G-SRVT-VIPF])。

- wire DTO:SRVT/SERVICEDATA、VIPF/VIPDATA 与嵌套 VIPT(OPER 为元素属性)
- 出现即留键:缺席与"出现但为空"不再等价;已落库 10 类集合语义不变
- 新增 msgx.pipeline.codec.srvt_seen.total / vipf_seen.total(reference.md 已登记)
- 一并提交此前的 MAFL 文档改动(INV-21/INV-22、flight-state §2.3、G-MAFL 措辞)
2026-09-13 09:21:51 +08:00
windyboy b8738554e6 refactor(ingress): 移除 G1 窗口补偿扫描与迟到到达检测
实际负载不足 10 条/秒,G1 属过度防御。删除迟到到达检测机制、
existingIds 接口、PipelineCounters 字段、lateDetect 配置,
以及文档中 CLM-1/CLM-2 声明与 G1 缺口索引。
2026-09-13 08:08:43 +08:00
windyboy 8053c01964 docs(contracts): Q8/Q13 标记为暂缓
- Q8 逐类清单现阶段不处理
- Q13 缺失字段语义测试前不决定,真实消息优先于 SIS 文档
2026-09-12 22:39:09 +08:00
windyboy cfece0c559 docs: drop merged message-lifecycle stub
message-lifecycle.md 内容已全部并入 design.md / contracts.md;仓库内唯一引用是 docs/README.md 的跳转说明,已同步删除并在「当前状态」记录删除事实。历史链接按 README §2 职责表重定向到 design.md。
2026-09-12 21:04:42 +08:00
windyboy 82cc70cbb3 docs(acm2-63): 精简架构文档并闭合模块入口登记
architecture.md 138→116 行:删除 §9「当前实现与上线门槛」(进度内容,归 invariants 声明边界与 Plane,其中部署前提并入 §8);§4 主流程压成链路摘要 + design 节名指针,去掉与 design 重复的机制细节;§8 可观测性收成一句并把指标口径指向 reference;D1–D4 第三列由「当前状态」改为「证据 / 缺口」稳定 ID 指针。

reference.md:模块入口补 infra/metrics/JobActivity.kt、infra/health/JobRunnerHealthIndicator.kt 与 config/OperationDayProps.kt;迁移清单补 V7–V9。
2026-09-12 21:03:23 +08:00
windyboy 8093d20f9b docs(acm2-63): 收敛文档口径并补齐作业健康指标登记
含:MAFL 派生投影与 SRVT/VIPF 无界集合口径、schd EVENT_ID 写代次与 DEAD 代次替换、运营日时区 fail-fast、缺口索引增删(G-MAFL/G-SRVT-VIPF/G-COMPAT-HTTP/G-REQ-OPEN-UNIQUE,移除 G-JOB-HEARTBEAT)、job 心跳/扫描积压/最近失败指标登记、INV-18 验证映射改为实际测试名。
2026-09-12 21:00:01 +08:00
windyboy 3085431bea docs: 落地上轮复审修正并修正参考表位置
- G-IGNORE 缺口表述去掉错引 INV-19、补 US-04
- reference 登记 msgx.pipeline.backfill-scan-period
- user-stories 的 R_keep 下界/deadline 措辞对齐
- reference 归档参数行从空行后挪回参数表内(修正 acm2-52 提交中的表格位置)
2026-09-12 11:36:52 +08:00
windyboy dcdc5117bf docs(acm2-51): 收口 D10/D14/D15
- D10 投递保序:architecture 改为 FLID 级(与 design/CLM-7 对齐,实现收敛归 ACM2-34)
- D14 REQ_TRACK 状态名:user-stories US-08 对齐实现的 PENDING/SENT/DONE/EXPIRED
- D15 容量假设:invariants 新增 CLM-10(未实测,含解除条件),design §10 加指针
纯文档,不改代码/迁移/配置/legacy。
2026-09-12 11:33:58 +08:00
windyboy 69c2cf219f docs(acm2-52): 修正跨文档事实冲突 F1–F9 与错引编号
- F1/F6 HTTP 契约:C-28 目标 ResponseDto + 请求体上限暂定 10MB,Q3 指向 C-28
- F2 legacy 与 SIS 的优先级限定;F3 超期判据对齐 ENQUEUED_AT;F4 改引 D1
- F5 参数默认值改引 reference/PARAM;F7 补 4 条契约状态词;F8 定义 MAID/MAFL 并明确排除共享航班;F9 补 INV-20
- N1/N2 错配编号改引;N3 迁移链指针;N4/M5 白名单补 D-x/OPS-x;N6 补 INV-16/17 映射;N7 加粗规则
- M1 回填退避事实与论证;M2 Q6/Q7;M4 Q4 假定标注;M7 去复述
纯文档,不改代码/迁移/配置/legacy。
2026-09-12 09:57:26 +08:00
windyboy 817236ca26 fix(processing): 落地 D1/D5/D6 三项裁决,删除 head-deadline 参数
D5(终态判据只保留尝试上限):
- Pump.tick 内联 attempts 判定,删除 head-deadline 相关的毒丸分支与滞留告警代码
- 删除配置项 head-deadline(PipelineProps / application.yml)与 PumpDeadlineTest
- PROCESSING_STARTED_AT 变为只写,注释如实说明当前无判据消费它

D1(回填放弃判据改为时间):
- 暂时性故障在 R 之前只退避重试,不再按尝试次数放弃;到 R 才放弃并记 TRANSIENT_DEADLINE
- backfill-max-attempts 降级为单行重试的告警阈值

D6(超期判据改用本地入队时间):
- 新增 V6 迁移:PROC_STATE 加 ENQUEUED_AT(回填存量后置为非空 + 默认)
- findBackfillDue 的谓词与 overdue 标记改比较 enqueued_at,不再用库方时钟的 received_at
- BackfillDue 增加 overdue;收报与兼容入口显式写入本地入队时间

文档同步:
- 清理 4 处 message-lifecycle.md 章节号死链(Pump/InboxService/PipelineProps/application.yml)
- 关闭 G-HEAD-DEADLINE、G-BACKFILL-ABANDON-BYTIME、G-ENQUEUED-AT 三条缺口登记
- reference/user-stories/README 与实现对齐

验证:./gradlew test ⇒ 122 tests, 0 failures, 1 skipped

Refs: ACM2-45
2026-09-11 20:44:30 +08:00
windyboy 6eade95a97 docs: 拆分契约/前提/参数文档,合并消息生命周期并收敛设计裁决
- design.md 合并 message-lifecycle.md(后者保留跳转 stub),去重并改用稳定 ID 引用
- 新增 invariants.md(前提/不变量/声明边界/验证映射)、contracts.md(对外条款与 Q 台账)、
  reference.md(参数/指标/模块/错误分类)
- architecture/flight-state/user-stories/README 同步重划引用;README 废止「引用章节号」
- 裁决收敛:R 按超期而非次数放弃、清除前提含放弃清单、航班表写者互斥、head-deadline 仅告警、
  超期判据用本地入队时间、投递批次读取时刻冻结、schd 只进不退与条件标记、FLID 复用为前提
- 删除 runbooks 与 CI 防漂移校验:设计阶段不产出面向执行期的产物

Refs: ACM2-42..51
2026-09-11 15:48:14 +08:00
windyboy 632a5fe422 docs: 精简重复论证与过时流程表述,口径与实现双向对齐 2026-09-11 14:26:44 +08:00
windyboy fed0b5df26 docs: 同步取报-处理-回填链路的修复结论
- 事务边界表:区分业务型/非业务型终态;回填改为扫描驱动(主泵不再 inline 回填)
- 符号与配置:补 delivery-batch / backfill-max-attempts / cutover-watermark /
  late-detect-* / backlog-cache-ttl-ms / 邮箱超时与指标口径
- 闭环状态:G2/G3/G9 标记已修;G1 标注「阶段 0 只读迟到检测已交付」
- 修正 R/R_keep 论证:R 不保护重放窗口;原文保留归 R_keep 与 Q7/Q9,
  并删除「由 SIS Expiry 推导提交时延」的无效推论
- 回填语义补全:四种结果、放弃 ≠ 标记已确认、公平轮转与饥饿说明
- 兼容入口与水位:登记行超出水位、水位追平前不被领取,并写明运维含义

Plane: ACM2-35 ACM2-37 ACM2-38 ACM2-39 ACM2-41
2026-09-11 08:08:39 +08:00
windyboy 50e0e7f389 docs: 修复跨文档冲突与外部规范口径
不动代码、配置与迁移,只收敛文档口径。

- 登记两项外部冲突:Q13 日计划缺失可选字段(SIS §3.16 注释 4 要求删除本地值,
  与现行"未携带字段保留"相反)、Q14 主/共享删除顺序与 EROR 回报义务
  (SIS §1.6.1-1.d / §4.8);航班级"缺席不删"补 SIS §3.16 注释 1 依据。
- flight-state §3.3 补主/共享关联按 FLID 值比较的规则。
- message-lifecycle:§11 水位不变量与 §5.1 空洞老化自洽;删除过期的 updatedAt
  判据,统一为 PROCESSING_STARTED_AT + 可注入 Clock;§5.1/§6 补 SIS 480 分钟
  Expiry 与 legacy 1 天保留窗,作为 Q2/Q6/Q7 的取值参照。
- architecture/design:明细表口径统一为 8 张资源明细表 + FLIGHT_ROUTE_POINT;
  Oracle 11g 断言收敛为待适配验证;配置键按 application.yml 实际名称加 msgx. 前缀。
- user-stories:Q2/Q6/Q11 补外部锚点并收窄 Q11 到重置周期 + SNDR 值域;
  新增 Q13/Q14 并挂入 US-05/06/08 前置;五个独立事实改为引用 message-lifecycle §1。
- README/legacy:文档基线改为代码基线 eea1120 + git log 指引;补"外部协议冲突以
  SIS 为准"的维护规则;修正 /all/flights 过滤措辞;术语统一为「回填意图」。

验证:文档间章节引用 0 缺失、markdown 0 断链、SIS 引用小节全部存在、
Q1–Q14 正文与 Q 表双向可解析、代码块配对正常。
2026-09-10 20:54:01 +08:00
windyboy eea11203a2 fix(processing): 收紧消息生命周期与投递约束 2026-09-10 20:39:22 +08:00
windyboy dd839e6abb docs: 统一生命周期与处理职责口径 2026-09-10 19:48:49 +08:00
windyboy 8c6bb83b62 docs: 同步信箱生命周期实现口径——§4 缺口收敛、水位空洞老化、回填事实并入 PROC_STATE
message-lifecycle.md:§4 两个崩溃窗口随"终态与回填意图同体同行"消除(不再是缺口,改为
说明剩余未闭环项是回填跨库单写期间的持续失败);§5.1 补空洞老化规则(自增回滚空位会使
水位永久停摆,超出最大提交时延即判永久并放行,只跳过空洞不越过已存在的行);§5.2 补判据
机制(不依赖独立待办表,R 覆盖退避);§3 表格改回填意图与"到期或已达 NOW − R"。
design.md:§2.1 表以 INBOX_CURSOR 取代 BACKFILL_TODO、PROC_STATE 责任补回填事实;
§3.1 收报改为按 ID 区间扫描且不以标记为谓词;§3.3 终态由处理器事务内落库、死信同样可
补写;§6.1 维护作业改为 BackfillService.sweep;§7 补 max-commit-delay/overdue-backfill/
backfill-batch 与 mailbox.processed-value;§8 验证表补"终态未回填不得阻断发现"与"意图随
事务回滚";§9 入口表更新;§10 缺口两则改写为现状与待确认项。
architecture.md:§4 主流程第 1/3/4 步与 §3 存储表同步(水位、回填意图、单事务范围)。
flight-state.md:§2 对象表同步。user-stories.md:US-01/US-09 当前基础与落点改为实现现状、
Q2 口径改为"老化阈值待库方书面承诺"。
2026-09-10 11:00:02 +08:00
windyboy ffd3abd655 docs: message-lifecycle 审查修正——消解跨文档冲突、口径归口并登记 Q12
message-lifecycle.md:
- §5.3 日计划改为现行合并语义(缺席不删、缺失保留,引 flight-state §3.1),类型粒度统一 TYPE-STYP
- §5.1 明确两条扫描路径按 ID 区间取行、不以处理标记为谓词;水位定义与 Q2 绑定
- §4 两个缺口改与 design §10 同措辞;§5.2 的 R 构成挂 Q6/Q9,新增 Q12 积压跳过授权
- §6 方案 B 对账补“只补缺失行、标记单调不回退”;删除能力声明标注待 Q9 确认
- §7 改为“尚未实现”、统一 COUTMSGS_* 列名;§11 ID 不断链改为条件式不变量

user-stories.md:US-11 第 4 条限定为“本系统不写共享历史表/不清除外部信箱”;US-01 扫描谓词指向 lifecycle §5.1;US-01/09/11 前置补口径指针;新增 Q12;OPS-2 补积压与最老未处理信龄;Q10 列名统一。

architecture.md:共享 MySQL 红线限定主体;§6 中断恢复表改为指向 message-lifecycle §4;收报步骤补扫描谓词指针。

design.md:水位定义、回填死信处理、维护作业、归档、缺口恢复统一指向 message-lifecycle。

README.md:核对日期更新至 2026-09-10(代码基线 99a0f5f,文档基线 328bbf8);维护规则补规范类文档一档。
2026-09-10 09:00:53 +08:00
windyboy 328bbf88d2 docs: 新增 message-lifecycle.md——上游消息生命周期唯一规范(五事实/崩溃恢复/水位/超期补写/历史积压/信箱清除 A/B/出站契约),登记 Q9/Q10/Q11,README 索引与 architecture/design 指针补齐 2026-09-10 08:55:43 +08:00
windyboy 8068ed975b docs: 文档整理——统一 KAFKA 事件名与运营日术语,链接文字对齐标题,修复两处空行格式,README 补旧行为基线索引;主/共享级联语义上移至 flight-state §3.3 并增补 STATE_VERSION 不变量(architecture §9 引用同步改为 §3.1/§4/§7) 2026-09-10 08:16:31 +08:00
windyboy 99a0f5f738 refactor(flight-state): SCHD 日计划收敛为缺失保留合并语义并对齐现行设计文档
按现行 docs/flight-state.md(111 行版,§1-§7)全面对齐 domain 包及其消费方,
删除整套指向已退役长版文档(§5.x-§10)的引用与死代码:

- 语义:FlightStateEngine.snapshotState 由"完整快照整体替换"改为 §3.1 合并语义
  ——出现 Set/Replace、缺失保留、标量空串显式清空;DELETED 不被日计划恢复(§3.3)。
- 校验:validateMessage 移除从未接线的报文覆盖范围(scope)参数,只保留 §4 步骤 2
  的声明数量/航班标识/运营日推导校验;ScheduleBody 删除 scopeStart/scopeEnd。
- 删除死代码:domain/Decision.kt、FlightModel 的 SnapshotPatch/UpsertOutcome、
  ProcState.isTerminal/archivable、SnapshotFlag.SEQN_REGRESSION、
  ScheduleRecord.seqn(及 wire FlightRecordXml.SEQN);codec 移除未消费 FFID。
- 删除未接线且引用已退役列(fday/last_message_id)的 SqlDialect 方言脚手架,
  oracle11g README 改为按 V1 现列重建的口径。
- 注释/测试:domain、processing、infra 仓储与 jobs/delivery、配置类及对应测试的
  KDoc 章节引用全部对齐现行 flight-state.md/design.md;FlightStateEngineTest
  重写为合并语义(62/62 通过)。

V1__flight_state_baseline.sql 保留原样(内容注释仍带旧章节号,改动会破坏
已应用迁移的 Flyway checksum,待重建基线或 V2 净迁移时收敛)。
2026-09-09 22:17:04 +08:00
windyboy b75f566276 docs: 按代码现状收敛 architecture/design/user-stories 口径并对齐 flight-state 口吻
- design.md:删除已退场 PUMP_JOB/Handler/Decision 等引用,改按 ScheduleProcessor 与
  DynamicProcessors 实际分派描述;补 PROTOCOL 错误类与 RESP 守卫缺口;实现入口与 §10
  差异清单按 HEAD 代码重写
- architecture.md:修正悬空章节引用;关键决策删减为仍具约束价值的 4 条并连续编号 D1–D4,
  补当前状态列
- user-stories.md:逐条更新 US 当前基础与落点,清理已不存在的文件与旧叙事,Handler 术语统一
- README.md:实现核对日期更新至 2026-09-09(基线 d53a0a1)

flight-state.md 与 docs/legacy/ 保持原样。
2026-09-09 21:50:05 +08:00
windyboy d53a0a1c2f docs: remove retired schedule generation design 2026-09-09 20:22:10 +08:00
windyboy c2d4a76e3e docs: flight-state 定稿唯一设计规范,移除 §10–§12 并落地评审修正 A–M (ACM2-31) 2026-09-09 19:28:14 +08:00
windyboy 879d658159 refactor(flight-state): 按 flight-state.md 审计定稿全量重构脚手架与 SQL (ACM2-31)
- SQL 基线 V1__flight_state_baseline.sql 整体取代 V1.0.0–V1.4.0:
  PIPELINE_LOCK/PROC_STATE/MSG_EVENT/REQ_TRACK/BACKFILL_TODO/FLIGHT_SCHD
  + 8 张资源明细表 + FLIGHT_ROUTE_POINT + SCHD_SNAP_LOG 留痕层
- 废除 FDAY 日代/SCHD_GEN/名单差删:OPERATION_DAY 不可变(应用层校验 +
  条件更新强化 §7.4),STATE 仅 ACTIVE/DELETED,物理清除只在历史归档后
- 处理器化:applyScheduleRecords(§5.1 七步同一事务,重放判定/整包
  DEAD(PROTOCOL)/归属冲突不落地)+ FLOP/FDEL/ADFT(tombstone 仅
  ACTIVE→DELETED,重复 FDEL 幂等不推进版本)
- 投递:KAFKA_SCHD 同 FLID 按最新 STATE_VERSION 合并,被压掉事件关闭,
  TOMBSTONE 发 null 值消息(键缺失=删除旧值 §7.3)
- 回填待办改为业务事务内预登记,消除提交后写待办的崩溃窗口(§7.2/§10)
- XML 解码改为 jackson-dataformat-xml 数据类直接映射(SIS 信封强类型,
  FLTR 开放标签泛型承载)
- 历史归档/物理清除顺序不可颠倒:归档确认成功集才物理删除,未接通删 0 条
- 移除 PUMP_JOB 队列/ReferenceService/FlightStoreDiffTool 等旧机制与测试,
  新增运营日/引擎/快照/FDEL/归档顺序不变性回归测试
2026-09-09 17:53:08 +08:00
windyboy 6af292d103 docs(flight-state): 移除对账账本并按三轮评审收敛删除与时序语义 (ACM2-31) 2026-09-09 15:40:54 +08:00
windyboy 9e434d6486 docs(flight-state): 重写当前态设计为简洁版并落定航班身份模型 (ACM2-32)
按评审意见重写 docs/flight-state.md(603 → 332 行),去掉堆叠的补充说明,每条规则只保留一处:

身份模型:
- FLID 由 AODB 分配、与运营日绑定;同一 FLNO 不同运营日 = 不同 FLID
- OPERATION_DAY 一经确定不可变,跨日归属不符属协议异常(整包拒绝)
- 延误跨日不是迁移:同一 FLID、运营日不变,由 FLOP 继续更新
- 补齐 FDEL 删除入口(§2、§6.2):按 FLID 删除并移出名单,不换代
- 代码共享与过站关联分离;物理列名 FDAY 统一改称 OPERATION_DAY

快照与差删:
- 11 步事务固定顺序;差删集合即 O − N,OPERATION_DAY = D 为删除前断言
- 覆盖范围按“是否单个完整运营日”判定:48 小时窗口只覆盖状态、不差删
- 完整快照字段缺失即清除(SIS §3.16 注释 2/4),只对本模块映射字段生效
- SEQN 仅用于同会话顺序观测,不启用陈旧拦截

其余:留痕 RESULT/FLAGS 分列、身份不变量六条、保留期默认 7/90/7 天、
未定事项与 SIS 规范依据各收进一张表(§10)。
2026-09-09 14:54:54 +08:00
windyboy 2b112f527c docs: consolidate flight state design 2026-09-09 11:43:34 +08:00
windyboy 4449ee5dcc docs(flight-state): 按 2026-09-09 二轮评审修正设计文档,开放项锚定 ACM2-31 (ACM2-31)
依据 ACM2-31 二轮外部评审逐条修正,待协议确认项已对照 SIS_AODB_RMS V0.1 佐证:

- 标注约定:区分规范要求与现状/未决披露,杜绝混作依据
- 航班身份:FLID≠航班号,FDEL+ADFT 换名时 FLID 可能不同(规范 §3.18),代码共享独立事件经 MAID/TAID 关联
- FDAY 三日期概念区分(业务日期/快照覆盖日期/名单归属日期);跨日归属回迁列为未决(§3.3 约束 4)
- 规则 M 补成立条件标注(快照生成时点 + 投递顺序前提未逐条核实)
- 差删完整性前提引协议口径:单包不分段、RECS 记录数、完整快照注释(§3.16.1)
- 动态线集合全量/增量语义待逐类确认(CHOT CSNO 实为机位序号 §3.22.2),Replace 全集仅对快照线定案
- tombstone 澄清为自定义删除事件(非 Kafka 原生墓碑),删除版本/世代缺口开放
- 行锁表述纠正(跨实例同样生效,但不实现认领/选主/切换/FIFO);Oracle 空串=NULL 为既定行为,验证目标改为字段语义保真
- ACTT 实际时间口径(进港 ATA/出港 ATD §3.20),修正示例字段名;FLOP 29 类改为规范 §3.19–3.43 实数;99 上限标注协议出处
- 语言修订:主泵/数据一致性比对/JSON 数组/整态替换措辞等;错误矩阵每类错误单一默认路径
- 开放项(回迁防护/动态集合语义/删除世代/幂等键/FIFO 参数/一致性读/TAOP 语义核对等)归集 ACM2-31
2026-09-09 10:47:03 +08:00
windyboy bb81deae0a docs: 航班状态设计重写为当前基线,按请求/下载与动态两条线讲清状态变更 (ACM2-30) 2026-09-08 18:50:34 +08:00
windyboy 7c2d22e8f1 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 全绿
2026-09-08 17:44:20 +08:00
windyboy 20aafb9ab0 feat(processing): 快照流程锁内复核收敛 + 异常显式清除语义 + 语义矩阵定稿 (ACM2-29 P2-5/M3)
- SnapshotFlow 收敛到 v2 §5 事务顺序:锁外仅解析校验;取得 PIPELINE_LOCK 后
  锁内复核快照身份(last_message_id 重放短路)→ 锁内读代与当前航班态 →
  计算 nextState → 写入 → CAS → 事件 → SUCCEEDED。锁内 CAS 失败属数据异常,
  一律回滚 FAILED(INFRA),删除「版本号相同即视为重放」的推断路径(评审 F7/F8 收口)
- M3/F4:异常对象(FDIV/FRET/FLAB)显式清除语义——null 字面量/空对象/空串
  翻译为 Clear 命令;FlightNextState.clearedKeys 携带本次清除键;增量路径按
  映射把前缀标量列置 NULL;库内清除后读视图无该键(线格式保持键缺失,显式
  清除表达留待阶段 2 按下游契约定)
- StubFlightSchd 增量分支改为 nextState 权威整体替换(引擎已合并当前态),
  天然承载 Clear;flattenScalarsOnly 去除冗余循环(L2)
- docs/flight-state-semantics.md:16 类结构语义矩阵定稿(P0-A 交付物落库)
- 新测试:引擎 0 标记/异常清除/混排 fail-fast 单测;JDBC 异常清除回环用例

验证:MSGX_PG_PORT=5433 真实 PG ./gradlew test --rerun-tasks
105 用例 0 失败 0 跳过
2026-09-08 15:44:48 +08:00
windyboy 7abe3fbcd7 docs(flight-state): v2 设计、评审报告与决策复核入口落库 (ACM2-29) 2026-09-08 12:01:38 +08:00
windyboy cd5de56937 refactor(flight-schd): 全宽表零子表收敛 16 个集合并定案 PIPELINE_LOCK 行锁 (ACM2-29)
依据 ACM2-29 新定案【全宽表·零子表】,废除「*_TXT 过渡 + 按需升独立子表」
原规划(对 XSD maxOccurs=99 的过度设计),结合报文样例与成都现场地服实际
规律(登机门 1~2、值机柜台 1~3、转盘 1~2、延误单有效、靠撤桥/轮挡各 1 次)
将 16 个明细集合全部收敛为 FLIGHT_SCHD 宽表标量列或紧凑 VARCHAR 字串。

行为变更:
- V1.2.0 迁移:新增集合平铺槽位列(GTDT×2/CKDT×3/CLDT×2/PSDT×2/CHDT×2,
  跨集合同名属性按 B 前缀/CH 前缀消解)、里程碑标量列(DELY_*、ABTM_A/D、
  CHOT_ON/OFF)、异常前缀标量列(FDIV/FRET/FLAB)、紧凑航路字串
  (ROUT_PATH/ERUT_PATH)与无界集合 JSON 字串列(SRVT/VIPF/MAFL_TEXT);
  删除全部 16 个 *_TXT 文本列;不建任何子表、零 CLOB;
- 仓储层:删除子表替换/回查机制,写侧集合键平铺为列(序号属性 0 = 显式
  删除标记,分舱复用条目抹平去重,超界按定案丢弃),读侧由平铺列重建
  16 个集合键,视图与 legacy flightInfo hash 保持同构(KAFKA_SCHD 线格式
  与 FS7 Diff 逐字段比对不受存储形态影响);
- I5 单写者锁修正:PIPELINE_LOCK 单行 SELECT ... FOR UPDATE 取代
  PG advisory lock,PG/Oracle 11g 同构,无 DBMS_LOCK DBA 特权依赖;
- FlightFieldsJson 对契约结构字段解析 JSON tree 输出原生数组/对象,
  杜绝集合被再次编码成字符串的双重转义。

不变量:消息严格 FIFO、单写者互斥、增量=字段级合并(集合键出现=单资源
集合级全量快照替换)、快照=整体替换、按代域化差删均不变。

迁移影响:本地开发库为一次性测试数据,已重置并由 Flyway 全新应用
V1.0.0→V1.2.0(同文件名内容变更,沿用旧库会触发校验和不匹配)。

验证:./gradlew test 全绿(66 个用例,含本地 PG 真实方言集成:集合槽位
替换/清除、里程碑与航路平铺回读、PIPELINE_LOCK NOWAIT 互斥与提交释放)。
2026-09-08 08:48:24 +08:00
windyboy ff6cec08c8 refactor(flight-schd): 按现场 11g 约束将运营航班存储改为宽表 (ACM2-28 修订)
现场环境仅提供 Oracle 11g(无任何 JSON 能力),废除 FLTR_JSON JSONB 整文档存储:

- V1.1.0 迁移重写:FLIGHT_SCHD 改为一行一航班宽表(SCHD.FLTR 标量字段列 +
  1:N 明细集合序列化文本列),SCHD_GEN.FLIDS_JSON 展开为 SCHD_GEN_FLID(FDAY, FLID);
  已应用过旧版迁移的环境需重建 schema 重放
- 契约层:FlightChange/Handler 在线视图改为字段集映射(与 legacy flightInfo
  hash 同构),仓储白名单拒绝未知字段;增量写=字段级合并(hmset 同语义),
  快照=整体替换
- 事件载荷:快照投递与投影重建经 FlightFieldsJson 确定性序列化(键序稳定)
- 影子对拍:FlightStoreDiffTool 改为 PG 宽表列值 vs legacy FLTR JSON 逐字段
  归一化比对,新增嵌套集合比对用例
- 测试:61 用例全绿(不变量门槛 1/2/3、UTC 方言、真实 PG 方言集成、清场五场景)
- 文档:decision-flight-state.md 追加 §8 修订记录(不改写定案历史),design.md 表说明同步

11g 方言移植(ON CONFLICT→MERGE、advisory lock 替代、Flyway/驱动矩阵)、
集合列升子表、类型化列提升等未尽事项另立 Plane issue 跟踪。
2026-09-07 17:04:57 +08:00
windyboy 7b7b61f100 feat(processing): 实现自有 PostgreSQL 运营航班权威存储与单事务闭环 (ACM2-28)
- FS1: 增加 Flyway 迁移 V1.1.0__flight_schd.sql,创建 FLIGHT_SCHD 与 SCHD_GEN
- FS2: 实现 FlightSchdRepository 接口及 JdbcFlightSchdRepository 与 StubFlightSchd,增强 JdbcOps 事务管理
- FS3: 扩展 MessageProcessor 事务 2 与按 FLID 点查视图,合并变更、事件与终态入单事务提交
- FS4: SnapshotFlow SQL 化(批处理 upsert、域内差删、SQL CAS 推进与熔断保护),JobExecutor 接入 PG 清场删除
- FS5: 彻底退役 Redis 权威与写路径,移除 FlightRedisClient、Lua 脚本、健康指示器与配置残留
- FS6: 补齐 U09/U29 不变量门禁(崩溃幂等、CAS 防并发、ADFT 存活保障、非 UTC JVM/会话时区无漂移)与 FlywayMigrationTest
- FS7: 交付影子对拍比较内核 FlightStoreDiffTool 与单元测试
- FS8: 全面回改 decision-flight-state、architecture、design、user-stories 权威文档与规范
2026-09-07 16:12:00 +08:00
windyboy abacd6a3f4 docs: 收敛架构设计规范与用户故事实施清单 (ACM2-28) 2026-09-07 15:10:57 +08:00
windyboy bf233f7f69 docs(arch): 规范架构关键决策并清理冗余口水话与会话残留
- 审查重构关键架构决策:规范 D1~D8 为规范定案与权衡结构
- 扩充系统级核心决策:固化跨库存储边界(D9)、主泵单写者模型(D10)、Kafka 幂等生产契约(D11)与报文归档契约(D12)
- 清理会话残留与口水化表述(家务活/见缝插针/变砖/沙箱环境记录等)
- 规范技术栈基线与当前就绪度客观描述
2026-09-07 14:34:57 +08:00
windyboy d9bfa576f8 docs: 标记 ACM2-23~27 Plane Done 闭环(346929e) 2026-09-07 14:15:31 +08:00
windyboy 346929ea5d docs: 二轮审查文档收敛 ACM2-23~27(Kafka/依赖/ResponseDto/STATUS/格式) 2026-09-07 14:15:07 +08:00
windyboyandCursor 7ccdd00a31 docs: 统一中间件定位与 JDBC 轮询主路径口径
Align README, architecture, design, config comments, and ingress docs
with the upstream message-processing middleware model: external CIIMS write
to CMINMSGS, JDBC poll as production ingress, HTTP /cminmsgs/send as compat.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-07 10:27:44 +08:00
windyboy 8c8d2613c2 docs: 合并文档目录——doc/ 与根目录基线材料统一入 docs/legacy/
消除 doc/ vs docs/ 双目录混淆(git mv 保留历史):
- doc/msgexchange-api-legacy-user-stories.md → docs/legacy/
- doc/unisysaodbsis.xsd → docs/legacy/
- SIS_AODB_RMS-V0.1.md(根目录 703KB)→ docs/legacy/
- 删除空 doc/ 目录;README「文档」导航补充 docs/legacy/(外部参考/基线材料,
  非本系统文档);更新 README/architecture 与基线文档自引的路径引用。

docs/ 现为:architecture.md、design.md(自产)+ legacy/(legacy 拷贝参考)。
2026-09-07 08:29:49 +08:00
windyboy e0ce863905 refactor(storage): ACM2-12 落地——自有 PostgreSQL 全内部状态,共享 MySQL 仅信箱
按 ACM2-12 定案把仓库存储口径从"MySQL 六辅助表"推进到最终形态:
- 迁移:删除 MySQL V2.0.0 六表脚本,新增自有 PG V1.0.0
  (PROC_STATE/MSG_EVENT/PUMP_JOB/REQ_TRACK/REF_MASTER,PG 方言,REQ_TRACK.COUTMSGS_ID
  按 U18 修为 BIGINT;FLIGHT_STATE 阶段 B 缓做不建表)。
- 配置:datasources.default = 自有 PostgreSQL(enabled=false 待 U05);
  移除 datasources.reference/flyway.reference;新增 mailbox.shared-mysql(共享信箱,
  仅 DML,不建表);test profile 显式启用 H2 内存 datasource。
- 接口/注释:Repositories KDoc 按 ACM2-12 归属(自有 PG / 信箱封装 / gen→Redis 占位 /
  FLIGHT_STATE 缓做);InboxService、Pump 事务模型注释对正
  (信箱外部副作用 + PG 本地事务 + 回填最终一致)。
- 文档:architecture §1/§2/§3/§4/§5(D1/D2)/§6/§7/§8、design §1/§2/§3.1/§3.4/§3.5/§6/§9、
  README 全部按 ACM2-12 收口(自有 PG + 共享信箱 + Redis 动态/gen + 阶段 B 缓做)。

验证:37 测试全绿;dev stub 冒烟仍可启动、/health UP、收报 200。
信箱适配层(CminmsgMailbox/OutboxMailbox)、gen→Redis Lua、作业窗口语义、影子重设计
属 ACM2-12 Checks ②③④⑤(U05/U09 批次)。
2026-09-07 08:21:11 +08:00
windyboy a3f1da4bcc feat(ref): 21 类静态主数据独立 PostgreSQL 参考库边界就位(ACM2-11 落地)
按 ACM2-11 定案调整(业务事务库 MySQL + 航班动态 Redis 不变):
- 接口拆分:RefDataRepository 收为 gen-only(SCHD_GEN/流程 4 CAS,留守业务库);
  新增 StaticRefRepository + RefUpsert 对齐 SOURCE 审计(N19)。
- 调用点:RequestCoordinator 应答落库、ReferenceService(21 类同步 TODO) 指向
  StaticRefRepository;Decision.refUpserts 与 Pump 事务 2 注释同步
  (静态写为弱事务,不入主泵事务 2)。
- Stub:StubRefData 仅 gen;新增 StubStaticRef(内存,保留 source)。
- 配置:datasources.reference / flyway.datasources.reference 占位
  (PostgreSQL,enabled=false 不建连;驱动 org.postgresql 随阶段 6 实装引入,
  版本由 platform BOM 约束 ~42.7);catalog 补 postgresql。
- 文档:README / docs/architecture.md §2/§6 / docs/design.md §2/§6/§9 数据边界
  全部按"21 类 → PG 参考库、gen 留守 MySQL、Redis 动态不变"更新。

验证:37 测试全绿(./gradlew test,接口拆分后无破坏)。
表结构/迁移/ReferenceService 实装/应答接线属阶段 6(U05 批次后)。
2026-09-07 07:56:54 +08:00