Files
yovision/docs/tasks/T-006.md
T
QiuSW 9567838045
Harness governance / validate (push) Has been cancelled
Harness governance / validate (pull_request) Has been cancelled
feat(sense): complete T-006 five-stream integration
2026-08-07 16:33:35 +08:00

100 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-006
title: 完成 Sense 单实机与五路混合源集成验收
phase: 1
deps: [T-001, T-003]
status: DONE
created: 2026-08-04
issue: 16
context_ref: 94ae2f00488bde184a9db4e5437232dfceb5f1bb
claim_branch: claims/T-006
work_branch: agent/codex/T-006
write_paths:
- docs/tasks/T-006.md
- Sense/
- docs/research/sense-5-stream-integration.md
- docs/current-state.md
---
## 问题 / 背景
T-003 只用 fake ONVIF 和 MediaMTX 假服务建立无实机骨架,不能证明指定海康实机基线可用或真实媒体路径能自动收敛。受当前硬件预算限制,M1 实验室出口改为使用 T-001 已批准的 1 台 Hikvision IP Camera 作为真实 ONVIF/RTSP 上游,再用至少 4 条可独立启停的合成 RTSP 上游补足 5 路,验证控制面、多路调和、探活和恢复。该结果是开发集成 smoke,不是五台真实设备或生产 SLA 证据。
## 关联需求与交互(如适用)
- 用户故事:US-001、US-002、US-007。
- 交互清单:无正式 UI;使用 Sense API、日志、指标和版本化实验记录验收。
- 前置产物:T-001 的 `docs/research/camera-compatibility.md` 与 T-003 的 Sense/MediaMTX 骨架、版本和启动命令。
## 方案
1. 使用 T-001 指定准入基线的 1 台真实海康摄像头,记录型号、硬件版本、固件、网络拓扑和主/子码流,但不记录密码或含凭据的完整 URI。
2. 使用 FFmpeg、GStreamer 或等价离线工具建立至少 4 条合成 RTSP 上游;每条必须有不同 source/path,并可单独启动、停止和注入故障。同一真实 RTSP URI 的重复连接、同一编码上游的 fan-out 或同一合成 publisher 的重复映射不增加独立源计数。
3. 通过 Sense 设备台账写入期望态,验证真实设备的 ONVIF profile/stream URI 映射,以及全部 5 路的 MediaMTX path 自动创建和健康状态;不允许人工修改 MediaMTX 配置冒充自动化成功。
4. 验证四类恢复:真实摄像头/网络短时离线、单条合成 publisher 停止/恢复、Sense 进程重启、MediaMTX 进程重启。每类都记录探活/退避期限、实际恢复时间、对账结果和失败证据。
5. 验证 5 路并行运行期间 path、reader/upstream、探活和数据库期望态一致;连续观察窗口至少 30 分钟,只作为 M1 实验室集成 smoke,不外推真实多设备故障隔离、16/64/128 路容量或生产 SLA。
6. 将可重复步骤、版本、合成源生成命令、脱敏结果、限制和结论写入 `docs/research/sense-5-stream-integration.md`;失败通道保留记录,不通过删除样本美化结果。
## 不可变约束
- 阈值 / 数值边界:至少 5 条同时在线的开发上游,其中 1 条来自 T-001 真实准入样机、至少 4 条为可独立故障注入的合成 RTSP 源,连续观察至少 30 分钟;重复上游不增加计数。默认 16、最大 128 的配额语义不得改变。本任务不验收真实 5 机或 16/64/128 路容量。
- 判定式 / 状态转换:数据库仍是期望态真相源;四类恢复均须在 T-003 冻结的探活/退避配置内自动重新收敛,`unconverged = 0`,不得靠人工改配置或重建数据库通过。
- 安全边界:只使用自购样机、无人物测试图案和隔离网络;证据中不得出现密码、完整 RTSP/ONVIF 凭据、可复用 token、真实客户地址或人物画面。
- 既有契约:MediaMTX 保持独立二进制,MiBeeNvr 不进入生产依赖;不得为通过某一厂商测试把 5、16 或厂商名称写死在业务逻辑中。
## 验收要点
- 任务相关验证:执行 T-003 冻结的全部 Sense 单测、vet、migration/契约检查;完成 1 实机 + 4 合成源的 5 路自动 path、健康、30 分钟观察和四类恢复矩阵;运行三条 harness 治理命令。
- 完整门禁:若为实机差异修改 ONVIF、MediaMTX、store、reconcile、probe 或公共 API,必须重跑全部 Sense 测试和完整五路混合源矩阵。
- 人工 / 设备验收:必需。实施/硬件负责人核对真实设备身份/固件、4 条合成源的独立启停命令、网络条件、原始时间线与脱敏证据;任何一条未通过则任务不得标记 `DONE`。
- 构建产物:记录实际 Sense 与 MediaMTX 二进制版本/哈希、配置模板、启动命令和证据文档;不提交摄像头配置秘密或媒体样本。
## 边界(不改什么)
不修改 Brain、Bell、规则/告警业务、正式管理 UI,不做真实 5 机或 16/64/128 路容量验收,不重新裁决 T-001 指定型号准入基线,不把失败源从证据中删除。
## 协作约束
- 责任 Agent:由 dispatcher 分配。
- 唯一写入者:同责任 Agent。
- 委派:默认不启用;现场人员可执行设备操作,但任务所有者必须核验并版本化脱敏证据。
- Gitea:主 Issue 为 #16;T-001、T-003 均为 `DONE` 前不得添加 `status/todo` 或领取。
任何新增写路径先由 dispatcher 与活跃任务做前缀冲突检查。
## 执行记录
### 2026-08-07 完成五路混合源验收
- 实现标准 ONVIF SOAP 1.2 / WS-Security adapter、`env://` 凭据解析、HTTP/RTSP router、NAT RTSP 重写,以及默认关闭的 RTSP query 兼容开关;凭据只进入进程环境和内存 URI,不写 SQLite 或证据。
- 增加 `sense-lab` 播种/脱敏状态工具、真实 RTSP 故障代理、4 路独立 FFmpeg publisher fixture 和一键集成脚本;MediaMTX runtime path 丢失会使观察代失效并自动触发重新对账。
- 正式使用 1 台 T-001 准入实机和 4 个独立合成 publisher:5 路初始收敛 `8.2 s`;真实网络恢复 `5.1 s`、单 publisher 恢复 `5.1 s`、Sense 重启恢复 `0.0 s`、MediaMTX 重启恢复 `2.1 s`,各阶段 `unconverged = 0`。
- 连续观察 `1806.6 s`、采样 180 次,`maximum_unconverged = 0`、`final_unconverged = 0`;自动配置 path 数为 5。结果、版本、失败记录和限制见 `docs/research/sense-5-stream-integration.md`。
- 该结论仅关闭 M1 单实机混合源 smoke;五条独立真实上游、真实多设备故障隔离与生产 SLA 仍由 T-007 验收,16/64/128 路容量不在本任务结论内。
### 2026-08-07 领取任务
- dispatcher `ila` 将任务分配给 `codex`;`context_ref` 为 `94ae2f00488bde184a9db4e5437232dfceb5f1bb`,claim 为 `claims/T-006`,工作分支为 `agent/codex/T-006`。
- 接受既有写路径:`docs/tasks/T-006.md`、`Sense/`、`docs/research/sense-5-stream-integration.md`、`docs/current-state.md`。
### 2026-08-04 任务定义
- 项目负责人批准将 T-003 拆成无实机软件骨架,并由本任务保留真实摄像头和 5 路 M1 集成门禁。
- 当前 T-001 暂缓、T-003 尚未领取,因此 T-006 仅建立规格,不进入可领取队列。
### 2026-08-04 上游准入范围更新(已由下一节替代)
- T-001 已按项目负责人决定收敛为一个指定型号/固件基线的一台样机准入;T-006 可以使用同一准入型号的设备,不再要求多个品牌。
- T-006 的 5 路门禁不随之降低:必须是 5 条独立真实上游,通常需要 5 台设备;同一摄像头或同一 RTSP URI 的复制连接不能计数。
### 2026-08-04 单实机开发策略
- 项目负责人确认无预算购买更多摄像头,后续本地开发统一使用现有 1 台 Hikvision IP Camera;精确型号/硬件/固件仍由 T-001 冻结,代码不得写死品牌或私有地址。
- T-006 改为 1 路真实准入样机 + 至少 4 路可独立启停的合成 RTSP 源,验证五路软件闭环;原“五条独立真实上游”现场证据移交 T-007,不再阻塞日常开发或 M1 实验室出口。
- 该变更替代上一节“需要五台真实设备”的约束,但不允许把同一摄像头/同一 RTSP URI 重复拉流冒充多个独立源。
### 2026-08-05 前置依赖解除
- T-001 已完成指定海康型号准入,T-003 已完成 Sense 无实机骨架;本任务的代码和设备依赖均已满足,可由 dispatcher 将 Gitea Issue #16 从 `status/waiting` 切换为 `status/todo`。
- T-001 的真实网络断开恢复由项目负责人豁免,没有产生三次原始恢复时间线;本任务不得继承该豁免,仍须按本任务方案独立完成真实摄像头/网络、合成 publisher、Sense 和 MediaMTX 四类恢复验证。