[BEL] 实现规则匹配与 Event-Alert 可导航链路 #19

Closed
opened 2026-08-12 09:53:49 +08:00 by ila · 4 comments
Owner

当前状态:已完成

用户于 2026-08-14 明确验收通过。

基本信息

  • 类型:需求
  • 任务类型:单项目
  • 主项目:Bell
  • 主 agent:Bell agent
  • 所属 Epic:#7
  • 所属 MVP / 版本:#8
  • 阶段:三项目首个独立纵切

依赖与并行

  • 前置工单:#12、#17、#18
  • 是否允许与前置工单并行:否
  • 原因:规则匹配与 Alert 创建依赖稳定的 Event 模型,并以合成事件作为独立验收输入。

子项目影响

  • 仅影响的子项目 / 交付单元:Bell
  • 是否跨子项目:否
  • 是否修改共享接口或契约:否;唯一事实来源:不适用,本工单只维护 Bell 内部实现
  • write_paths:Bell/server/app/rule/**、Bell/server/app/alert/model/**、Bell/server/app/alert/matching/**、Bell/server/app/alert/query/**、Bell/server/migrations/*rule*、Bell/server/migrations/*alert_base*、Bell/web/src/views/rule/**、Bell/web/src/views/alert/list/**、Bell/web/src/views/alert/detail/**
  • 各子项目需要执行的验证:仅执行 Bell 后端、前端及 PostgreSQL 测试;Sense/Brain 无需启动或验证

协同接口

  • 生产者:不适用
  • 消费者:不适用
  • 契约/共享事实源:不适用
  • 兼容策略:不适用
  • 被阻塞或需要适配的工单:不适用
  • 集成顺序:不适用

原始需求

  • 来源:用户对话、Epic #7、MVP #8、Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix
  • 提出时间:2026-08-12
  • 关键原话或脱敏摘要:先创建三个项目各自独立任务的全部工单,标题包含项目英文简称;Bell 首个纵切须在 Sense/Brain 不在线时以合成事件完成 Event → Alert → ack → close。

要解决什么

Bell 需要对已接收 Event 执行本地规则匹配并创建独立 Alert,使 Event 与 Alert 保持可审计的多对多关系;用户应能看到规则命中原因、Alert 详情和关联 Event,而不改写原始事实。

做什么 / 不做什么

  • 做:建立最小规则模型/启停/匹配,至少支持合成事件类型、站点/设备逻辑引用等 Bell 已有字段;事务化创建 Alert 及 Event-Alert 关系;提供规则列表/表单、Alert 列表/详情、规则命中解释和双向导航。
  • 不做:不实现规则版本 dry-run/回滚、去重聚合、静默、自动升级、通知、联系人/排班;不定义跨项目规则契约;不把 Event 状态改为 Alert 状态。

已确认方案

规则和 Alert 是 Bell 自有事实。匹配结果保存实际规则标识/快照及解释;一个 Event 可关联多个 Alert,一个 Alert 可关联多个 Event。未命中或抑制不能伪装为通知成功;本 MVP 只实现直接命中创建。UI 优先复用表格、表单、弹窗和状态组件。

预计修改文件:

  • Bell/server/app/rule/**
  • Bell/server/app/alert/**
  • Bell/server/migrations/*rule*
  • Bell/server/migrations/*alert*
  • Bell/web/src/views/rule/**
  • Bell/web/src/views/alert/**

需求变化记录

日期 变化内容 原因 用户确认
2026-08-12 无 初始建单 是

文档影响

  • 不影响长期文档,原因:不适用
  • 更新项目档案或本地开发与验证
  • 更新架构与代码地图
  • 更新业务规则与术语
  • 更新常见修改或故障排查
  • 更新其他 Wiki 页面:Bell 规则匹配、Event/Alert 关系和状态展示

交付文档影响

  • 无交付文档影响,原因:不适用
  • 更新已有交付文档,受众与页面:Bell 管理员/处置员,规则配置与 Alert 查看说明
  • 新增交付文档,受众与页面:
  • 需要目标岗位或客户代表验证:是;验证方式:用预置合成事件核对命中、不命中、列表、详情和双向导航

验收标准

  • 可配置并启停最小规则,权限和输入校验有效
  • 合成 Event 命中规则后原子创建 Alert 和关联记录,重复处理不会无故重复创建
  • Event 与 Alert 多对多且可双向导航,原 Event 未被修改
  • Alert 详情显示命中规则、关联 Event、时间和当前 open 状态
  • 未命中 Event 不创建 Alert,结果可定位且不伪装为已通知/已处置
  • 列表分页,页面复用现有组件并通过管理员/处置员/只读权限矩阵

验证方式

Set-Location Bell/server
go test ./...
Set-Location ../web
pnpm lint
pnpm build:prod

在独立 PostgreSQL 测试库以合成事件覆盖命中、不命中、多规则、多 Event 关联、重复处理、事务失败回滚、权限和 UI 双向导航。

未验证边界:Sense/Brain 的正式事件生产、跨项目机器身份、共享事件/证据契约、根级部署与端到端链路不在本工单验证;这些内容留待独立协同工单。

风险和回退

风险:规则重复执行可能制造重复 Alert,Event/Alert 混模会破坏不可变事实。回退:禁用/回退规则与 Alert 模块和对应测试数据;不修改或删除 Event/Receipt 历史。已有真实 Alert 的迁移回退需另建高风险工单。

后续协同需求摘要

不适用。

## 当前状态:已完成 用户于 2026-08-14 明确验收通过。 ## 基本信息 - 类型:需求 - 任务类型:单项目 - 主项目:Bell - 主 agent:Bell agent - 所属 Epic:#7 - 所属 MVP / 版本:#8 - 阶段:三项目首个独立纵切 ## 依赖与并行 - 前置工单:#12、#17、#18 - 是否允许与前置工单并行:否 - 原因:规则匹配与 Alert 创建依赖稳定的 Event 模型,并以合成事件作为独立验收输入。 ## 子项目影响 - 仅影响的子项目 / 交付单元:Bell - 是否跨子项目:否 - 是否修改共享接口或契约:否;唯一事实来源:不适用,本工单只维护 Bell 内部实现 - write_paths:`Bell/server/app/rule/**`、`Bell/server/app/alert/model/**`、`Bell/server/app/alert/matching/**`、`Bell/server/app/alert/query/**`、`Bell/server/migrations/*rule*`、`Bell/server/migrations/*alert_base*`、`Bell/web/src/views/rule/**`、`Bell/web/src/views/alert/list/**`、`Bell/web/src/views/alert/detail/**` - 各子项目需要执行的验证:仅执行 Bell 后端、前端及 PostgreSQL 测试;Sense/Brain 无需启动或验证 ## 协同接口 - 生产者:不适用 - 消费者:不适用 - 契约/共享事实源:不适用 - 兼容策略:不适用 - 被阻塞或需要适配的工单:不适用 - 集成顺序:不适用 ## 原始需求 - 来源:用户对话、Epic #7、MVP #8、Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix - 提出时间:2026-08-12 - 关键原话或脱敏摘要:先创建三个项目各自独立任务的全部工单,标题包含项目英文简称;Bell 首个纵切须在 Sense/Brain 不在线时以合成事件完成 Event → Alert → ack → close。 ## 要解决什么 Bell 需要对已接收 Event 执行本地规则匹配并创建独立 Alert,使 Event 与 Alert 保持可审计的多对多关系;用户应能看到规则命中原因、Alert 详情和关联 Event,而不改写原始事实。 ## 做什么 / 不做什么 - 做:建立最小规则模型/启停/匹配,至少支持合成事件类型、站点/设备逻辑引用等 Bell 已有字段;事务化创建 Alert 及 Event-Alert 关系;提供规则列表/表单、Alert 列表/详情、规则命中解释和双向导航。 - 不做:不实现规则版本 dry-run/回滚、去重聚合、静默、自动升级、通知、联系人/排班;不定义跨项目规则契约;不把 Event 状态改为 Alert 状态。 ## 已确认方案 规则和 Alert 是 Bell 自有事实。匹配结果保存实际规则标识/快照及解释;一个 Event 可关联多个 Alert,一个 Alert 可关联多个 Event。未命中或抑制不能伪装为通知成功;本 MVP 只实现直接命中创建。UI 优先复用表格、表单、弹窗和状态组件。 预计修改文件: - `Bell/server/app/rule/**` - `Bell/server/app/alert/**` - `Bell/server/migrations/*rule*` - `Bell/server/migrations/*alert*` - `Bell/web/src/views/rule/**` - `Bell/web/src/views/alert/**` ## 需求变化记录 | 日期 | 变化内容 | 原因 | 用户确认 | |---|---|---|---| | 2026-08-12 | 无 | 初始建单 | 是 | ## 文档影响 - [ ] 不影响长期文档,原因:不适用 - [ ] 更新项目档案或本地开发与验证 - [x] 更新架构与代码地图 - [x] 更新业务规则与术语 - [x] 更新常见修改或故障排查 - [x] 更新其他 Wiki 页面:Bell 规则匹配、Event/Alert 关系和状态展示 ## 交付文档影响 - [ ] 无交付文档影响,原因:不适用 - [x] 更新已有交付文档,受众与页面:Bell 管理员/处置员,规则配置与 Alert 查看说明 - [ ] 新增交付文档,受众与页面: - [x] 需要目标岗位或客户代表验证:是;验证方式:用预置合成事件核对命中、不命中、列表、详情和双向导航 ## 验收标准 - [ ] 可配置并启停最小规则,权限和输入校验有效 - [ ] 合成 Event 命中规则后原子创建 Alert 和关联记录,重复处理不会无故重复创建 - [ ] Event 与 Alert 多对多且可双向导航,原 Event 未被修改 - [ ] Alert 详情显示命中规则、关联 Event、时间和当前 open 状态 - [ ] 未命中 Event 不创建 Alert,结果可定位且不伪装为已通知/已处置 - [ ] 列表分页,页面复用现有组件并通过管理员/处置员/只读权限矩阵 ## 验证方式 ```powershell Set-Location Bell/server go test ./... Set-Location ../web pnpm lint pnpm build:prod ``` 在独立 PostgreSQL 测试库以合成事件覆盖命中、不命中、多规则、多 Event 关联、重复处理、事务失败回滚、权限和 UI 双向导航。 未验证边界:Sense/Brain 的正式事件生产、跨项目机器身份、共享事件/证据契约、根级部署与端到端链路不在本工单验证;这些内容留待独立协同工单。 ## 风险和回退 风险:规则重复执行可能制造重复 Alert,Event/Alert 混模会破坏不可变事实。回退:禁用/回退规则与 Alert 模块和对应测试数据;不修改或删除 Event/Receipt 历史。已有真实 Alert 的迁移回退需另建高风险工单。 ## 后续协同需求摘要 不适用。
ila added the kind/taskpriority/p0project/bellscope/independent labels 2026-08-12 09:58:47 +08:00
Author
Owner

状态:进行中(2026-08-12)

前置 #12、#17、#18 均已完成并推送。开始实现最小规则配置、逐 Event 评估事实、直接命中创建/关联 open Alert、按规则与地点相关性聚合、多对多双向查询及分页 UI;未命中只记录评估,不伪装为通知或处置。

## 状态:进行中(2026-08-12) 前置 #12、#17、#18 均已完成并推送。开始实现最小规则配置、逐 Event 评估事实、直接命中创建/关联 open Alert、按规则与地点相关性聚合、多对多双向查询及分页 UI;未命中只记录评估,不伪装为通知或处置。
Author
Owner

实施完成,进入连续依赖验证

  • 实现提交:d550269(已推送)
  • 规则创建、启停与版本递增:通过;处置员只读 200、写入 403
  • Event 接收与规则评估在同一事务;强制匹配失败时 Event 回滚
  • 一个 Event 命中两条规则形成两个 Alert;同规则同地点的两个 Event 聚合到同一 Alert
  • 双向查询:Alert 详情含 Event/规则快照,Event 详情含关联 Alert
  • 未命中 Event:保留评估解释,不创建 Alert
  • 迁移增加 PostgreSQL advisory lock,解决并行测试迁移竞态
  • Go/PostgreSQL 集成测试、前端 lint/build、Harness、31 项仓库测试、差异检查:通过

#20 的身份、权限与 Alert 前置事实均已满足,继续实施并发 ack、结果必填 close 与审计时间线。

## 实施完成,进入连续依赖验证 - 实现提交:`d550269`(已推送) - 规则创建、启停与版本递增:通过;处置员只读 200、写入 403 - Event 接收与规则评估在同一事务;强制匹配失败时 Event 回滚 - 一个 Event 命中两条规则形成两个 Alert;同规则同地点的两个 Event 聚合到同一 Alert - 双向查询:Alert 详情含 Event/规则快照,Event 详情含关联 Alert - 未命中 Event:保留评估解释,不创建 Alert - 迁移增加 PostgreSQL advisory lock,解决并行测试迁移竞态 - Go/PostgreSQL 集成测试、前端 lint/build、Harness、31 项仓库测试、差异检查:通过 #20 的身份、权限与 Alert 前置事实均已满足,继续实施并发 ack、结果必填 close 与审计时间线。
Author
Owner

最终证据:待验收

  • 实现提交:d550269(PR #35)
  • 长期文档与归档协调:#36 / PR #38
  • Wiki 归档 revision:ca2150b47195
  • 本地只读镜像:docs/task/19-Bell规则匹配与Event-Alert链路.md
  • 文档镜像提交:e2a4345、3c245e1
  • 文档验证:36 个 Wiki 映射一致;DevHarness 通过;31 项 unittest 通过;git diff --check 通过

实现、自动测试、Wiki、镜像、提交、推送与 PR 证据已齐。人工验收前本工单保持开启,不关闭、不勾选父工单。

## 最终证据:待验收 - 实现提交:`d550269`(PR #35) - 长期文档与归档协调:#36 / PR #38 - Wiki 归档 revision:`ca2150b47195` - 本地只读镜像:`docs/task/19-Bell规则匹配与Event-Alert链路.md` - 文档镜像提交:`e2a4345`、`3c245e1` - 文档验证:36 个 Wiki 映射一致;DevHarness 通过;31 项 unittest 通过;`git diff --check` 通过 实现、自动测试、Wiki、镜像、提交、推送与 PR 证据已齐。人工验收前本工单保持开启,不关闭、不勾选父工单。
Author
Owner

用户验收通过(2026-08-14)

用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision 72b5fbd6bd9c)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 explore 追溯。

此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 dev 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。

## 用户验收通过(2026-08-14) 用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision `72b5fbd6bd9c`)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 `explore` 追溯。 此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 `dev` 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。
ila closed this issue 2026-08-14 10:06:45 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#19