From b7ed3e488bf2484b4b4690902f8e446e0e6a1b54 Mon Sep 17 00:00:00 2001 From: ila <2+ila@noreply.git.ilapage.cn> Date: Wed, 12 Aug 2026 18:17:12 +0800 Subject: [PATCH] docs: create Bell task #20 acceptance archive --- ...1%E8%AE%A1%E6%97%B6%E9%97%B4%E7%BA%BF.-.md | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Task-20-Bell-Alert%E5%B9%B6%E5%8F%91%E5%A4%84%E7%BD%AE%E4%B8%8E%E5%AE%A1%E8%AE%A1%E6%97%B6%E9%97%B4%E7%BA%BF.-.md diff --git a/Task-20-Bell-Alert%E5%B9%B6%E5%8F%91%E5%A4%84%E7%BD%AE%E4%B8%8E%E5%AE%A1%E8%AE%A1%E6%97%B6%E9%97%B4%E7%BA%BF.-.md b/Task-20-Bell-Alert%E5%B9%B6%E5%8F%91%E5%A4%84%E7%BD%AE%E4%B8%8E%E5%AE%A1%E8%AE%A1%E6%97%B6%E9%97%B4%E7%BA%BF.-.md new file mode 100644 index 0000000..97f4122 --- /dev/null +++ b/Task-20-Bell-Alert%E5%B9%B6%E5%8F%91%E5%A4%84%E7%BD%AE%E4%B8%8E%E5%AE%A1%E8%AE%A1%E6%97%B6%E9%97%B4%E7%BA%BF.-.md @@ -0,0 +1,46 @@ +# 20 Bell-Alert并发处置与审计时间线 + +- 类型:需求 +- 所属 Epic:#7 +- 所属 MVP / 版本:#8 +- 状态:待验收 +- 日期:2026-08-12 +- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/20 +- Wiki 页面:Task-20-Bell-Alert并发处置与审计时间线 +- Wiki revision:见本地镜像头 + +## 背景与目标 + +实现并发安全、责任清晰、可审计的 Alert ack/close 处置状态机。 + +## 最终方案 + +PostgreSQL 条件更新选择唯一 ack 获胜者,后来者看到真实处置人。只有处置人或管理员可 close,且必须记录四种现场结果之一;同一重复 close 幂等。成功事实进入不可变生命周期时间线,失败/重复/拒绝尝试进入安全审计。 + +## 修改文件 + +- `Bell/server/app/alert/lifecycle/`:ack/close 服务、HTTP 与并发测试。 +- `Bell/server/migrations/2026081205_alert_lifecycle.sql`:生命周期事实、审计和不可变约束。 +- `Bell/web/src/views/alert/list/Alerts.vue`:两步处置、结果表单与时间线。 +- `Bell/web/src/layout/AppLayout.vue`:对齐已确认的导航顺序。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 并发 ack 仅一个处置人 | 通过 | +| 后来者得到真实处置人且不能覆盖 | 通过 | +| close 要求结果且受所有者/管理员约束 | 通过 | +| 相同重复 close 幂等 | 通过 | +| 重启后状态与只追加时间线保留 | 通过 | + +## 测试 + +- 执行:20 并发 ack PostgreSQL 集成测试;API ack/冲突/结果必填/close/重复 close;重启持久性;Vue lint/build。 +- 结果:全部通过,时间线含 ack 与 close 两条成功事实。 +- **未验证部分**:多人真实浏览器并发、生产规模压测和通知/升级流程。 + +## 相关提交 + +- `10225f4` 并发安全的 Alert 生命周期(PR #35)。 +- `9ee06e3` 对齐正式页面导航顺序(PR #35)。