feat(bell): add alert acknowledgement vertical slice
Harness governance / validate (pull_request) Has been cancelled
Harness governance / validate (pull_request) Has been cancelled
This commit is contained in:
+21
-4
@@ -3,12 +3,12 @@ id: T-020
|
||||
title: 建立 Bell 规则到 Alert 与 ack 的最小可见纵切
|
||||
phase: 3
|
||||
deps: [T-015, T-019]
|
||||
status: TODO
|
||||
status: DOING
|
||||
created: 2026-08-11
|
||||
issue: 71
|
||||
context_ref: null
|
||||
claim_branch: null
|
||||
work_branch: null
|
||||
context_ref: 477afa6ba2def34224f2dfeedc5b14421ec27650
|
||||
claim_branch: claims/T-020
|
||||
work_branch: agent/codex/T-020
|
||||
write_paths:
|
||||
- docs/tasks/T-020.md
|
||||
- Bell/
|
||||
@@ -86,3 +86,20 @@ T-019 已把 Brain 候选可靠地写成 Bell 不可变 Event,但 Bell 尚未
|
||||
- 复用已确认 Bell 原型及 US-003/US-005、IX-005~IX-008/IX-013;工程值班台不冻结最终前端框架。
|
||||
- 当前会话未提供 codebase-memory MCP 图工具,按仓库规则降级为定向读取与 `rg`。任务定义前 `./init.ps1` 基线通过:77 项根测试、30 项 Brain 测试,以及 Sense/Bell generate/test/vet/build 全绿。
|
||||
- 任务定义已合入默认分支并创建唯一 Gitea Issue #71;本映射合入默认分支后才允许添加 `status/todo` 并由 dispatcher 分配。
|
||||
|
||||
### 2026-08-11 领取
|
||||
|
||||
- dispatcher `ila` 已在 Issue #71 核对依赖、写路径与活跃任务,并分配给 `codex`。
|
||||
- 基线提交:`477afa6ba2def34224f2dfeedc5b14421ec27650`;claim 分支:`claims/T-020`;工作分支:`agent/codex/T-020`。
|
||||
|
||||
### 2026-08-11 实现与自动化验收
|
||||
|
||||
- PostgreSQL 新增可重放 `018`~`019`,Bell schema 提升到 v6:规则版本、Event sweep、rule evaluation、Alert 身份、Alert/Event 多对多关系、transition 和命令收据全部只追加;`bell_runtime` 仅有 `SELECT/INSERT`,数据库 trigger 同时拒绝 owner 路径的意外 UPDATE/DELETE。Alert 对 `rule_evaluation_id` 唯一,数据库层保证一个 Event/Rule evaluation 最多一个 Alert。
|
||||
- 规则配置从仓库外绝对 JSON 加载,限制 256 KiB/256 条、拒绝未知字段和重复 key;相同 canonical SHA-256 幂等复用版本。单一可取消 worker 使用 durable sweep 与事务级 advisory lock,多实例对同 Event 收敛;无规则和 no-match 同样落 sweep,规则发布不追溯重算已经 sweep 的历史 Event。
|
||||
- Bell 生成 `alt_` ULID,命中 evaluation、Alert、Event 关联和初始 `open` transition 同事务提交。状态只允许 `open → acknowledged → closed`;永久命令收据按 tenant/idempotency key 重放原 status/body,同 key 改命令/actor/note 稳定冲突。并发后到的 ack 返回 `409 already_acknowledged` 和真实首位 actor/time,不覆盖历史。
|
||||
- 冻结并实现 `bell-alert-console-v1` 回环工程 API:列表默认 16/最大 100,tenant/Site/actor 只取启动上下文;Bearer token 来自仓库外文件并用 constant-time 比较。规则 worker 与控制台分别默认关闭;控制台要求整个 Bell 监听地址显式回环,不返回 Event payload、流 URI、凭据、DSN 或 token。
|
||||
- `Bell/web/` 使用 Go embed、自包含 HTML/CSS/原生 JavaScript,无 npm/CDN/浏览器持久存储。页面显示真实规则版本、关联 Event 和 append-only 时间线;证据、升级/投递明确为未启用。按 `ui-ux-pro-max` 检查落实骨架加载、空态/重试、冲突/无权限反馈、颜色+文字、44px target、键盘入口、`aria-live` 和 reduced-motion。
|
||||
- Edge headless + 脱敏回环 fixture 完成 1440×900 与 CDP 375×812 渲染检查:桌面双栏、移动单栏均可操作,375 viewport 的 `innerWidth/scrollWidth/bodyWidth` 均为 `375`。首轮浏览器 QA 发现 `.workspace{display:grid}` 覆盖 `hidden` 导致授权前泄露空壳布局,已增加全局 `[hidden]{display:none!important}` 并复验;临时 fixture、token 和截图均未进入仓库。
|
||||
- `./init.ps1` 最终通过:83 项根测试、30 项 Brain 测试,以及 Sense/Bell generate/test/vet/build 全绿。独立 Bell test/vet/build、OpenAPI JSON、5 项 Alert 静态契约、11 项 PostgreSQL 静态契约和 `node --check Bell/web/assets/app.js` 通过。
|
||||
- `./scripts/test_postgres.ps1 -PgRoot D:\pgsql17` 最终通过:PostgreSQL 17.10 随机回环临时集群将 `001`~`019` 连续重放两遍;真实 repository 验证 rule publish/no-match、8 个 evaluator 只生成 1 个目标 Alert、8 个并发 ack 只有 1 个成功、late ack 观察同一 actor/time、ack 前 close 拒绝、ack 后 close、幂等冲突、重启恢复和不可变权限。临时集群已停止清理,现有 5432 listener 未改变。
|
||||
- 本任务不需要摄像头、GPU、客户网络或通知供应商;结果不等于正式 Bell Web/H5、公共 JWT/RBAC、证据/通知、算法效果、真实多路或生产 SLA 验收。
|
||||
|
||||
Reference in New Issue
Block a user