docs(tasks): split T-003 from hardware validation
Harness governance / validate (push) Has been cancelled
Harness governance / validate (pull_request) Has been cancelled

This commit is contained in:
QiuSW
2026-08-04 14:57:30 +08:00
parent 58a0056b1b
commit bb1010c09f
3 changed files with 32 additions and 23 deletions
+24 -17
View File
@@ -1,11 +1,11 @@
---
id: T-003
title: 建立 Sense M1 接入骨架
title: 建立 Sense M1 无实机接入骨架
phase: 1
deps: [T-001, T-002]
deps: [T-002]
status: TODO
created: 2026-08-03
issue: null
issue: 3
context_ref: null
claim_branch: null
work_branch: null
@@ -14,6 +14,7 @@ write_paths:
- Sense/
- docs/03-tech-stack.md
- docs/api.md
- docs/06-tasks.md
- docs/current-state.md
- init.ps1
- init.sh
@@ -21,7 +22,7 @@ write_paths:
## 问题 / 背景
当前 `Sense/` 只有占位文件。M1 需要在不继承完整 MiBeeNvr 架构的前提下建立可持续演进的 Go 生产骨架,并正式引入 MediaMTX 数据面。
当前 `Sense/` 只有占位文件。M1 需要在不继承完整 MiBeeNvr 架构的前提下建立可持续演进的 Go 生产骨架,并正式引入 MediaMTX 数据面。T-001 的真实摄像头兼容性验证已由项目负责人暂缓,因此本任务只建立可由 fake ONVIF、MediaMTX 假服务和合成 RTSP 源验证的无实机骨架;不得据此宣称摄像头兼容、5 路实机验收、M0 出口或完整 M1 出口已经完成。
## 关联需求与交互(如适用)
@@ -31,40 +32,46 @@ write_paths:
## 方案
1. 冻结 Go、SQLite 和 MediaMTX 的精确版本,记录许可证与升级策略。
2. 建立 `cmd/sense-api` 与 `internal/onvif`、`store`、`mtx`、`reconcile`、`probe` 的最小目录和测试。
3. 从 MediaMTX 官方 OpenAPI 生成客户端,手写代码只放薄封装。
4. 设备台账先使用 SQLite,但 schema 语义与生产 PostgreSQL `sense` schema 保持一致。
5. 跑通 5 路自动建 path、探活和断线重建的可重复集成测试。
6. 将真实安装、验证和启动命令同步到标准入口与文档。
1. 冻结 Go、SQLite driver、MediaMTX 和 `oapi-codegen` 的精确版本,记录许可证、校验来源、升级策略与退出路线。
2. 建立 `cmd/sense-api` 与 `internal/onvif`、`store`、`mtx`、`reconcile`、`probe` 的最小目录、配置边界和测试;入口只绑定可信网络,日志不得泄露凭据或完整流地址。
3. 从锁定版本的 MediaMTX 官方 OpenAPI 可重复生成客户端,生成代码与手写薄封装分离;使用假 HTTP 服务验证创建、读取和删除 path 的请求/响应映射。
4. 以 port/adapter 隔离 ONVIF,提供确定性的 fake adapter 和脱敏 fixture,验证 profile、stream URI、校时、认证失败和超时的领域映射,但不伪造厂商兼容结论。
5. 设备台账先使用 SQLite migration,schema 语义与生产 PostgreSQL `sense` schema 保持一致;建模使用 `modality + capabilities`,配额默认 16、最大 128,并覆盖 17/128/129 边界。
6. 建立数据库期望态驱动的最小对账/探活循环,使用 fake ONVIF、MediaMTX 假服务和可选合成 RTSP 源验证幂等、退避、取消与重启恢复;本任务不接真实摄像头,也不实现孤儿删除。
7. 将真实安装、生成、验证、构建和启动命令同步到标准入口与文档;后续 T-006 再使用 T-001 白名单设备完成 5 路实机集成验收。
## 不可变约束
- 阈值 / 数值边界:验收 5 路;`site.max_video_channels` 默认 16、最大 128,必须测试 17/128/129 边界,不能把 5 或 16 写成架构上限。
- 阈值 / 数值边界:本任务不验收真实 5 路;`site.max_video_channels` 默认 16、最大 128,必须测试 17/128/129 边界,不能把 fake 数量、5 或 16 写成架构上限。
- 判定式 / 状态转换:数据库是期望态真相源;对账幂等、只收敛不跨系统回滚;配额不可用不影响已有流。
- 安全边界:不提交摄像头凭据;调试/MediaMTX 管理端口不暴露到非可信网络;孤儿删除暂不实现或必须有 10% 安全闸。
- 既有契约:M1 只动 Sense,不创建 Brain/Bell 业务代码;完整 MiBeeNvr 不进入依赖;MediaMTX 独立二进制。
## 验收要点
- 任务相关验证:`go test ./...`、`go vet ./...`、5 路集成 smoke、断线恢复测试,以及三条 harness 治理命令。
- 任务相关验证:`go test ./...`、`go vet ./...`、SQLite migration/配额边界、ONVIF fake、MediaMTX 假服务、对账幂等与重启恢复测试,以及三条 harness 治理命令。
- 完整门禁:公共 API、schema 或生成客户端变化时运行全部 Sense 测试和契约/迁移检查。
- 人工 / 设备验收:必需;使用 T-001 白名单中至少一款设备验证 5 路流程,记录 MediaMTX 与探活证据。
- 构建产物:Sense 二进制/镜像路径、生成命令和哈希在实施任务中冻结;本任务开工前补齐。
- 人工 / 设备验收:设备验收不适用且不得用模拟结果替代;维护者必须人工核对生成命令、版本/许可证与本地启动说明。真实摄像头和 5 路验收由 T-006 承担。
- 构建产物:冻结 Sense 二进制路径、MediaMTX 获取/校验方式、生成命令和版本信息;是否交付镜像若未在技术评审确定则不得自行扩展。
## 边界(不改什么)
不开发 Brain、Bell、正式管理端、规则引擎、人脸识别、64/128 路容量实现;不修改 `_reference/`。
不开发 Brain、Bell、正式管理端、规则引擎、人脸识别、真实摄像头兼容性、5 路实机验收或 64/128 路容量实现;不修改 `_reference/`,不把 MiBeeNvr 引入生产依赖。
## 协作约束
- 责任 Agent:由 dispatcher 分配。
- 唯一写入者:同责任 Agent。
- 委派:默认不启用;需要只读调研时结论先回填本文。
- Gitea:已预建候选 Issue #3,但依赖 T-001/T-002 均 DONE 前不回填映射、不加 `status/todo`、不得领取;进入可领取队列时再记录 Issue、`context_ref`、claim 和工作分支。
- Gitea:主 Issue 为 #3;本次重构合入默认分支并读回后才加入 `status/todo`。领取时再记录 `context_ref`、claim 和工作分支。
任何新增写路径先由 dispatcher 与活跃任务做前缀冲突检查。
## 执行记录
尚未领取,依赖未完成。
### 2026-08-04 无实机拆分
- 项目负责人决定暂缓 T-001,并批准继续推进 Sense 离线软件骨架。T-003 的开工依赖调整为仅依赖已完成的 T-002,但真实摄像头验证仍是后续集成门禁。
- 本任务收敛为 fake ONVIF、MediaMTX 假服务、SQLite 和可选合成 RTSP 可验证的生产骨架;不得用 mock 测试宣称 M0 或 M1 里程碑完成。
- 真实设备、5 路自动建 path、探活、断线恢复和 MediaMTX 证据拆到 T-006,依赖 T-001 与 T-003。
- 任务尚未领取;Issue #3 在本次规格合入默认分支前不进入 `status/todo`。