feat(gateway)!: 后台思考档位精确化(+ 面板三态 + 契约 v0.69/v0.70)
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled

- gateway:优先读落库的 rec.Urgency(精确档位,与安静时段窗口无关);仅空串才回落到既有下限推导,并打 urgencyLowerBound 标记(**只在推导值上为 true**)
- 面板三态:精确(例常/紧急(高)/紧急·安全域)|下限(一律加 ≥ 前缀)|未知;下限悬停说明写清「为什么旧行只能是下限」
- 实时帧零协议改动:Record 的 JSON 键就是 urgency ⇒ 帧自然带上;wsParse 早已防御性读取(只加一处 urgencyLowerBound 防御读)
- 契约:v0.69(directMsgPerMin 透传修复,逐字照抄附录 A)与 v0.70(精确化 + 更正 §4.10(b)「实时帧不带这两键」)一起登记
- 变异实测:旧行不标下限 ⇒ 3 条测试红(结构体对比);前端去掉 ≥ ⇒ 渲染测试红
- ⚠️ 诚实边界(§7.3 已登记):实时旧记录刷新前显示「档位未知」、刷新后显示「≥ 例常」——同一条记录两路下的已知差异
This commit is contained in:
AskaEth committed 2026-10-05 14:15:55 +08:00
1 parent f9c5b56a2f
commit a0abf0199a
11 files changed
+390 -131

No files matched your search

+15 -8
View File
@@ -125,11 +125,11 @@ type AdminUserRecord struct {
// 它们直接来自后端已存的 PushResult,因此面板不必靠猜来解释
// 一次静默。
//
// Urgency / QuietHoursBypassed(v0.68)回答「这一轮有多紧急、是不是
// 穿透了安静时段」。二者都**只在存档可证时**出现,缺席 ≠ 常规档位:
// 推导依据见 admin_backthink_urgency.go(那一轮的 `At` 落在安静时段窗口内
// 时,判定级联已把档位锁死到可证的范围;窗口之外的轮次存档里没有档位,
// 因此不下发,而不是编一个 routine)。
// Urgency / UrgencyLowerBound / QuietHoursBypassed 回答「这一轮有多紧急、
// 是不是穿透了安静时段」。三者都**只在存档可证时**出现,缺席 ≠ 常规档位:
// 取值来源与优先级见 admin_backthink_urgency.go —— 优先读每轮落库的**精确**
// 档位;只有 `urgencyLowerBound:true` 的行才是**推导出的下限**(旧行按安静时段
// 窗口规则反推),窗口之外且无落库档位的旧行干脆不下发,而不是编一个 routine。
type AdminBackthinkItem struct {
ID string `json:"id"`
Trigger string `json:"trigger"`
@@ -143,10 +143,17 @@ type AdminBackthinkItem struct {
// Bypassed 表示这是事件驱动的推送、绕过了限频闸("该发就发")。
Bypassed bool `json:"bypassed"`
At int64 `json:"at"`
// Urgency 是这一轮紧急度的**存档可证下限**(urgency 档位词汇:
// routine | warning | critical)。`warning` 读作「≥ high 档(可能更高)」;
// 无法证明时省略该键(面板显示「未知」)。
// Urgency 是这一轮的紧急度档位(urgency 档位词汇:routine | warning |
// critical)。**默认读到的是该轮实际生效的精确档位**(每一轮随记录落库);
// 只有与 `urgencyLowerBound:true` 同时出现时才读作「≥ 该档(可能更高)」;
// 无法证明时省略该键(面板显示「未知」,**不是**「例常」)。
Urgency string `json:"urgency,omitempty"`
// UrgencyLowerBound 为 true 时表示 Urgency 是**推导出的下限**而不是精确档位:
// 该行没有落库档位(`backthink_records.urgency` 列出现之前的旧行,或从未走到
// 档位判定点的行),值由安静时段窗口规则反推(见 admin_backthink_urgency.go)。
// 只在为 true 时出现:精确档位与「无档位」都不必在线上区分。客户端**不得**把
// 它显示成精确档位。
UrgencyLowerBound bool `json:"urgencyLowerBound,omitempty"`
// QuietHoursBypassed 为 true 时表示这一轮**穿透了安静时段**(轮次时间落在
// 安静时段窗口内且该轮判定要推送)。只在为 true 时出现:安静时段之外的轮次
// 与「没穿透」不必在线上区分,缺席即「没有这件事」。