Files
msgexchange-v2/docs/README.md
T
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

64 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 设计文档入口
实现核对日期:2026-09-11(代码基线以 `git log -- docs/` 为准)。文档描述**目标设计**,不等于已实现;测试通过不等于现场已发布。进度与缺口在 Plane(ACM2)跟踪;文档只记录「对外主张当前是否可声明」,见 [invariants.md](invariants.md) 声明边界。
## 1. 按读者选入口
| 你是谁 | 从哪读起 |
|---|---|
| 新开发者 | [invariants.md](invariants.md)(前提 / 不变量 / 声明边界)→ [design.md](design.md)(机制)→ [reference.md](reference.md)(参数 / 指标 / 模块) |
| 库方 / 上游接口人 | [contracts.md](contracts.md)(条款 `C-x` 与待确认 `Q` |
| 值班主任 / 运维 | [reference.md](reference.md)(参数与指标)→ [invariants.md](invariants.md)(哪些主张当前不可声明)。执行规程在上线/切流前另立,设计阶段只保留前置条件与红线 |
| 评审 / PR 作者 | [invariants.md](invariants.md) + 本文 §5 评审清单 |
## 2. 文档职责(一个事实只有一处定义)
| 文档 | 唯一职责 |
|---|---|
| [architecture.md](architecture.md) | 系统边界、模块职责、存储归属、架构决策(D1–D4)。 |
| [invariants.md](invariants.md) | 前提 `PRE-x`、不变量 `INV-x`、声明边界 `CLM-x`、验证映射。 |
| [design.md](design.md) | 管道机制:收报·水位、主泵·处理·事务边界、回填、投递、作业与归档。 |
| [contracts.md](contracts.md) | 对外承诺与要求(`C-x`)、待确认事项(`Q`)。 |
| [reference.md](reference.md) | 参数注册表、指标与健康、模块入口、错误分类。 |
| [flight-state.md](flight-state.md) | 航班域模型与合并语义。 |
| [user-stories.md](user-stories.md) | US / OPS 验收目标。 |
| [legacy/](legacy/) | 现役行为基线与外部协议事实([SIS 规范](legacy/SIS_AODB_RMS-V0.1.md)、[XSD](legacy/unisysaodbsis.xsd));与现行文档冲突时以 SIS 为准。 |
`message-lifecycle.md` 已并入 design.md,文件仅保留跳转说明。
## 3. 事实归属表
| 事实 | 唯一归属 | 其他文档怎么写 |
|---|---|---|
| 水位 `W`、空洞判定与推进条件 | design「收报与水位」 | contracts 写对库方的承诺 `C-1``C-3`reference 写参数 |
| 保留期下界 `R_keep`、清除前置条件 | contracts「保留与清除」 | design 只引 `C-x`;执行步骤在上线前另立 |
| 处理标记值集与写权限 | contracts `C-5` | design 只写行为约束「只写空标记、不回撤、不覆盖」(`INV-6` |
| 回填四结果、放弃语义、`R` 的作用 | design「回填」 | invariants 记结论与可声明性 |
| 退避 / `claim-batch` / 回填期限等取值 | reference「参数」 | design 只引 `PARAM:x` |
| 消费权排他、ID 不复位、报文不可变、时钟、单实例 | invariants「前提」 | 其他文档只引 `PRE-x` |
| 航班身份、合并语义、`STATE_VERSION``OPERATION_DAY` | flight-state.md | design 只引域规则 |
| 对外术语(落信 / 入站 / 库方 / 处理标记) | contracts「术语」 | — |
## 4. 引用与写作纪律
1. **引用只用稳定 ID**`PRE-x``INV-x``CLM-x``C-x``PARAM:x``[G-x]``[Q-x]``US-xx``ACM2-nn`。**不再用章节号做跨文档引用。**
本条取代旧版 README 的「其他文档引用章节号」规则:章节号随增删章节腐烂,指针失效后必然被改写为复述——重构前实测有 30 处「唯一定义处」与 33 处跨文档章节引用。
2. 指针之后**不再复述**被指内容。若两处需要同一段话,说明它放错了位置。
3. 文档不记进度,只记「主张是否可对外声明」。进度在 Plane。
4. 机制段只写「是什么 / 为什么」。验收 → invariants 验证映射;前置条件、红线与库方方案 → contracts / invariants;参数默认值 → reference;操作步骤在上线/切流前另立规程,设计阶段不写。一句话一个主张;加粗每节 ≤ 3 处。
5. 数值只有两个家:参数默认值与指标名在 reference.md;契约数值(保留期、值集、下界)在 contracts.md。
## 5. 维护清单
**Q 答复落地(4 步)**:① 在 contracts.md 就地补结论与日期 → ② 改 reference.md 的默认值与「依据」列 → ③ 机制有变才改 design.md → ④ 在 invariants.md 的 CLM 上划掉挂起。
**PR 评审 4 问**:新事实是否已有归属?是否复述了别处?是否用了稳定 ID?是否把运维 / 验收写进了机制段?
**尺寸触发器**design.md 超过约 800 行才按子系统再拆;invariants.md 超过两页先怀疑混进了机制。
## 6. 当前状态
- 2026-09-11 文档体系重构:新增 invariants.md / contracts.md / reference.mddesign.md 由 design.md + message-lifecycle.md 合并(后者保留跳转 stub);跨文档引用由章节号改为稳定 ID。
- 不建 runbooks.md:设计阶段没有可执行的运行环境,操作步骤在上线/切流前另立(见 Plane ACM2-48);设计阶段需要的只有前置条件与红线,它们分别在 contracts(`C-7``C-12`)与 invariantsCLM-x)。
- 目标设计与交付状态分离:未交付、未确认、不可声明的主张见 invariants.md 的声明边界与 Plane ACM2,不在正文里逐段标注。