[BEL] 自动升级、交接与限时静默恢复 #184

Open
opened 2026-09-01 10:04:32 +08:00 by ila · 3 comments
Owner

状态

待确认(2026-09-01;需新增全局请求体脱敏写路径后继续安全闭环)

基本信息

  • 所属 Epic:#7
  • 所属 MVP:#174
  • 规划来源:#173
  • 主项目:Bell
  • 主 agent:Bell agent
  • 前置:#183 联系人/排班完成并验收

目标

实现版本化升级链、未 ack 自动升级、重启恢复、交接覆盖和最长 4 小时静默自动恢复;所有调度、跳过、恢复和失败只追加事实并可审计。

非目标

  • 不发送供应商通知,投递由 #185 负责
  • 不修改原始 Event
  • 不把运维告警纳入业务升级
  • 不允许无限静默或修改历史快照

精确 write_paths

  • Bell/server/app/bell/escalation/
  • Bell/server/cmd/api/server.go(拟新增:仅在 GoAdmin LoggerToFile 之前注册 #184 请求体脱敏中间件;等待用户确认后写入)
  • Bell/server/app/bell/handoff/
  • Bell/server/app/bell/silence/
  • Bell/server/app/bell/router/escalation.go
  • Bell/server/app/bell/router/handoff.go
  • Bell/server/app/bell/router/silence.go
  • Bell/server/cmd/migrate/migration/version/2026090111000_escalation_handoff.go
  • Bell/server/cmd/migrate/migration/version/2026090111000_escalation_handoff_test.go
  • Bell/ui/src/api/bell/escalation.js
  • Bell/ui/src/api/bell/handoff.js
  • Bell/ui/src/api/bell/silence.js
  • Bell/ui/src/views/bell/escalations/
  • Bell/ui/src/views/bell/handoffs/
  • Bell/ui/src/views/bell/silences/
  • Bell/server/tests/bell_escalation/

除上述路径外禁止写入;新增路径必须先更新工单并取得确认。

验收标准

  • 升级链版本冻结且后续修改不改写进行中/历史快照
  • 未 ack 按计划升级,ack/close 后不继续错误升级
  • 重启恢复不丢失、不重复跨级且错误可观察
  • 交接覆盖未 ack、处置中和升级中 Alert
  • 静默最长 4 小时,到期自动恢复并保留审计
  • 并发 ack/close/升级保持现有生命周期真相

风险与回退

从当前 dev 建立独立任务分支;实施前复核前置和线上原型版本。状态迁移、通知和排班属于高风险业务事实,发现语义变化或客户参数缺失时停止。回退停用新增策略/Worker/通道,不删除联系人、排班版本、投递、Alert 或审计历史。

文档影响

更新 Bell Product-Requirements、Architecture-and-Code-Map、Business-Rules-and-Glossary、Local-Development-and-Verification、Troubleshooting。

## 状态 待确认(2026-09-01;需新增全局请求体脱敏写路径后继续安全闭环) ## 基本信息 - 所属 Epic:#7 - 所属 MVP:#174 - 规划来源:#173 - 主项目:Bell - 主 agent:Bell agent - 前置:#183 联系人/排班完成并验收 ## 目标 实现版本化升级链、未 ack 自动升级、重启恢复、交接覆盖和最长 4 小时静默自动恢复;所有调度、跳过、恢复和失败只追加事实并可审计。 ## 非目标 - 不发送供应商通知,投递由 #185 负责 - 不修改原始 Event - 不把运维告警纳入业务升级 - 不允许无限静默或修改历史快照 ## 精确 write_paths - `Bell/server/app/bell/escalation/` - `Bell/server/cmd/api/server.go`(拟新增:仅在 GoAdmin `LoggerToFile` 之前注册 #184 请求体脱敏中间件;等待用户确认后写入) - `Bell/server/app/bell/handoff/` - `Bell/server/app/bell/silence/` - `Bell/server/app/bell/router/escalation.go` - `Bell/server/app/bell/router/handoff.go` - `Bell/server/app/bell/router/silence.go` - `Bell/server/cmd/migrate/migration/version/2026090111000_escalation_handoff.go` - `Bell/server/cmd/migrate/migration/version/2026090111000_escalation_handoff_test.go` - `Bell/ui/src/api/bell/escalation.js` - `Bell/ui/src/api/bell/handoff.js` - `Bell/ui/src/api/bell/silence.js` - `Bell/ui/src/views/bell/escalations/` - `Bell/ui/src/views/bell/handoffs/` - `Bell/ui/src/views/bell/silences/` - `Bell/server/tests/bell_escalation/` 除上述路径外禁止写入;新增路径必须先更新工单并取得确认。 ## 验收标准 - [ ] 升级链版本冻结且后续修改不改写进行中/历史快照 - [ ] 未 ack 按计划升级,ack/close 后不继续错误升级 - [ ] 重启恢复不丢失、不重复跨级且错误可观察 - [ ] 交接覆盖未 ack、处置中和升级中 Alert - [ ] 静默最长 4 小时,到期自动恢复并保留审计 - [ ] 并发 ack/close/升级保持现有生命周期真相 ## 风险与回退 从当前 `dev` 建立独立任务分支;实施前复核前置和线上原型版本。状态迁移、通知和排班属于高风险业务事实,发现语义变化或客户参数缺失时停止。回退停用新增策略/Worker/通道,不删除联系人、排班版本、投递、Alert 或审计历史。 ## 文档影响 更新 Bell Product-Requirements、Architecture-and-Code-Map、Business-Rules-and-Glossary、Local-Development-and-Verification、Troubleshooting。
ila added the kind/taskproject/bellpriority/p0 labels 2026-09-01 10:04:32 +08:00
Author
Owner

2026-09-01:前置工单 #183 已由用户验收通过,并通过 PR #189 合并到 dev(merge commit 5128f080)。#184 的实施前置门禁已解除,仍保持“待实施”,等待明确执行指令。

2026-09-01:前置工单 #183 已由用户验收通过,并通过 PR #189 合并到 `dev`(merge commit `5128f080`)。#184 的实施前置门禁已解除,仍保持“待实施”,等待明确执行指令。
Author
Owner

开始实施(2026-09-01)

  • 分支:feat/184-bell-escalation-handoff,从 dev 合并提交 5128f080 创建
  • 工作区:开始前干净,无用户未提交改动
  • 前置:#183 已验收并合入 dev
  • 原型:#182 Quant-UX v0.1,App ID 6a964071191a826306a7f4af;覆盖升级策略、交接、最长 4 小时静默及状态边界
  • GoAdmin 冻结参考:
    • go-admin-doc/docs/intro/advanced/api.md:分页与写接口 Handler/Service 分层
    • go-admin-doc/docs/intro/advanced/router.md:init registrar、JWT 与 Casbin 路由
    • go-admin-doc/docs/intro/advanced/jobs.md:函数型定时任务与可重入执行边界
    • go-admin-doc/docs/intro/cmd/migrate.md:版本迁移、事务和种子数据
    • go-admin-doc/docs/guide/norm.md:业务模块目录边界
  • 继承路径:Bell 现有 alert_lifecycle 状态真相、#183 联系人与值班排班、router registrar、GoAdmin 菜单/API/Casbin 迁移和 Element Plus 页面模式
  • 默认模块:不启用系统管理、开发工具或框架演示入口
  • #176 未冻结“更高风险突破静默”语义;本工单采用保守边界:任何风险等级都不绕过有效静默,静默最多 4 小时且可立即恢复,避免臆造现场策略
  • #185 负责真实供应商投递;本工单只形成可消费、只追加的升级到期事实,不发送外部消息

实现严格限制在 #184 已声明的 write_paths。

## 开始实施(2026-09-01) - 分支:`feat/184-bell-escalation-handoff`,从 `dev` 合并提交 `5128f080` 创建 - 工作区:开始前干净,无用户未提交改动 - 前置:#183 已验收并合入 `dev` - 原型:#182 Quant-UX v0.1,App ID `6a964071191a826306a7f4af`;覆盖升级策略、交接、最长 4 小时静默及状态边界 - GoAdmin 冻结参考: - `go-admin-doc/docs/intro/advanced/api.md`:分页与写接口 Handler/Service 分层 - `go-admin-doc/docs/intro/advanced/router.md`:`init` registrar、JWT 与 Casbin 路由 - `go-admin-doc/docs/intro/advanced/jobs.md`:函数型定时任务与可重入执行边界 - `go-admin-doc/docs/intro/cmd/migrate.md`:版本迁移、事务和种子数据 - `go-admin-doc/docs/guide/norm.md`:业务模块目录边界 - 继承路径:Bell 现有 `alert_lifecycle` 状态真相、#183 联系人与值班排班、router registrar、GoAdmin 菜单/API/Casbin 迁移和 Element Plus 页面模式 - 默认模块:不启用系统管理、开发工具或框架演示入口 - #176 未冻结“更高风险突破静默”语义;本工单采用保守边界:任何风险等级都不绕过有效静默,静默最多 4 小时且可立即恢复,避免臆造现场策略 - #185 负责真实供应商投递;本工单只形成可消费、只追加的升级到期事实,不发送外部消息 实现严格限制在 #184 已声明的 `write_paths`。
Author
Owner

安全范围变化:等待确认(2026-09-01)

实施与实际 HTTP 回归后确认 GoAdmin 操作日志存在与 #183 相同的安全边界:

  • common/middleware.LoggerToFile 在路由处理前读取 POST/PUT 请求体,并原样写入 sys_opera_log.oper_param。
  • #184 的交接说明、静默原因和升级策略名称均是用户输入,可能包含现场描述或个人信息;按仓库永久规则不能原样进入日志。
  • 路由级中间件注册晚于 LoggerToFile,无法可靠脱敏。需要在 Bell/server/cmd/api/server.go 的 common.InitMiddleware 之前注册 escalation.RedactRequestBody()。
  • 脱敏与恢复实现仍位于已授权的 Bell/server/app/bell/escalation/、handoff/、silence/;唯一新增精确写路径为 Bell/server/cmd/api/server.go。
  • HTTP 回归将增加查询 sys_opera_log,确认策略名称、交接说明、静默/恢复原因均不存在,只保留固定脱敏标记。

当前已完成但尚未提交:

  • 升级策略版本、计划、到期/停止/恢复/失败事实与 5 秒可重入 Worker。
  • 交接事实覆盖 open/acknowledged/active escalation;最长 4 小时静默、立即恢复与重启到期恢复。
  • PostgreSQL 17 真集成通过:版本冻结、重启不重复、ack/升级并发、交接、静默、不可变触发器和 RBAC。
  • 实际 HTTP 通过:操作员读取、交接、静默/恢复成功;策略写入 403;管理员手动检查成功;菜单可见。
  • Go 1.26.5 全量测试通过。
  • 前端 lint 0 error(30 个既有上游 warning),生产构建成功(4 个既有上游 warning)。
  • 未发送任何外部消息,未修改 Event 或既有 Alert 生命周期真相。

等待用户明确确认新增 Bell/server/cmd/api/server.go 写路径后继续。未修改该文件,未提交、未推送,也未开始 #185。

## 安全范围变化:等待确认(2026-09-01) 实施与实际 HTTP 回归后确认 GoAdmin 操作日志存在与 #183 相同的安全边界: - `common/middleware.LoggerToFile` 在路由处理前读取 POST/PUT 请求体,并原样写入 `sys_opera_log.oper_param`。 - #184 的交接说明、静默原因和升级策略名称均是用户输入,可能包含现场描述或个人信息;按仓库永久规则不能原样进入日志。 - 路由级中间件注册晚于 `LoggerToFile`,无法可靠脱敏。需要在 `Bell/server/cmd/api/server.go` 的 `common.InitMiddleware` 之前注册 `escalation.RedactRequestBody()`。 - 脱敏与恢复实现仍位于已授权的 `Bell/server/app/bell/escalation/`、`handoff/`、`silence/`;唯一新增精确写路径为 `Bell/server/cmd/api/server.go`。 - HTTP 回归将增加查询 `sys_opera_log`,确认策略名称、交接说明、静默/恢复原因均不存在,只保留固定脱敏标记。 当前已完成但尚未提交: - 升级策略版本、计划、到期/停止/恢复/失败事实与 5 秒可重入 Worker。 - 交接事实覆盖 open/acknowledged/active escalation;最长 4 小时静默、立即恢复与重启到期恢复。 - PostgreSQL 17 真集成通过:版本冻结、重启不重复、ack/升级并发、交接、静默、不可变触发器和 RBAC。 - 实际 HTTP 通过:操作员读取、交接、静默/恢复成功;策略写入 403;管理员手动检查成功;菜单可见。 - Go 1.26.5 全量测试通过。 - 前端 lint 0 error(30 个既有上游 warning),生产构建成功(4 个既有上游 warning)。 - 未发送任何外部消息,未修改 Event 或既有 Alert 生命周期真相。 等待用户明确确认新增 `Bell/server/cmd/api/server.go` 写路径后继续。未修改该文件,未提交、未推送,也未开始 #185。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#184