适用范围
约束所有功能必须对外暴露的可观测信号,以及"什么算证据"。
不约束:监控系统选型、告警通道、仪表盘实现。
规范条款
观测义务
- 每个功能必须声明:哪些状态必须能从外部观测到,以及由谁消费。
- 每个功能必须声明:哪些情形必须产生告警,以及告警给谁。
- 需要外部监督的长时过程必须提供服务端可观测的进展信号;必须不只提供"已接受"这类过程信号。
- 成功判定必须基于结果信号(必须遵循状态与审计投影);必须不基于进程存在、本地健康检查或服务管理器返回值。
观测什么
- 每个功能必须至少能观测到下列状态:
| 必须可观测 | 说明 |
|---|
| 当前是否在线 / 可用 | 以服务端观察到的事实为准 |
| 是否有进行中的工作 | 以及在什么阶段 |
| 最近一次成功与失败 | 含时间与稳定失败标识 |
| 阻塞与降级 | 处于阻塞时,阻塞原因类别 |
| 异常收敛结果 | 失联、超时、崩溃是否已收敛为终态 |
- 观测信号必须来自服务端持久化事实;必须不来自客户端自述、本地探针或缓存。
- 观测信号必须遵守安全与数据处置的禁入清单。
告警义务
- 下列情形必须产生告警:
| 必须告警 | 理由 |
|---|
| 异常未在预期时限内收敛 | 否则会留下"看起来还在跑"的对象 |
| 心跳 / 续约冲突 | 可能存在双执行者 |
| 长期无在线执行者 | 工作会静默积压 |
| 自动重试触达上界 | 需要人工介入 |
| 不可逆操作等待批准超期 | 阻塞在批准门 |
- 告警阈值必须显式声明;必须不使用未声明的隐含阈值。
- 告警必须可去重、可抑制;必须不因重复告警掩盖真实故障。
什么算证据
- 证据必须是可独立核对的事实,且必须能定位到产生它的精确修订。
- 下列必须不算证据:
| 不算证据 | 理由 |
|---|
| 分支或提交存在 | 只证明写了代码 |
| 评审通过 | 只证明有人看过 |
| 文档已合并 | 只证明文档存在 |
| 测试文件存在 | 只证明写了测试 |
| 本地探测通过 | 不反映线上事实 |
| 单次运行成功 | 不能证明可重复 |
| 声明"已实现" | 自述不是证据 |
- 每个结论必须绑定下列证据之一,且必须指明证据归属:
| 证据类别 | 归属 |
|---|
| 契约测试 | owning 实现仓的测试,覆盖故障向场景 |
| 现场读取 | 目标环境上服务端可观测的事实 |
| 清理扫描 | 旧入口退役后的无残留扫描 |
| 批准记录 | 明确批准人、时间与范围 |
- 任一必需证据缺失时,结论必须标记为未验证,并必须视为阻塞项。
- 文档必须只声明"应读取哪个证据面";必须不把某次结果写成当前状态。
故障向覆盖
- 证明义务必须覆盖故障向场景,必须不只覆盖正常路径。
- 每条不变量必须有对应的证明义务与场景清单;缺清单即视为未完成。
违反时的失败语义
| 违反情形 | 必须的行为 |
|---|
| 未声明观测义务 | 视为规格违反;评审阶段必须拦截 |
| 未声明告警义务 | 同上 |
| 观测来自客户端自述 | 必须改为服务端事实 |
| 以过程信号判定成功 | 必须改为结果信号 |
| 以"不算证据"清单中的项充当证据 | 必须视为未验证 |
| 必需证据缺失仍宣称完成 | 必须撤回结论并标记未验证 |
| 故障向场景缺失 | 必须补齐证明义务 |
校验方式
| 校验对象 | 判据 | 失败表现 |
|---|
| 观测声明 | 每个功能必须能定位到观测义务与消费者 | 缺失即失败 |
| 告警声明 | 必须能定位到必告警情形与接收方 | 缺失即失败 |
| 信号来源 | 观测信号必须来自服务端持久化事实 | 来自客户端自述即失败 |
| 成功判据 | 过程信号不得单独构成成功 | 构成成功即失败 |
| 证据充分 | 每个结论必须绑定至少一类合格证据并指明归属 | 未绑定即失败 |
| 未验证标记 | 证据缺失时必须标记未验证 | 未标记即失败 |
| 证明义务完备 | 每条不变量必须有场景清单,且覆盖故障向 | 缺失或只覆盖正常路径即失败 |
相关规格