[SEN] 实现设备、媒体与本地推理状态的运维中心 #74

Closed
opened 2026-08-14 10:29:14 +08:00 by ila · 6 comments
Owner

状态

已完成

基本信息

  • 类型:需求 / Sense 单项目独立任务
  • 任务类型:单项目
  • 主项目:Sense
  • 主 agent:Sense agent
  • 所属 Epic:#7
  • 所属 MVP / 版本:#80
  • 前置工单:#67、#68、#73
  • 是否允许与前置工单并行:否;必须先冻结前置领域接口
  • 独立运行:Brain、Bell 均不启动时完成实现和验收
  • 需求编号:SEN-009

原始需求与追溯

  • 来源:用户于 2026-08-14 要求建立 Sense 全部独立任务;Product-Requirements、Requirements-Migration-Matrix 和 Sense/AGENTS.md。
  • 摘要:Sense 单产品能够独立完成的后续能力全部建单;跨项目正式契约、Brain 控制和 Bell connector 留给协调工单。
  • 旧 explore 只用于需求、行为与测试对照,不复制自研基础框架。

目标

集中展示设备、媒体以及可选本地推理的期望态与实际态、未收敛差异、退避、重试、认证失败、时间漂移和孤儿安全闸。

范围

实现运维概览、问题队列、状态详情、受控重试和审计;Brain 不在线时以适配器 unavailable 状态展示,不调用 Brain 数据库。

非目标

不实现跨项目控制契约;不自动删除孤儿资源;不把设备运维异常发送到 Bell 业务 Alert。

GoAdmin 复用要求

复用 #61/#64 建立的 GoAdmin/go-admin-ui 认证、RBAC、审计、Router、Store、Axios、Layout、表格、表单、分页、Dialog、Tag 和权限按钮;实施前读取相关冻结 go-admin-doc 并在评论记录采用方式。业务专用组件必须说明复用缺口并保持整体风格。

写路径

  • Sense/server/app/sense/operations/**
  • Sense/server/app/admin/router/sense_operations.go
  • Sense/server/app/admin/router/sense_operations_test.go
  • Sense/server/cmd/migrate/migration/version/*operations*
  • Sense/ui/src/views/sense/operations/**
  • Sense/ui/src/api/sense/operations*
  • Sense/ui/tests/unit/sense/operations*.spec.js

禁止写入:Brain/**、Bell/**、contracts/**、根级构建/部署、docs/**、wiki-docs.json。需要共享路径时停止并转协调工单。

文档影响

更新对应 Sense Wiki 业务规则、配置、运行、排错和验收页面;本地镜像由单一协调工单同步。

验收标准

  • 设备和媒体期望/实际态及差异可定位
  • 显示退避、下次重试、认证失败、时间漂移和孤儿安全闸
  • 受控重试有权限、并发保护和审计
  • Brain 未安装时显示 unavailable 而非页面失败
  • Bell 不启动时运维中心完全可用

验证方式

  • 状态投影、对账、退避、并发与权限测试
  • 前端概览、问题筛选、详情和操作反馈测试
  • MediaMTX 退出/恢复、设备认证失败和时间漂移集成 smoke

风险与回退

错误重试或孤儿处置可能中断视频。默认只读诊断,写操作必须显式权限与安全闸;回退操作记录而非删除资源。

协同需求摘要

本工单只实现 Sense 内部端口和夹具。涉及 Sense→Brain、Brain→Sense、Sense/Brain→Bell 的正式 schema、机器身份、部署或 E2E 时另建协调工单。

## 状态 已完成 ## 基本信息 - 类型:需求 / Sense 单项目独立任务 - 任务类型:单项目 - 主项目:Sense - 主 agent:Sense agent - 所属 Epic:#7 - 所属 MVP / 版本:#80 - 前置工单:#67、#68、#73 - 是否允许与前置工单并行:否;必须先冻结前置领域接口 - 独立运行:Brain、Bell 均不启动时完成实现和验收 - 需求编号:SEN-009 ## 原始需求与追溯 - 来源:用户于 2026-08-14 要求建立 Sense 全部独立任务;Product-Requirements、Requirements-Migration-Matrix 和 Sense/AGENTS.md。 - 摘要:Sense 单产品能够独立完成的后续能力全部建单;跨项目正式契约、Brain 控制和 Bell connector 留给协调工单。 - 旧 `explore` 只用于需求、行为与测试对照,不复制自研基础框架。 ## 目标 集中展示设备、媒体以及可选本地推理的期望态与实际态、未收敛差异、退避、重试、认证失败、时间漂移和孤儿安全闸。 ## 范围 实现运维概览、问题队列、状态详情、受控重试和审计;Brain 不在线时以适配器 unavailable 状态展示,不调用 Brain 数据库。 ## 非目标 不实现跨项目控制契约;不自动删除孤儿资源;不把设备运维异常发送到 Bell 业务 Alert。 ## GoAdmin 复用要求 复用 #61/#64 建立的 GoAdmin/go-admin-ui 认证、RBAC、审计、Router、Store、Axios、Layout、表格、表单、分页、Dialog、Tag 和权限按钮;实施前读取相关冻结 go-admin-doc 并在评论记录采用方式。业务专用组件必须说明复用缺口并保持整体风格。 ## 写路径 - `Sense/server/app/sense/operations/**` - `Sense/server/app/admin/router/sense_operations.go` - `Sense/server/app/admin/router/sense_operations_test.go` - `Sense/server/cmd/migrate/migration/version/*operations*` - `Sense/ui/src/views/sense/operations/**` - `Sense/ui/src/api/sense/operations*` - `Sense/ui/tests/unit/sense/operations*.spec.js` 禁止写入:`Brain/**`、`Bell/**`、`contracts/**`、根级构建/部署、`docs/**`、`wiki-docs.json`。需要共享路径时停止并转协调工单。 ## 文档影响 更新对应 Sense Wiki 业务规则、配置、运行、排错和验收页面;本地镜像由单一协调工单同步。 ## 验收标准 - [x] 设备和媒体期望/实际态及差异可定位 - [x] 显示退避、下次重试、认证失败、时间漂移和孤儿安全闸 - [x] 受控重试有权限、并发保护和审计 - [x] Brain 未安装时显示 unavailable 而非页面失败 - [x] Bell 不启动时运维中心完全可用 ## 验证方式 - 状态投影、对账、退避、并发与权限测试 - 前端概览、问题筛选、详情和操作反馈测试 - MediaMTX 退出/恢复、设备认证失败和时间漂移集成 smoke ## 风险与回退 错误重试或孤儿处置可能中断视频。默认只读诊断,写操作必须显式权限与安全闸;回退操作记录而非删除资源。 ## 协同需求摘要 本工单只实现 Sense 内部端口和夹具。涉及 Sense→Brain、Brain→Sense、Sense/Brain→Bell 的正式 schema、机器身份、部署或 E2E 时另建协调工单。
ila added the kind/taskproject/sensescope/independentpriority/p0 labels 2026-08-14 10:29:14 +08:00
Author
Owner

设计门禁:运维中心原型 v0.1 待审核

  • 原型路径(工作区外,不进入 Git):D:\OPC\yovision-visualizations\issue-74\sense-operations-center.html
  • 独立预览:D:\OPC\yovision-visualizations\issue-74\sense-operations-center-standalone.html
  • 版本:v0.1(2026-08-28)
  • 状态:待用户审核
  • 覆盖范围:GoAdmin 风格应用外壳;设备/媒体/可选本地推理运维概览;问题队列筛选;期望态、实际态与差异;认证失败、退避等待、时间漂移、孤儿安全闸、能力未安装;状态详情;权限/版本/并发校验提示;受控重试二次确认与审计提示;Brain 未安装降级;不向 Bell 投递运维异常;不提供自动删除。
  • 验证:离线渲染成功;Playwright 检查桌面和 375px 窄屏无横向溢出;详情与受控重试确认交互可用;控制台 0 error / 0 warning。
  • 设计原则:复用 go-admin-ui 的应用外壳与 Element Plus 信息架构;面向网管/非技术运维人员,使用问题—差异—下一步动作表达,避免暴露内部实现。

正式实施门禁:需同时满足(1)用户确认本原型版本;(2)前置工单 #73 完成功能验收。当前不创建实现分支、不修改生产代码。

## 设计门禁:运维中心原型 v0.1 待审核 - 原型路径(工作区外,不进入 Git):`D:\OPC\yovision-visualizations\issue-74\sense-operations-center.html` - 独立预览:`D:\OPC\yovision-visualizations\issue-74\sense-operations-center-standalone.html` - 版本:v0.1(2026-08-28) - 状态:待用户审核 - 覆盖范围:GoAdmin 风格应用外壳;设备/媒体/可选本地推理运维概览;问题队列筛选;期望态、实际态与差异;认证失败、退避等待、时间漂移、孤儿安全闸、能力未安装;状态详情;权限/版本/并发校验提示;受控重试二次确认与审计提示;Brain 未安装降级;不向 Bell 投递运维异常;不提供自动删除。 - 验证:离线渲染成功;Playwright 检查桌面和 375px 窄屏无横向溢出;详情与受控重试确认交互可用;控制台 0 error / 0 warning。 - 设计原则:复用 go-admin-ui 的应用外壳与 Element Plus 信息架构;面向网管/非技术运维人员,使用问题—差异—下一步动作表达,避免暴露内部实现。 正式实施门禁:需同时满足(1)用户确认本原型版本;(2)前置工单 #73 完成功能验收。当前不创建实现分支、不修改生产代码。
Author
Owner

原型 v0.1 审核通过(2026-08-28)

用户明确回复:#74 原型 v0.1通过审核。

  • 确认人:用户
  • 确认时间:2026-08-28(Asia/Shanghai)
  • 覆盖范围:GoAdmin 外壳、设备/媒体/可选本地推理概览、问题筛选、期望态/实际态/差异、认证失败、退避、时间漂移、孤儿安全闸、详情、受控重试确认与审计提示、Brain/Bell 独立边界
  • 结论:设计门禁通过,正式实现必须保持 v0.1 的页面结构、状态、权限、安全闸和产品边界。
## 原型 v0.1 审核通过(2026-08-28) 用户明确回复:`#74 原型 v0.1通过审核`。 - 确认人:用户 - 确认时间:2026-08-28(Asia/Shanghai) - 覆盖范围:GoAdmin 外壳、设备/媒体/可选本地推理概览、问题筛选、期望态/实际态/差异、认证失败、退避、时间漂移、孤儿安全闸、详情、受控重试确认与审计提示、Brain/Bell 独立边界 - 结论:设计门禁通过,正式实现必须保持 v0.1 的页面结构、状态、权限、安全闸和产品边界。
Author
Owner

开始实施(2026-08-28)

  • 前置:#67、#68、#73 均已验收关闭;允许开始正式实现
  • 分支基线:当前 dev
  • 主 agent:Sense agent
  • 精确写路径已按当前 GoAdmin 派生目录纠正:Sense/server/app/sense/operations/**、Sense/server/app/admin/router/sense_operations*.go、Sense/server/cmd/migrate/migration/version/*operations*、Sense/ui/src/views/sense/operations/**、Sense/ui/src/api/sense/operations*、对应前端测试。原正文不存在的 Sense/server/database/migrations/ 与泛化 Sense/tests/operations/ 被替换,不改变功能范围。
  • 冻结 go-admin-doc:docs/intro/advanced/router.md、api.md、service.md;沿用 Router 注册、JWT、Casbin、PermissionAction、API/Service 分层和 GoAdmin 响应封装
  • UI:复用 BasicLayout、Element Plus Card/Alert/Form/Table/Pagination/Dialog/Tag/MessageBox、Axios 与权限按钮;不新增公共组件,因为现有通用组件足够
  • 默认模块:不新增演示/无关管理入口;只增加“运维中心”菜单以及 list/detail/retry 权限
  • 技术设计:只读聚合现有设备、接入结果和媒体路由表;本地推理用内部适配器状态表示,未配置时为 unavailable;受控重试使用对象版本 CAS 和在途状态防重,并写脱敏系统操作审计;孤儿对象没有删除动作
  • 独立边界:不读取 Brain/Bell 数据库,不引入跨项目 schema,不向 Bell 发送运维异常
  • 文档:完成后更新 Sense Wiki;按工单约束不直接修改共享 docs/**。
## 开始实施(2026-08-28) - 前置:#67、#68、#73 均已验收关闭;允许开始正式实现 - 分支基线:当前 `dev` - 主 agent:Sense agent - 精确写路径已按当前 GoAdmin 派生目录纠正:`Sense/server/app/sense/operations/**`、`Sense/server/app/admin/router/sense_operations*.go`、`Sense/server/cmd/migrate/migration/version/*operations*`、`Sense/ui/src/views/sense/operations/**`、`Sense/ui/src/api/sense/operations*`、对应前端测试。原正文不存在的 `Sense/server/database/migrations/` 与泛化 `Sense/tests/operations/` 被替换,不改变功能范围。 - 冻结 go-admin-doc:`docs/intro/advanced/router.md`、`api.md`、`service.md`;沿用 Router 注册、JWT、Casbin、PermissionAction、API/Service 分层和 GoAdmin 响应封装 - UI:复用 `BasicLayout`、Element Plus Card/Alert/Form/Table/Pagination/Dialog/Tag/MessageBox、Axios 与权限按钮;不新增公共组件,因为现有通用组件足够 - 默认模块:不新增演示/无关管理入口;只增加“运维中心”菜单以及 list/detail/retry 权限 - 技术设计:只读聚合现有设备、接入结果和媒体路由表;本地推理用内部适配器状态表示,未配置时为 unavailable;受控重试使用对象版本 CAS 和在途状态防重,并写脱敏系统操作审计;孤儿对象没有删除动作 - 独立边界:不读取 Brain/Bell 数据库,不引入跨项目 schema,不向 Bell 发送运维异常 - 文档:完成后更新 Sense Wiki;按工单约束不直接修改共享 `docs/**`。
Author
Owner

流程记录:PR #118 创建后发现描述中的自动关闭关键词可能导致用户验收前关闭工单。Gitea MCP 不支持编辑 PR,本次仅对 PR 描述更新回退 Gitea API,将其改为 Refs #74;凭据仍只从项目安全环境读取,未写入仓库、工单或输出。API 首次写入受 PowerShell 编码影响出现中文问号,随后使用 UTF-8 字节重写并通过 MCP 在线回读确认。

流程记录:PR #118 创建后发现描述中的自动关闭关键词可能导致用户验收前关闭工单。Gitea MCP 不支持编辑 PR,本次仅对 PR 描述更新回退 Gitea API,将其改为 `Refs #74`;凭据仍只从项目安全环境读取,未写入仓库、工单或输出。API 首次写入受 PowerShell 编码影响出现中文问号,随后使用 UTF-8 字节重写并通过 MCP 在线回读确认。
Author
Owner

实现完成,待用户验收(2026-08-28)

最终差异

  • 后端:新增只读运维状态投影,聚合既有设备、接入结果和媒体路由,不建立第二套状态表;提供列表、详情和受控重试 API。
  • 状态:展示期望态、实际态、差异、建议动作、退避时间、认证失败、时间漂移、孤儿安全闸和本地推理 unavailable;所有问题标记为 Sense 运维事实,不等同 Bell Alert。
  • 重试:设备使用版本 CAS 取得在途所有权并复用 admission Probe;媒体使用 CAS 写入 retry_pending,由既有 MediaMTX 对账循环消费;孤儿和未安装能力不可重试、不可删除。
  • 权限/审计:viewer 只读;implementation_operator、site_admin 可受控重试;列表、详情、重试成功/失败均写脱敏 sys_opera_log。
  • 前端:复用 GoAdmin BasicLayout 与 Element Plus Card/Alert/Form/Table/Pagination/Dialog/Tag/MessageBox、Axios 和权限按钮;没有新增公共组件或无关入口。
  • 边界:不读取 Brain/Bell 数据库,不定义共享 schema,不向 Bell 发送运维异常。

真实验证

  • 后端 go test ./...、go test -race ./app/sense/operations、go vet ./...、go build ./...:通过。
  • 前端 lint:0 error,32 条既有上游 warning;24 suites / 59 tests:通过;production legacy/module build:通过,保留既有 Sass、codemirror 和包体积 warning。
  • python dev_scripts/harness.py check --strict:通过;仓库 48 项 unittest:通过;git diff --cached --check:通过。
  • 合成状态 smoke:认证失败、时间漂移、媒体退避、孤儿、本地推理 unavailable、筛选分页、详情、同步设备重试、媒体排队重试、版本/在途防重、审计:通过;Brain/Bell 未启动。
  • MediaMTX v1.19.3:现有集成测试首次因本机常驻实例占用默认 UDP 8000/MoQ 8892 未就绪;未停止用户常驻服务。随后使用独立 TCP/UDP/MoQ 端口执行启动 → API ready → 停止不可达 → 重启 ready smoke:通过,并停止测试进程。诊断产生的临时自签名 key/cert 已删除,未提交。

未验证

  • 本机 127.0.0.1:5432 未监听,TestOperationsMigrationOnPostgres 已实现但本轮明确 skip;不能声称真实 PostgreSQL 迁移通过。
  • 未使用真实摄像头、客户数据或生产环境执行 ONVIF 重探。

Git

  • 实现提交:184f101a86cb52f61a2bb0feb21c055d01ab7a4b
  • PR:#118
  • 合入 dev:debf662138fb48b8bda440482fcfaab823986b42
  • 本地已回到干净 dev;工单保持 OPEN / 待验收。

文档影响

已在线更新并回读:

  • Product-Requirements:d9b861c2681a0fb9d3db41396c6080c90442a5cb
  • Business-Rules-and-Glossary:e4a2f95f67f448ca2feba0ffae4f9145ef3969dd
  • Architecture-and-Code-Map:aa2262eef7802204afd5f95af973af047ab5627b
  • Local-Development-and-Verification:01e3a6d7f823fe5fd71292435ffefe46f923985d

按工单约束未直接修改共享 docs/**。python dev_scripts/harness.py sync --check 已真实执行,但本地脚本凭据返回 401,匿名回退随后超时;Gitea MCP 在线回读四页均成功。核心镜像需由具备有效同步凭据的单一协调工单处理。

## 实现完成,待用户验收(2026-08-28) ### 最终差异 - 后端:新增只读运维状态投影,聚合既有设备、接入结果和媒体路由,不建立第二套状态表;提供列表、详情和受控重试 API。 - 状态:展示期望态、实际态、差异、建议动作、退避时间、认证失败、时间漂移、孤儿安全闸和本地推理 unavailable;所有问题标记为 Sense 运维事实,不等同 Bell Alert。 - 重试:设备使用版本 CAS 取得在途所有权并复用 admission Probe;媒体使用 CAS 写入 retry_pending,由既有 MediaMTX 对账循环消费;孤儿和未安装能力不可重试、不可删除。 - 权限/审计:viewer 只读;implementation_operator、site_admin 可受控重试;列表、详情、重试成功/失败均写脱敏 sys_opera_log。 - 前端:复用 GoAdmin BasicLayout 与 Element Plus Card/Alert/Form/Table/Pagination/Dialog/Tag/MessageBox、Axios 和权限按钮;没有新增公共组件或无关入口。 - 边界:不读取 Brain/Bell 数据库,不定义共享 schema,不向 Bell 发送运维异常。 ### 真实验证 - 后端 `go test ./...`、`go test -race ./app/sense/operations`、`go vet ./...`、`go build ./...`:通过。 - 前端 lint:0 error,32 条既有上游 warning;24 suites / 59 tests:通过;production legacy/module build:通过,保留既有 Sass、codemirror 和包体积 warning。 - `python dev_scripts/harness.py check --strict`:通过;仓库 48 项 unittest:通过;`git diff --cached --check`:通过。 - 合成状态 smoke:认证失败、时间漂移、媒体退避、孤儿、本地推理 unavailable、筛选分页、详情、同步设备重试、媒体排队重试、版本/在途防重、审计:通过;Brain/Bell 未启动。 - MediaMTX v1.19.3:现有集成测试首次因本机常驻实例占用默认 UDP 8000/MoQ 8892 未就绪;未停止用户常驻服务。随后使用独立 TCP/UDP/MoQ 端口执行启动 → API ready → 停止不可达 → 重启 ready smoke:通过,并停止测试进程。诊断产生的临时自签名 key/cert 已删除,未提交。 ### 未验证 - 本机 127.0.0.1:5432 未监听,`TestOperationsMigrationOnPostgres` 已实现但本轮明确 skip;不能声称真实 PostgreSQL 迁移通过。 - 未使用真实摄像头、客户数据或生产环境执行 ONVIF 重探。 ### Git - 实现提交:`184f101a86cb52f61a2bb0feb21c055d01ab7a4b` - PR:#118 - 合入 `dev`:`debf662138fb48b8bda440482fcfaab823986b42` - 本地已回到干净 `dev`;工单保持 OPEN / 待验收。 ### 文档影响 已在线更新并回读: - Product-Requirements:`d9b861c2681a0fb9d3db41396c6080c90442a5cb` - Business-Rules-and-Glossary:`e4a2f95f67f448ca2feba0ffae4f9145ef3969dd` - Architecture-and-Code-Map:`aa2262eef7802204afd5f95af973af047ab5627b` - Local-Development-and-Verification:`01e3a6d7f823fe5fd71292435ffefe46f923985d` 按工单约束未直接修改共享 docs/**。`python dev_scripts/harness.py sync --check` 已真实执行,但本地脚本凭据返回 401,匿名回退随后超时;Gitea MCP 在线回读四页均成功。核心镜像需由具备有效同步凭据的单一协调工单处理。
Author
Owner

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

  • 用户明确指令:#72、#74 验收通过
  • 结论:#74 验收通过,状态更新为“已完成”并关闭。
  • 实现提交:184f101a86cb52f61a2bb0feb21c055d01ab7a4b
  • PR:#118;合入 dev:debf662138fb48b8bda440482fcfaab823986b42
  • 已知验证边界保持不变:未在真实 PostgreSQL、真实摄像头/MediaMTX 故障注入环境完成现场验证;相应自动化与合成验证结果已在最终证据中披露,不阻止本次人工验收结论。
  • 文档影响:验收本身未产生新的长期事实,不重复更新 Wiki,也不创建任务归档。
## 用户验收通过(2026-08-28) - 用户明确指令:`#72、#74 验收通过` - 结论:#74 验收通过,状态更新为“已完成”并关闭。 - 实现提交:`184f101a86cb52f61a2bb0feb21c055d01ab7a4b` - PR:#118;合入 `dev`:`debf662138fb48b8bda440482fcfaab823986b42` - 已知验证边界保持不变:未在真实 PostgreSQL、真实摄像头/MediaMTX 故障注入环境完成现场验证;相应自动化与合成验证结果已在最终证据中披露,不阻止本次人工验收结论。 - 文档影响:验收本身未产生新的长期事实,不重复更新 Wiki,也不创建任务归档。
ila closed this issue 2026-08-28 11:13:29 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#74