Commit Graph
140 Commits
Author SHA1 Message Date
windyboyandCursor c63d6d4dce docs(acm2-75): 重排 Q 序号并补齐 Redis 投影与查询侧边界
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 13:06:59 +08:00
windyboy 2a06c42993 docs(acm2-75): 删除作废条款并收紧 CLM 与 Q 序号
- 删除 4.4 已作废条款(INV 旧编号已无外部引用)
- CLM-3,6,7,8,9,10,11 收紧为 CLM-1 至 CLM-7,全文引用同步更新
- 6.2 已确认事项按 Q 编号排序
- C-1/C-4/C-7/C-11 合并已确认结论,6.1 清空
2026-09-16 17:56:19 +08:00
windyboyandCursor dc1c49af6e docs(acm2-75): 精简不变量与声明边界,去掉无依据条目
审改 specification 管道/航班域/投影与 CLM:作废与需求重复或依据不足的 INV/CLM,白话重写保留条款,并同步架构、实现与引用注释。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 17:26:49 +08:00
windyboy 6fa4da60f1 docs(acm2-75): 收敛 2.1-2.4 约定条目并重排编号
- 2.1 共享信箱:从 14 条收敛为 C-1、C-2
- 2.2 上游:从 8 条收敛为 C-3 到 C-6
- 2.3 HTTP 入口:C-7、C-8
- 2.4 下游:C-9 到 C-11
- 删除 2.5 已作废条款节
- 更新全文交叉引用
2026-09-16 14:43:38 +08:00
windyboy 88a182a2d9 docs(acm2-75): 按审改收敛约定条目措辞与标记 2026-09-16 12:38:49 +08:00
windyboy 23f5ba6f7b docs(acm2-75): 处理完成术语改用日常语言 2026-09-16 12:30:19 +08:00
windyboy 68c6bab7ef docs(acm2-75): 处理完成术语压缩为一句话 2026-09-16 12:28:59 +08:00
windyboy 6bb5faab79 docs(acm2-75): 处理完成术语改为直白表述 2026-09-16 12:27:49 +08:00
windyboy f938242028 docs(acm2-75): 收口处理时间口径与开篇元信息 2026-09-16 11:49:47 +08:00
windyboy ba7494242d docs(acm2-75): 术语表去契约化并修正完成与投影定义 2026-09-16 11:40:43 +08:00
windyboy 1424293194 docs(acm2-75): 信箱术语改为只述归属与边界,读写细节归各契约 2026-09-16 11:39:09 +08:00
windyboy 87d28fd8bc docs(acm2-75): 术语处理标记点名为处理时间 2026-09-16 11:36:26 +08:00
windyboy 8a690705e3 docs(acm2-75): 精简术语表并顺化表达;校验器兼容约定小节名 2026-09-16 11:34:54 +08:00
windyboy 56ad8c9220 docs(acm2-75): 收窄 c30 写边界并修正架构扫描谓词指针 2026-09-16 11:12:09 +08:00
windyboy 61d6c3779b docs(acm2-75): 消除规范内重复定义并修正映射与指针 2026-09-16 11:08:13 +08:00
windyboy 42ef6fd60f docs(acm2-75): 消除 c24 在途名额的指代歧义 2026-09-16 10:55:12 +08:00
windyboy 06f12cd35c docs(acm2-75): 清理 inv20b 残留关联并将双实例验收标记为未闭环 2026-09-16 10:42:42 +08:00
windyboy 2763e8463d docs(acm2-75): 按三轮复审修正交接口径、单实例声明与日计划幂等归属 2026-09-16 10:39:24 +08:00
windyboy 72c282bcff docs(acm2-75): 按复审结论修正投影可见性、重复身份与回退交接口径 2026-09-16 10:32:27 +08:00
windyboy 491fc276c9 docs(acm2-75): 按审核结论收口规范内容缺口 2026-09-16 10:21:42 +08:00
windyboyandCursor fd65bb24fb docs(acm2-75): 按需求与架构收口契约和规范
补齐接口契约的入站、Redis 与出站边界,规范对齐已定语义并作废过期条款;Kafka 生产端约束编号改为 D2。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 08:49:19 +08:00
windyboy 7cd17409f5 docs(acm2-75): 起草接口契约与现役对拍线索 2026-09-15 22:10:19 +08:00
windyboy de2549af2e docs(acm2-75): 澄清需求与架构验收口径 2026-09-15 21:48:37 +08:00
windyboy ca7c36ef38 docs(acm2-75): 精简重构架构文档并对齐两段事务口径
- architecture.md:§1–§7 全文精简重构——图收敛为拓扑、主流程改七步时序+类别差异表、
  约束红线去行话、数据归属去黑话、关键决策按章程瘦身为 D1/D2
- specification.md:INV-17b 补静态参考数据单事务口径
- implementation/reference/README/requirements:对齐扫描谓词与两段事务表述
- AGENTS.md:新增文字纪律与用词归属规则
2026-09-15 13:23:40 +08:00
windyboy 723b3e4c09 docs(acm2-75): 精简规范引言并重写术语表
- 删除引言段:唯一出处清单、编号规则与空缺说明按评审结论去除
- 术语表逐行改写为平话:库方收敛为 CIIMS adapter 方(信箱表在其 MySQL,表结构变更与清除归它,机制未定);上游收敛为 CIIMS adapter 写入,AODB 经它落信
- 落信涵盖兼容 HTTP 入口;处理标记标注与需求文档「处理时间」的对应
- 术语行去掉内部表名、编号括注与管道术语指针;处理完成、Redis 投影按 US-05/US-07 口径收窄 Redis 条件
2026-09-14 17:56:18 +08:00
windyboy e57152dd83 docs(acm2-75): 规范全面对齐新需求口径
specification.md 按新需求重写:
- 扫描模型反转:水位/ID 区间 → 处理标记为谓词(C-30 取代 C-1/C-2/C-13;INV-2b 替代 INV-2/4/5)
- Redis 回归为查询投影:处理完成门(INV-23)、投影治理与同源读取(INV-24),INV-11b 扩充非权威清单
- 日计划快照语义反转:缺席航班删除、未携带字段清除(INV-15b),增量报文语义另立(INV-14b)
- 终态记录归档 → 到期删除(INV-25),G-PROC-HST/G-HST-RETENTION/G-REPLAY-CHANNEL/G-FLOP-DIRECTION 关闭并清扫全仓引用
- 重放移出交付范围:R_keep 公式收窄、CLM-3 重定义为重处理幂等、Q6 删除
- 新增 INV-23~28:Redis 完成门、投影治理、清理谓词、参考数据逐类保存/门控、历史先行红线
- C-25/C-26 定案(原子级联不回发 EROR;快照未携带字段清除),Q13/Q14 关闭,Q6/Q12 删除,新增 C-30/C-31

联动:implementation.md 收报/回填/快照/生命周期/FLOP 方向各章按新口径重写;architecture.md
D1/D4 改删除语义;reference.md 退役 archive-after;requirements.md OPS 表改为注册表定义
语法;AGENTS.md 状态边界随新口径更新;check-docs.py OPS 注册表节名同步。

scripts/check-docs.sh 全部通过。
2026-09-14 16:40:00 +08:00
windyboy 2471ea9cab docs(acm2-75): 大范围修正需求定义与验收口径
- 收敛为 US-01~US-14 + OPS-1~4 的交付定义,去除阶段 A 框架、覆盖矩阵与契约依赖索引
- 明确系统定位与数据流向:航班动态入 PG 并同步写 Redis、经 Kafka 通知网页客户端,静态参考数据入库供 admin-api 只读
- US-14 改为航班历史与清理(ES 历史库),删除原 US-15
- 非目标重写:单实例、至少一次投递、同 FLID 保序、Oracle 未验证不承诺、不调 admin-api
2026-09-14 15:54:16 +08:00
windyboy 0fbdf381b2 docs(acm2-75): align static reference data flow 2026-09-14 08:28:47 +08:00
windyboy 5b7938ac4b docs(acm2-74): 补齐 FLOP 逐类语义、静态参考数据与数据结构
自洽与精简:

- specification 补第四种状态词 [我们自证]、验证映射补 INV-14 两行、去 CLM-7/CLM-9 的进度语、补编号空缺说明
- architecture/requirements/implementation 去除逐字复述(领域决策三写句、时间常数排序、C-25/C-26、INV-12/21/22)与参数值重复
- README 与新文档对齐:收报谓词改 ID>W、删不存在的 reference/ 包与 lua/、删 msgx.phase 与 MSGX_REDIS_URI、设计权威口径改 docs/、进度段改指 Plane

内容补齐:

- 新增 implementation.md「动态运行事件(FLOP)」:按 SIS 3.19–3.43 的 25 类逐类映射与空标签语义(含 CNCL 空标签为撤销等),补 RMS→AODB 方向拒绝、ROUT 只保留 4 条、VIPP 忽略等约束;厘清 legacy 29 类与 SIS 25 类的差集
- 新增 implementation.md「静态参考数据」章:13 类参考数据与资源状态的 RTYPE/RKEY、list 与增量合并语义、删除只由 DEL 表达、SLST/REMT/RSTA 机位与登机桥映射
- §11.3 数据结构改为标量分组表与集合明细表(元素键、条数上限、SIS 锚点)
- specification 新增 G-FLOP-DIRECTION / G-FLOP-UNMAPPED / G-REF-DATA;Q8 收窄为真实报文分布与 admin-api 清单
2026-09-14 07:34:17 +08:00
windyboy cedd859bdf docs(acm2-74): consolidate design documentation 2026-09-13 20:31:13 +08:00
windyboy 800d7617f2 chore(db): 压缩 Flyway 迁移链为单基线
原 V1–V10 的净结构全部合并进 V1__flight_state_baseline.sql,迁移链收敛为一条。
表集合、逐列类型/非空/默认值、表级约束、索引与种子行经重放比对与旧链条一致;
仅丢弃 5 条只对既有库有意义的存量数据语句(RECEIVED_AT/ENQUEUED_AT 回填、
schd 与开放请求去重、SENT_AT 回写)。

已按旧链迁移过的库版本链与校验和对不上,必须重建 schema 或删除数据卷后重跑,
禁止手工 repair 或改写 flyway_schema_history。

- 删除 V2–V10 共 9 个迁移文件
- 注释统一范式并改用稳定 ID(INV-x/C-x/G-x),修正 KAFKA_MSG/KAFKA_SCHD 与实际值不符
- 同步 docs/reference.md、docs/user-stories.md、oracle11g/README.md、README、application.yml、compose.yaml
- FlywayMigrationTest 改为断言单基线,并补 MSG_EVENT.SENT_AT 覆盖
2026-09-13 16:31:14 +08:00
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 a6b2120836 fix(infra): 消除 StubRepositories 编译警告
- KDoc 移到注解之前(2 处)
- upsertSchd 改显式 null 检查避免 !! 警告
- findBackfillDue 链式调用转 asSequence
- 移除 persistFullState 中 always-null 的 fallback
- markDeleted/revive 改 !! 断言(mains/snapshots 同步写入)
2026-09-12 22:39:16 +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 8631ec0b20 docs(agents): 改写为角色、工作流与项目约束约定 2026-09-12 21:00:01 +08:00
windyboy 799243b0a8 fix(ingress): diagnose missing shared mailbox generated key
共享信箱 insertRaw 取不到 CMINMSGS_ID 时抛出可诊断错误,指明该列必须由库方生成(C-14、Q7);只改适配代码,不动共享 Schema。
2026-09-12 20:56:41 +08:00
windyboy 267eb20219 feat(jobs): expose last job failure time
JobActivity 记录最近失败时刻并进入快照;JobRunner 失败时上报该时刻;新增指标 msgx.pipeline.job.last_failure_age_seconds 与健康明细 lastFailureAgeSeconds(对齐 reference 作业健康口径)。

验证:./gradlew test 145 tests / 0 fail / 0 skipped。
2026-09-12 20:56:41 +08:00
windyboy 8a380c7646 refactor(config): drop system-time defaults from domain and entry points
删除会被误用的系统时间默认值:MsgEvent.createdAt、ProcState.updatedAt、InboxPoller.pollOnce(now)、HistorySweepJob.run(now)、Identity.of(day)。Identity 的日期边界改由 MessageProcessor 按 PARAM:msgx.operation-day.zone 算出后传入(边界关闭时身份值不变);StubProcState/StubInbox 改注入 Clock(测试可传假时钟),全部调用点显式传时间。

验证:./gradlew test 145 tests / 0 fail / 0 skipped。
2026-09-12 20:56:41 +08:00
windyboy ebe81d8665 fix(processing): stamp outbox events from the injected clock
所有生产 MsgEvent 构造点显式传 createdAt:ScheduleProcessor.snapshotEvents、FdelProcessor 删除事件、eventsFor(新增 createdAt 参数,三个调用点传注入时钟)、HistorySweepJob.tombstone(传 run 的 now)。领域默认保留给测试便利,但生产写入不再依赖系统时钟。

验证:./gradlew test 145 tests / 0 fail / 0 skipped。
2026-09-12 20:52:24 +08:00
windyboy 4b71b5bb09 feat(jobs): expose job heartbeat and scan backlog
新增 JobActivity 持有作业心跳与扫描积压,JobRunner 每轮 tick 上报(失败只计数、不刷新心跳),PipelineMetrics 注册 msgx.pipeline.job.heartbeat_age_seconds / ticks.total / failures.total / last_sweep_selected,新增 JobRunnerHealthIndicator(未启动 UP 并标 started=false;已启动但心跳缺失或超过 3×扫描周期 DOWN)。对应 reference 作业健康段与 [G-JOB-HEARTBEAT]。

验证:./gradlew test 145 tests / 0 fail / 0 skipped(新增 JobRunnerTest 2、JobRunnerHealthIndicatorTest 4、PipelineMetrics 指标注册 1)。
2026-09-12 20:52:24 +08:00