[Bell] 同步 MVP 长期文档与待验收归档 (#36) #38
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Project-Profile
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Project-Profile.-
|
||||
wiki_revision: 3f5324fdcb32700a628b7434f1d7800e4bb0f64f
|
||||
synchronized_at: 2026-08-12T08:50:45Z
|
||||
wiki_revision: 8d21b036c7a4077560b44790bb55602c84caaab1
|
||||
synchronized_at: 2026-08-12T10:17:39Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 项目档案
|
||||
@@ -19,7 +19,7 @@ synchronized_at: 2026-08-12T08:50:45Z
|
||||
| 首期客户场景 | 民办寄宿学校,默认 16 路高风险点位 |
|
||||
| 首期规则 | 越线、危险区域、聚集等匿名安全规则;不启用人脸 |
|
||||
| 产品形态 | Sense 与 Bell 两个独立销售产品,Brain 为独立推理交付单元 |
|
||||
| 当前阶段 | 新仓库文档与开发流程初始化,业务代码尚未迁移 |
|
||||
| 当前阶段 | Sense 与 Bell 首个独立 MVP 纵切已实现并待验收;Brain 尚未初始化 |
|
||||
| 历史来源 | `D:\OPC\yovision_old`,只读追溯 |
|
||||
|
||||
## 子项目与交付单元
|
||||
@@ -42,7 +42,7 @@ synchronized_at: 2026-08-12T08:50:45Z
|
||||
- 证据:客户侧 MinIO/S3 兼容对象存储;常态录像优先留在客户已有 NVR。
|
||||
- 首期验证平台:NVIDIA x86/Jetson;M1-M3 不承诺 GB/T 28181、信创或原生 App。
|
||||
|
||||
业务代码尚未初始化;Sense/Bell 的 Go/Node 基线已冻结并记录于下文,Brain 的 Python/CUDA 版本仍须在对应骨架工单中冻结。
|
||||
Sense 与 Bell 的独立业务骨架及首个 MVP 纵切已实现并待验收;Brain 尚未初始化。Sense/Bell 的 Go/Node 基线已冻结并记录于下文,Brain 的 Python/CUDA 版本仍须在对应骨架工单中冻结。
|
||||
|
||||
## 阅读入口
|
||||
|
||||
@@ -98,3 +98,12 @@ Sense、Bell 共用的可复现技术基线记录在仓库根 `goadmin-baseline.
|
||||
|
||||
Sense 已从冻结的 GoAdmin 基线初始化为独立产品:后端使用 Go 1.26.5 与 PostgreSQL,管理端使用 Node.js 22.22.1、pnpm 9.15.1、Vue 3.5.41、Element Plus 2.14.4 和 Vue CLI 5.0.9。产品代码只位于 `Sense/`,不依赖 Brain 或 Bell 启动;`D:\github\goadmin` 仍为只读参考。
|
||||
<!-- sense-runtime:end -->
|
||||
|
||||
|
||||
<!-- bell-runtime:start -->
|
||||
## Bell 当前实现基线
|
||||
|
||||
Bell 已从冻结的 GoAdmin 基线实现独立 Event → Alert → ack → close 纵切:后端使用 Go 1.26.5 与独立 PostgreSQL 数据库,管理端使用 Node.js 22.22.1、pnpm 9.15.1、Vue 3.5.41、Element Plus 2.14.4 和 Vue CLI 5.0.9。产品代码只位于 `Bell/`,不依赖 Sense 或 Brain 启动;`D:\github\goadmin` 仍为只读参考。
|
||||
|
||||
Bell 不提供默认账户、默认密码或默认会话密钥。部署时必须从进程环境提供独立 `BELL_DATABASE_URL` 和至少 32 字符的 `BELL_SESSION_SECRET`;Cookie 固定为 `bell_session`,不接受 Sense 的用户会话。
|
||||
<!-- bell-runtime:end -->
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Architecture-and-Code-Map
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Architecture-and-Code-Map.-
|
||||
wiki_revision: 45c9a75d6044a918d7da6b236cb7b1625c5713e3
|
||||
synchronized_at: 2026-08-12T09:32:01Z
|
||||
wiki_revision: 1712a8053f365781aef9cbf33c576c97491f31d4
|
||||
synchronized_at: 2026-08-12T10:17:44Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 架构与代码地图
|
||||
@@ -33,13 +33,13 @@ Bell 也可接收合成事件、传感器平台或第三方系统事件;Sense
|
||||
|---|---|---|---|---|
|
||||
| Sense 产品 | `Sense/` | `Sense/AGENTS.md`;后续 README/入口 | `Sense/` 内测试 | 高:设备、媒体、凭据、并发对账 |
|
||||
| Brain 推理 | `Brain/` | `Brain/AGENTS.md`;后续包入口 | `Brain/` 内测试与契约测试 | 高:模型、GPU、隐私、事件语义 |
|
||||
| Bell 产品 | `Bell/` | `Bell/AGENTS.md`;后续 README/入口 | `Bell/` 内测试 | 高:认证、事件、告警状态机、通知 |
|
||||
| Bell 产品 | `Bell/` | `Bell/README.md`、`Bell/server/main.go`、`Bell/web/src/main.js` | `Bell/server` Go 测试与 `Bell/web` lint/build | 高:认证、不可变事件、告警状态机、并发处置 |
|
||||
| 共享契约 | `contracts/` | `contracts/AGENTS.md` | 三端消费者/生产者测试 | 高:兼容性与跨项目影响 |
|
||||
| Harness | `dev_scripts/` | `check_harness.py` | `tests/` | 中 |
|
||||
| 工单模板 | `.gitea/issue_template/` | `task.md` | Harness 严格检查 | 中 |
|
||||
| Wiki 镜像 | `docs/` | `docs/README.md` | `sync_wiki_docs.py --check` | 低;禁止直接编辑 |
|
||||
|
||||
业务代码尚未迁入;具体函数、路由和测试入口必须随各项目骨架工单更新,不复制旧仓库代码地图。
|
||||
Sense 与 Bell 已建立独立业务入口;Brain 的具体函数、路由和测试入口仍须随骨架工单更新,不复制旧仓库代码地图。
|
||||
|
||||
## 两条主要执行路径
|
||||
|
||||
@@ -108,3 +108,19 @@ Sense 后端功能以 `Sense/server/app/sense/` 为根,并通过 `Sense/server
|
||||
|
||||
前端在 `Sense/ui/src/{api,views,router/modules,components}/sense/` 使用对应模块;通用页面复用 Element Plus 表单、表格、分页、Dialog、Tag 和应用容器,只为播放器与区域画布新增局部业务组件。项目内 `identity.RecordAudit`、`device.ReadCredential`、`admission.VerifiedProfile`、`media.PlaybackRoute` 和 `area.ExportCurrent` 是窄适配端口,不是跨项目契约。
|
||||
<!-- sense-mvp:end -->
|
||||
|
||||
|
||||
<!-- bell-mvp:start -->
|
||||
## Bell MVP 模块地图
|
||||
|
||||
- `Bell/server/main.go` 与 `cmd/bell/root.go`:命令入口、配置、迁移、HTTP 注册和优雅退出。
|
||||
- `Bell/server/app/auth/`、`rbac/`、`audit/`:Bell 独立账户、bcrypt 密码、服务端会话、管理员/操作员/只读角色与只追加审计。
|
||||
- `Bell/server/app/event/`、`receipt/`:不可变 Event、`(producer_id, source_event_id)` 永久幂等回执和游标查询。
|
||||
- `Bell/server/app/synthetic/` 与 `server/testdata/events/`:只在 development/test 注册的匿名合成事件,复用正式 Event 服务。
|
||||
- `Bell/server/app/rule/`:规则版本、每次评估解释、实际规则快照和按规则/地点关联 Alert。
|
||||
- `Bell/server/app/alert/query/`、`alert/lifecycle/`:Event/Alert 双向追溯、单一 ack 获胜者、结果必填的 close、幂等重复和只追加时间线。
|
||||
- `Bell/server/migrations/`:事务迁移与数据库不可变触发器;所有表只属于 Bell 数据库。
|
||||
- `Bell/web/src/{api,views,store,layout}/`:Vue 3 + Element Plus 管理端,一级导航为工作台、预警管理、事件查询、规则配置;系统与合成入口按权限/环境出现。
|
||||
|
||||
Event 写入、幂等 Receipt、规则评估和 Alert 创建/关联处于同一数据库事务;规则或关联失败时不保留半成品 Event。一个 Event 可匹配多个规则,一个未关闭 Alert 可聚合相同规则与地点的多个 Event。
|
||||
<!-- bell-mvp:end -->
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Business-Rules-and-Glossary
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Business-Rules-and-Glossary.-
|
||||
wiki_revision: 36a49f985cdd6ebd93759273fbc53158ba13b152
|
||||
synchronized_at: 2026-08-12T09:32:06Z
|
||||
wiki_revision: 2b222ffc8c2d943fa2a27d9e28ffaf4896143950
|
||||
synchronized_at: 2026-08-12T10:17:48Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 业务规则与术语
|
||||
@@ -80,3 +80,19 @@ synchronized_at: 2026-08-12T09:32:06Z
|
||||
- **播放会话**:由当前 Sense 用户创建,最长两分钟;设备分页和媒体路径不以 16 路作为硬上限,页面一次只打开一路流。
|
||||
- **区域版本**:坐标为 0..1 归一化值,并绑定 Device、Profile、宽高。每次发布或停用形成新版本;范围、点数、自交、退化、方向和期望版本由后端校验。Profile 分辨率变化后旧版本必须标记为需要重新校准。
|
||||
<!-- sense-mvp:end -->
|
||||
|
||||
|
||||
<!-- bell-mvp:start -->
|
||||
## Bell MVP 业务与安全规则
|
||||
|
||||
- **独立身份**:Bell 仅接受自己的 `bell_session`;管理员管理用户、角色与规则,操作员读取事件/预警并处置,只读用户仅查询。后端权限是最终边界。
|
||||
- **安全初始化**:系统没有默认用户、密码或签名密钥;首次管理员密码只通过一次性进程环境传入,密码至少 12 位且包含大小写字母和数字。
|
||||
- **Event 与 Receipt**:Event 正文不可更新或删除。相同 `(producer_id, source_event_id)` 与相同 payload 返回原回执;相同键但不同 payload 返回冲突,跨进程重启仍成立。
|
||||
- **合成事件**:只在 development/test 注册,使用虚构匿名 fixture,并走与未来生产者适配器相同的 Event/Receipt 服务;production 直接请求返回 404。
|
||||
- **规则评估**:每个已接收 Event 都记录匹配或未匹配解释。匹配时固化实际规则快照;未匹配 Event 保持可查询,不能标成已通知或已处置。
|
||||
- **Alert 关联**:同一 Event 可产生多个 Alert;同一规则与地点的多个 Event 可聚合到同一未关闭 Alert,Event 与 Alert 双向可追溯。
|
||||
- **处置状态**:界面“待处理”对应新 Alert,“处理中/已看到”对应首个成功 ack,“已完成”对应记录现场结果后的 close。普通用户不需要理解 Event/Alert 内部模型,技术详情仍保留完整事实链。
|
||||
- **并发 ack**:PostgreSQL 条件更新只允许首个操作员成为处置人;后来者得到真实处置人,不能覆盖。
|
||||
- **close**:只有处置人或管理员可以完成;必须选择“确认有危险、误报、现场正常、无法确认”之一,可附备注。相同重复请求幂等,其他改变结果的请求被拒绝。
|
||||
- **审计事实**:成功生命周期事实只追加;失败、重复和拒绝尝试写入安全审计,但不记录令牌、密码或连接密钥。
|
||||
<!-- bell-mvp:end -->
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Local-Development-and-Verification
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Local-Development-and-Verification.-
|
||||
wiki_revision: 0a0354b0fed4c7edc68a1c6c887a0f2886e47541
|
||||
synchronized_at: 2026-08-12T08:50:58Z
|
||||
wiki_revision: a9b66768b039da1d25a5e1688c020167798e9ea0
|
||||
synchronized_at: 2026-08-12T10:17:51Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 本地开发与验证
|
||||
@@ -59,7 +59,7 @@ Sense/Bell 的 Go、Node 与 pnpm 基线已冻结并记录于下文;Brain 的
|
||||
|---|---|---|---|---|
|
||||
| Sense | 待骨架工单冻结 | 待冻结 | 待冻结 | 未初始化业务代码 |
|
||||
| Brain | 待骨架工单冻结 | 待冻结 | 待冻结 | 未初始化业务代码 |
|
||||
| Bell | 待骨架工单冻结 | 待冻结 | 待冻结 | 未初始化业务代码 |
|
||||
| Bell | `go build ./...`;`pnpm build:prod` | `go test ./...`;`pnpm lint` | `go run . migrate`;`go run . serve`;`pnpm dev` | 首个独立纵切已实现,待验收 |
|
||||
|
||||
不得复制旧仓库命令来填空。每个骨架工单必须同时建立 README、可复制命令和最小测试。
|
||||
|
||||
@@ -107,7 +107,7 @@ pnpm --version
|
||||
|
||||
`D:\github\goadmin` 下三个仓库只允许读取和核对,不允许在其中开发或提交 yovision 产品代码。本机路径不是跨机器事实;缺少该路径时,应从清单中的上游 URL 检出相同 commit 到仓库外目录。
|
||||
|
||||
截至 2026-08-12 的本机核对结果:Go 1.23.0,不满足 go-admin `go.mod` 声明的 Go 1.26.5;Node.js 22.22.1 符合基线;pnpm 尚未安装,Corepack 0.34.6 可用。因此后端构建和 pnpm 前端构建均未完成验证。安装隔离的 Go 1.26.5 并通过 Corepack 启用 pnpm 9.15.1 后,才可执行后续骨架构建验收。
|
||||
截至 2026-08-12,系统 Go 1.23.0 仍不满足基线;开发机已在仓库外安装并校验隔离 Go 1.26.5,并通过 Corepack 使用 pnpm 9.15.1。Sense、Bell 的后端测试/构建与前端 lint/build 已在该隔离工具链完成。隔离目录是开发机临时事实,不得写入部署配置;其他机器应从官方来源安装相同精确版本。
|
||||
|
||||
`go-admin-doc` 只用于理解上游框架;项目自己的架构、开发规则和版本事实仍以 yovision Wiki、Agent 规则与 `goadmin-baseline.json` 为准。
|
||||
|
||||
@@ -132,3 +132,27 @@ powershell -ExecutionPolicy Bypass -File .\Sense\scripts\bootstrap\smoke.ps1
|
||||
|
||||
正式后端启动必须设置 `SENSE_DATABASE_MODE=postgres` 和仓库外提供的 `SENSE_DATABASE_URL`。健康检查为 `GET /healthz`,就绪检查为 `GET /readyz`。本地 smoke 明确设置 `SENSE_DATABASE_MODE=memory`,不能代替 PostgreSQL 部署验证。
|
||||
<!-- sense-runtime:end -->
|
||||
|
||||
|
||||
<!-- bell-runtime:start -->
|
||||
## Bell 本地构建与验证
|
||||
|
||||
先从根 `goadmin-baseline.json` 核对精确版本,再从仓库外环境设置 Bell 专用数据库与会话密钥。命令中的值只能使用本地测试凭据,不得提交:
|
||||
|
||||
```powershell
|
||||
powershell -ExecutionPolicy Bypass -File .\Bell\scripts\bootstrap\check-toolchain.ps1
|
||||
Set-Location Bell\server
|
||||
go test ./...
|
||||
go build ./...
|
||||
go run . migrate
|
||||
go run . serve
|
||||
Set-Location ..\web
|
||||
corepack pnpm@9.15.1 install --frozen-lockfile
|
||||
corepack pnpm@9.15.1 lint
|
||||
corepack pnpm@9.15.1 build:prod
|
||||
```
|
||||
|
||||
后端启动前必须提供独立 `BELL_DATABASE_URL` 与至少 32 字符的 `BELL_SESSION_SECRET`;`BELL_ENV` 可取 development、test、production。健康检查为 `GET /healthz`,就绪检查为 `GET /readyz`。首次管理员用 `go run . create-admin` 创建,密码通过 `BELL_BOOTSTRAP_PASSWORD` 进程环境一次性提供。
|
||||
|
||||
在 Sense、Brain 停止时,development/test 可使用“合成事件测试”完成 Event 入站、规则匹配、Alert 关联、ack 和结果必填 close。production 必须验证 `/api/v1/synthetic/*` 返回 404。PostgreSQL 集成测试使用空的 Bell 专用测试数据库,禁止复用 Sense 或生产数据库。
|
||||
<!-- bell-runtime:end -->
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
<!-- gitea-wiki-mirror:start -->
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Task-12-Bell独立登录RBAC与认证审计
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-12-Bell%E7%8B%AC%E7%AB%8B%E7%99%BB%E5%BD%95RBAC%E4%B8%8E%E8%AE%A4%E8%AF%81%E5%AE%A1%E8%AE%A1.-
|
||||
wiki_revision: 133ad095749c9258fa2becc65d8946233fdfd56d
|
||||
synchronized_at: 2026-08-12T10:19:05Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 12 Bell独立登录RBAC与认证审计
|
||||
|
||||
- 类型:需求
|
||||
- 所属 Epic:#7
|
||||
- 所属 MVP / 版本:#8
|
||||
- 状态:待验收
|
||||
- 日期:2026-08-12
|
||||
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/12
|
||||
- Wiki 页面:Task-12-Bell独立登录RBAC与认证审计
|
||||
- Wiki revision:见本地镜像头
|
||||
|
||||
## 背景与目标
|
||||
|
||||
为 Bell 建立不信任 Sense token 的独立账户、会话、角色权限与认证审计边界。
|
||||
|
||||
## 最终方案
|
||||
|
||||
使用 bcrypt 密码和只存 HMAC 摘要的服务端会话,Cookie 固定为 `bell_session`。系统无默认账户/密码/密钥,首次管理员由一次性环境变量创建。管理员、操作员、只读角色按最小权限执行,认证审计由数据库触发器保证只追加。
|
||||
|
||||
## 修改文件
|
||||
|
||||
- `Bell/server/app/auth/`、`rbac/`、`audit/`:身份、权限与审计。
|
||||
- `Bell/server/migrations/2026081201_auth.sql`:账户、角色、会话、审计及不可变约束。
|
||||
- `Bell/web/src/views/login/`、`system/`:登录、用户角色和审计页面。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| 缺少 session secret 拒绝启动 | 通过 |
|
||||
| Bell 登录/登出和过期会话闭环 | 通过 |
|
||||
| Sense Cookie 不被接受 | 通过 |
|
||||
| 后端 RBAC 隔离管理员接口 | 通过 |
|
||||
| 审计事实不可更新/删除 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行:Go 单元/集成测试;登录 200→登出 204→会话 401;伪 Sense Cookie 401;管理员/操作员/只读权限矩阵;数据库不可变触发器。
|
||||
- 结果:全部通过。
|
||||
- **未验证部分**:生产域名下 Secure Cookie、外部身份提供商和真实用户人工验收。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `a5fc8f5` 独立认证与 RBAC(PR #35)。
|
||||
@@ -0,0 +1,52 @@
|
||||
<!-- gitea-wiki-mirror:start -->
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Task-17-Bell不可变Event与永久幂等收据
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-17-Bell%E4%B8%8D%E5%8F%AF%E5%8F%98Event%E4%B8%8E%E6%B0%B8%E4%B9%85%E5%B9%82%E7%AD%89%E6%94%B6%E6%8D%AE.-
|
||||
wiki_revision: dab364664ed4d1aa7605de1a0c1a02299df75941
|
||||
synchronized_at: 2026-08-12T10:19:08Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 17 Bell不可变Event与永久幂等收据
|
||||
|
||||
- 类型:需求
|
||||
- 所属 Epic:#7
|
||||
- 所属 MVP / 版本:#8
|
||||
- 状态:待验收
|
||||
- 日期:2026-08-12
|
||||
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/17
|
||||
- Wiki 页面:Task-17-Bell不可变Event与永久幂等收据
|
||||
- Wiki revision:见本地镜像头
|
||||
|
||||
## 背景与目标
|
||||
|
||||
可靠接收外部事件,在重试、并发和重启后保持永久幂等,同时禁止改写原始 Event。
|
||||
|
||||
## 最终方案
|
||||
|
||||
以 `(producer_id, source_event_id)` 唯一键和 payload hash 建立稳定 Receipt;相同正文返回原结果,不同正文返回冲突。Event/Receipt 持久化在同一事务,数据库触发器拒绝 Event 更新或删除,并提供游标分页与详情查询。
|
||||
|
||||
## 修改文件
|
||||
|
||||
- `Bell/server/app/event/`、`receipt/`:入站服务、HTTP、查询和类型。
|
||||
- `Bell/server/migrations/2026081202_event_receipt.sql`:不可变表、索引、Receipt 和触发器。
|
||||
- `Bell/web/src/views/event/Events.vue`:事件查询与技术详情。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| 并发重复返回同一 Event/Receipt | 通过 |
|
||||
| 同键不同 payload 返回冲突 | 通过 |
|
||||
| 进程/连接重建后仍幂等 | 通过 |
|
||||
| Event 数据库层不可变 | 通过 |
|
||||
| 下游失败时不留下半成品 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行:PostgreSQL 集成测试,16 个并发相同入站、冲突、连接池重建、不可变触发器、事务 hook 回滚。
|
||||
- 结果:全部通过。
|
||||
- **未验证部分**:正式跨项目契约、生产规模压测与生产备份恢复。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `64a1d82` 不可变 Event 与永久幂等 Receipt(PR #35)。
|
||||
@@ -0,0 +1,52 @@
|
||||
<!-- gitea-wiki-mirror:start -->
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Task-18-Bell开发测试合成事件入口
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-18-Bell%E5%BC%80%E5%8F%91%E6%B5%8B%E8%AF%95%E5%90%88%E6%88%90%E4%BA%8B%E4%BB%B6%E5%85%A5%E5%8F%A3.-
|
||||
wiki_revision: 2ce181d6bd9001661af20940cbcbf74beda4d7ba
|
||||
synchronized_at: 2026-08-12T10:19:11Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 18 Bell开发测试合成事件入口
|
||||
|
||||
- 类型:需求
|
||||
- 所属 Epic:#7
|
||||
- 所属 MVP / 版本:#8
|
||||
- 状态:待验收
|
||||
- 日期:2026-08-12
|
||||
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/18
|
||||
- Wiki 页面:Task-18-Bell开发测试合成事件入口
|
||||
- Wiki revision:见本地镜像头
|
||||
|
||||
## 背景与目标
|
||||
|
||||
在 Sense、Brain 离线时提供安全、可重复的 Bell 纵切验收入口,同时保证生产环境不可访问。
|
||||
|
||||
## 最终方案
|
||||
|
||||
把虚构匿名 fixture 嵌入 `server/testdata/events/`;仅在 development/test 注册 synthetic 路由并要求管理员权限,所有成功注入都调用正式 Event/Receipt 服务。production 不注册路由,直接返回 404。
|
||||
|
||||
## 修改文件
|
||||
|
||||
- `Bell/server/app/synthetic/`、`server/testdata/events/`:fixture、校验和 HTTP 入口。
|
||||
- `Bell/server/migrations/2026081203_synthetic_permission.sql`:测试权限。
|
||||
- `Bell/web/src/views/synthetic-event/`:仅环境与权限允许时显示的测试页。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| 无 Sense/Brain 可注入匿名事件 | 通过 |
|
||||
| 重放相同 fixture 验证幂等 | 通过 |
|
||||
| 同键不同正文验证冲突 | 通过 |
|
||||
| 非法 fixture 返回 400 | 通过 |
|
||||
| production 路由返回 404 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行:Go 单元/HTTP 测试与 dev/test/prod 手工 API 验收。
|
||||
- 结果:首次 201、重复 200、冲突 409、非法 400、production 404。
|
||||
- **未验证部分**:正式生产者契约与客户环境验收。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `55d54d0` 仅开发测试可用的合成事件(PR #35)。
|
||||
@@ -0,0 +1,52 @@
|
||||
<!-- gitea-wiki-mirror:start -->
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Task-19-Bell规则匹配与Event-Alert链路
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-19-Bell%E8%A7%84%E5%88%99%E5%8C%B9%E9%85%8D%E4%B8%8EEvent-Alert%E9%93%BE%E8%B7%AF.-
|
||||
wiki_revision: ca2150b47195eb44b14c4c73a2eab8fd3be14617
|
||||
synchronized_at: 2026-08-12T10:19:15Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 19 Bell规则匹配与Event-Alert链路
|
||||
|
||||
- 类型:需求
|
||||
- 所属 Epic:#7
|
||||
- 所属 MVP / 版本:#8
|
||||
- 状态:待验收
|
||||
- 日期:2026-08-12
|
||||
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/19
|
||||
- Wiki 页面:Task-19-Bell规则匹配与Event-Alert链路
|
||||
- Wiki revision:见本地镜像头
|
||||
|
||||
## 背景与目标
|
||||
|
||||
把已接收 Event 通过可审计规则转换为可处置 Alert,并保留 Event/Alert 双向追溯。
|
||||
|
||||
## 最终方案
|
||||
|
||||
Event 接收事务内执行规则评估,记录规则版本、解释和实际快照。一个 Event 可匹配多个规则;相同规则与地点的多个 Event 聚合到同一未关闭 Alert。未匹配 Event 仍可查询且不冒充通知/处置成功。
|
||||
|
||||
## 修改文件
|
||||
|
||||
- `Bell/server/app/rule/`、`alert/model/`、`alert/query/`:规则、评估、Alert 和查询。
|
||||
- `Bell/server/migrations/2026081204_rule_alert_base.sql`:规则版本、评估、Alert 与多对多关联。
|
||||
- `Bell/web/src/views/rule/`、`alert/list/`:规则与预警列表/详情。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| 一个 Event 可形成多个 Alert | 通过 |
|
||||
| 多 Event 可聚合同一开放 Alert | 通过 |
|
||||
| 未匹配评估可审计 | 通过 |
|
||||
| 失败时 Event/Receipt/Alert 同事务回滚 | 通过 |
|
||||
| 规则写权限仅管理员 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行:PostgreSQL 集成测试与 API 验收;覆盖 1 Event→2 Alert、2 Event→同 2 Alert、未匹配、事务回滚和 RBAC。
|
||||
- 结果:全部通过;Alert 详情返回 2 个关联 Event 与 2 条匹配解释。
|
||||
- **未验证部分**:大规模规则性能、正式生产者契约和通知投递。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `d550269` 规则匹配与 Event/Alert 可导航链路(PR #35)。
|
||||
@@ -0,0 +1,54 @@
|
||||
<!-- gitea-wiki-mirror:start -->
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Task-20-Bell-Alert并发处置与审计时间线
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/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.-
|
||||
wiki_revision: b7ed3e488bf2484b4b4690902f8e446e0e6a1b54
|
||||
synchronized_at: 2026-08-12T10:19:18Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 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)。
|
||||
@@ -0,0 +1,50 @@
|
||||
<!-- gitea-wiki-mirror:start -->
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Task-31-Bell原型对齐GoAdmin与Element-Plus
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-31-Bell%E5%8E%9F%E5%9E%8B%E5%AF%B9%E9%BD%90GoAdmin%E4%B8%8EElement-Plus.-
|
||||
wiki_revision: e3ceec7443b6ba2f01db0caa13eae5fc9b0545c2
|
||||
synchronized_at: 2026-08-12T10:19:21Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 31 Bell原型对齐GoAdmin与Element-Plus
|
||||
|
||||
- 类型:需求
|
||||
- 所属 Epic:#7
|
||||
- 所属 MVP / 版本:#8
|
||||
- 状态:待验收
|
||||
- 日期:2026-08-12
|
||||
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/31
|
||||
- Wiki 页面:Task-31-Bell原型对齐GoAdmin与Element-Plus
|
||||
- Wiki revision:见本地镜像头
|
||||
|
||||
## 背景与目标
|
||||
|
||||
将 Bell HTML 原型对齐冻结 go-admin-ui 外壳与 Element Plus 交互语言,为正式 Vue 页面提供已验证设计基线。
|
||||
|
||||
## 最终方案
|
||||
|
||||
复用共享 Sidebar、Navbar、TagsView、AppMain、表单、表格、分页、Dialog、Tag、Tabs 与权限按钮,只新增 AlertWorkbench 和 AlertAuditTimeline 业务组件;未修改只读上游仓库。
|
||||
|
||||
## 修改文件
|
||||
|
||||
- `prototypes/bell/**`:Bell 原型页面、样式与交互。
|
||||
- `prototypes/assets/go-admin-ui.css`、`go-admin-shell.js`:在协调范围内复用的原型外壳适配器。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| go-admin-ui/Element Plus 外壳一致 | 通过 |
|
||||
| ack/close、时间线与 Dialog 键盘交互 | 通过 |
|
||||
| 1440/768/375/手机横屏响应式 | 通过 |
|
||||
| 无重复组件、外部资源或控制台错误 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行:Harness、25 项仓库测试、JavaScript 语法、重复 ID、响应式、键盘、焦点、Escape 与交互走查。
|
||||
- 结果:自动化和浏览器检查通过。
|
||||
- **未验证部分**:产品/客户人工验收。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `0bdd88b` 原型对齐冻结 GoAdmin UI 基线(PR #29)。
|
||||
@@ -0,0 +1,49 @@
|
||||
<!-- gitea-wiki-mirror:start -->
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Task-33-Bell普通用户预警处理原型
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-33-Bell%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%E9%A2%84%E8%AD%A6%E5%A4%84%E7%90%86%E5%8E%9F%E5%9E%8B.-
|
||||
wiki_revision: c829e54319af164c80be8a07048ef7e74181600b
|
||||
synchronized_at: 2026-08-12T10:19:24Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 33 Bell普通用户预警处理原型
|
||||
|
||||
- 类型:需求
|
||||
- 所属 Epic:#7
|
||||
- 所属 MVP / 版本:#8
|
||||
- 状态:待验收
|
||||
- 日期:2026-08-12
|
||||
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/33
|
||||
- Wiki 页面:Task-33-Bell普通用户预警处理原型
|
||||
- Wiki revision:见本地镜像头
|
||||
|
||||
## 背景与目标
|
||||
|
||||
把领域模型导向的 Bell 原型调整为普通客户熟悉的预警后台,使用户无需理解 Event/Alert 即可完成核心处置。
|
||||
|
||||
## 最终方案
|
||||
|
||||
一级模块固定为工作台、预警管理、事件查询、规则配置。默认展示事项、地点、时间、风险和建议;“开始处理”与“记录现场结果”分成两步,关闭前必须选择确认有危险、误报、现场正常或无法确认。内部 ID、Receipt、规则快照和审计链路进入技术详情。
|
||||
|
||||
## 修改文件
|
||||
|
||||
- `prototypes/bell/index.html`、`bell.css`、`bell.js`:普通用户信息架构、处置动作与响应式交互。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| 四个常见一级模块与中文业务字段 | 通过 |
|
||||
| ack 与结果必填 close 语义清晰 | 通过 |
|
||||
| 并发处理人反馈和技术详情可追溯 | 通过 |
|
||||
| 375/768/1440/812×375 无页面溢出 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行:导航、筛选、分页、ack、结果必填、误报 close、响应式、键盘/焦点、Harness 与仓库测试。
|
||||
- 结果:自动化与浏览器检查通过,无控制台错误或警告。
|
||||
- **未验证部分**:普通用户代表无提示人工走查与产品确认。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `8d1875c` 按确认反馈调整为传统预警后台(PR #29)。
|
||||
@@ -0,0 +1,52 @@
|
||||
<!-- gitea-wiki-mirror:start -->
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Task-36-Bell-MVP文档与待验收归档
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-36-Bell-MVP%E6%96%87%E6%A1%A3%E4%B8%8E%E5%BE%85%E9%AA%8C%E6%94%B6%E5%BD%92%E6%A1%A3.-
|
||||
wiki_revision: e9880ec350e7d9fea1119b98da48ce47c871a9c6
|
||||
synchronized_at: 2026-08-12T10:24:25Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 36 Bell-MVP文档与待验收归档
|
||||
|
||||
- 类型:需求
|
||||
- 所属 Epic:#7
|
||||
- 所属 MVP / 版本:#8
|
||||
- 状态:待验收
|
||||
- 日期:2026-08-12
|
||||
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/36
|
||||
- Wiki 页面:Task-36-Bell-MVP文档与待验收归档
|
||||
- Wiki revision:见本地镜像头
|
||||
|
||||
## 背景与目标
|
||||
|
||||
统一把 Bell #9、#12、#17、#18、#19、#20、#31、#33 的长期结论与待验收证据写入 Wiki,并生成只读镜像。
|
||||
|
||||
## 最终方案
|
||||
|
||||
由单一协调 agent 在 PR #34 的精确文档基线上串行更新共享页面,Bell 代码仍由 PR #35 独立审查。先更新并读取 Wiki,再生成镜像;不删除/重命名页面,不关闭待验收工单。
|
||||
|
||||
## 修改文件
|
||||
|
||||
- `wiki-docs.json`:登记九个任务归档显式映射。
|
||||
- `docs/00-project-profile.md`、`docs/02-architecture-and-code-map.md`、`docs/03-business-rules-and-glossary.md`、`docs/04-local-development-and-verification.md`:Wiki 镜像。
|
||||
- `docs/task/{9,12,17,18,19,20,31,33,36}-*.md`:待验收归档镜像。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| 四个稳定 Wiki 页面保留其他项目并包含 Bell 当前事实 | 通过 |
|
||||
| 八个 Bell 工单归档包含真实提交、测试和未验证项 | 通过 |
|
||||
| Wiki 写后读取确认 | 通过 |
|
||||
| 镜像、Harness、仓库测试与 diff 检查 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行:`sync_wiki_docs.py --check`、`check_harness.py --strict`、仓库 unittest、`git diff --check`。
|
||||
- 结果:Wiki 36 个映射全部一致;DevHarness 通过;31 项 unittest 全部通过;`git diff --check` 通过。
|
||||
- **未验证部分**:用户对代码、原型与文档的人工验收。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `e2a4345` Bell 稳定文档与待验收归档镜像。
|
||||
- 最终归档镜像提交与串联 PR 见工单 #36。
|
||||
@@ -0,0 +1,51 @@
|
||||
<!-- gitea-wiki-mirror:start -->
|
||||
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
|
||||
wiki_page: Task-9-Bell独立GoAdmin产品骨架
|
||||
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-9-Bell%E7%8B%AC%E7%AB%8BGoAdmin%E4%BA%A7%E5%93%81%E9%AA%A8%E6%9E%B6.-
|
||||
wiki_revision: affa26c4134ad936c277a960aa45a838db28e73c
|
||||
synchronized_at: 2026-08-12T10:19:02Z
|
||||
<!-- gitea-wiki-mirror:end -->
|
||||
|
||||
# 9 Bell独立GoAdmin产品骨架
|
||||
|
||||
- 类型:需求
|
||||
- 所属 Epic:#7
|
||||
- 所属 MVP / 版本:#8
|
||||
- 状态:待验收
|
||||
- 日期:2026-08-12
|
||||
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/9
|
||||
- Wiki 页面:Task-9-Bell独立GoAdmin产品骨架
|
||||
- Wiki revision:见本地镜像头
|
||||
|
||||
## 背景与目标
|
||||
|
||||
在 Sense、Brain 不启动时建立 Bell 可独立构建、运行和交付的 Go + Vue 3 + Element Plus + PostgreSQL 产品骨架,冻结工具链并移除无关 go-admin 演示入口。
|
||||
|
||||
## 最终方案
|
||||
|
||||
实现独立后端命令、事务迁移、健康/就绪检查、静态资源宿主和 Vue 管理外壳;保留上游 MIT 许可证。正式运行要求 Bell 专用 PostgreSQL,未提供内置账户、密码或生产配置。
|
||||
|
||||
## 修改文件
|
||||
|
||||
- `Bell/server/`:Go 入口、配置、PostgreSQL、迁移与健康检查。
|
||||
- `Bell/web/`:Vue 3、Element Plus、路由、状态与应用外壳。
|
||||
- `Bell/README.md`、`Bell/.env.example`、`Bell/LICENSES/`:运行说明、无秘密模板与上游来源。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| Sense/Brain 停止时独立启动 | 通过 |
|
||||
| 空 PostgreSQL 迁移,health/ready 正常 | 通过 |
|
||||
| 无关演示路由不可访问 | 通过 |
|
||||
| 精确工具链与许可证可追溯 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行:`go test ./...`、`pnpm lint`、`pnpm build:prod`、空库迁移、health/ready smoke、Harness、仓库 unittest。
|
||||
- 结果:全部通过;前端构建仅有 Element Plus vendor 体积警告。
|
||||
- **未验证部分**:生产部署、备份恢复与人工 UI 验收。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `a5d846a` 初始化独立 Bell 产品骨架(PR #35)。
|
||||
@@ -111,6 +111,42 @@
|
||||
{
|
||||
"page": "Task-27-Sense区域与方向警戒线版本配置",
|
||||
"path": "docs/task/27-Sense区域与方向警戒线版本配置.md"
|
||||
},
|
||||
{
|
||||
"page": "Task-9-Bell独立GoAdmin产品骨架",
|
||||
"path": "docs/task/9-Bell独立GoAdmin产品骨架.md"
|
||||
},
|
||||
{
|
||||
"page": "Task-12-Bell独立登录RBAC与认证审计",
|
||||
"path": "docs/task/12-Bell独立登录RBAC与认证审计.md"
|
||||
},
|
||||
{
|
||||
"page": "Task-17-Bell不可变Event与永久幂等收据",
|
||||
"path": "docs/task/17-Bell不可变Event与永久幂等收据.md"
|
||||
},
|
||||
{
|
||||
"page": "Task-18-Bell开发测试合成事件入口",
|
||||
"path": "docs/task/18-Bell开发测试合成事件入口.md"
|
||||
},
|
||||
{
|
||||
"page": "Task-19-Bell规则匹配与Event-Alert链路",
|
||||
"path": "docs/task/19-Bell规则匹配与Event-Alert链路.md"
|
||||
},
|
||||
{
|
||||
"page": "Task-20-Bell-Alert并发处置与审计时间线",
|
||||
"path": "docs/task/20-Bell-Alert并发处置与审计时间线.md"
|
||||
},
|
||||
{
|
||||
"page": "Task-31-Bell原型对齐GoAdmin与Element-Plus",
|
||||
"path": "docs/task/31-Bell原型对齐GoAdmin与Element-Plus.md"
|
||||
},
|
||||
{
|
||||
"page": "Task-33-Bell普通用户预警处理原型",
|
||||
"path": "docs/task/33-Bell普通用户预警处理原型.md"
|
||||
},
|
||||
{
|
||||
"page": "Task-36-Bell-MVP文档与待验收归档",
|
||||
"path": "docs/task/36-Bell-MVP文档与待验收归档.md"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user