docs(acm2-75): 精简不变量与声明边界,去掉无依据条目

审改 specification 管道/航班域/投影与 CLM:作废与需求重复或依据不足的 INV/CLM,白话重写保留条款,并同步架构、实现与引用注释。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
windyboy
2026-09-16 17:26:49 +08:00
co-authored by Cursor
parent 6fa4da60f1
commit dc1c49af6e
12 changed files with 132 additions and 177 deletions
@@ -12,7 +12,7 @@ import org.apache.kafka.clients.producer.ProducerRecord
* Kafka 真实投递端口:通过 [ProducerRegistry] 拿 default 生产者,D2 参数
* acks=all / enable-idempotence=true / max-in-flight=1)由 `KafkaD3Check` 启动自检。
*
* 发送同步等 broker 确认(`Future.get()`),语义是至少一次——满足 INV-10 / C-29
* 发送同步等 broker 确认(`Future.get()`),语义是至少一次——满足 C-9 / US-08
* 仅在 `msgx.stubs != true` 时装配;stub 模式走 `StubDeliveryPort`。
*/
@Requires(property = "msgx.stubs", notEquals = "true")
@@ -31,7 +31,7 @@ class InboxService(
data class Receipt(val msgId: Long, val receivedAt: Instant)
fun accept(rawXml: String): Receipt {
// 接收结果边界 = insertRaw 是否成功返回 IDC-28 只承诺到落信)。只有这一步失败才返回失败;
// 接收结果边界 = insertRaw 是否成功返回 ID(C-8 只承诺到落信)。只有这一步失败才返回失败;
// 之后的读取/入队失败若冒泡成 HTTP 失败,客户端重试会在信箱里多写一行。
val id = inbox.insertRaw(rawXml)
val now = clock.instant()
@@ -49,7 +49,7 @@ class InboxService(
// 入队时间单独传本地时钟:它是超期判据 R 的比较对象,不能借用库方时间(PRE-4)。
procState.insertIfAbsent(id, receivedAt, enqueuedAt = now)
} catch (e: Exception) {
// PG 入队失败不回退接收结果:原文已在信箱,轮询会按 ID 补建,且只建一条(INV-1、US-01)。
// PG 入队失败不回退接收结果:原文已在信箱,轮询会按 ID 补建,且只建一条(INV-2b、US-01)。
pgEnqueueFailures.incrementAndGet()
log.error("compat accepted but PG enqueue failed msgId={}; poller will re-create", id, e)
}