From bb1010c09ffc0806325a0beb6b7360f9795a986b Mon Sep 17 00:00:00 2001 From: QiuSW <105186638@qq.com> Date: Tue, 4 Aug 2026 14:57:30 +0800 Subject: [PATCH] docs(tasks): split T-003 from hardware validation --- docs/06-tasks.md | 5 +++-- docs/current-state.md | 9 +++++---- docs/tasks/T-003.md | 41 ++++++++++++++++++++++++----------------- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/docs/06-tasks.md b/docs/06-tasks.md index 561c1e5..6c52cf4 100644 --- a/docs/06-tasks.md +++ b/docs/06-tasks.md @@ -13,8 +13,9 @@ 出口:5 路自动建 path、探活、断线重建;使用 MediaMTX 生产数据面,完整 MiBeeNvr 不替代生产基线。 -- T-003:建立 Sense Go 脚手架、设备台账、ONVIF 与 MediaMTX 薄客户端。 -- 后续按 T-003 的基线拆分对账、探活、5 路集成与部署任务。 +- T-003:建立无需真实摄像头即可验证的 Sense Go 脚手架、设备台账、ONVIF port/fake、MediaMTX 生成客户端与薄封装;完成不代表 M0/M1 出口。 +- T-006:在 T-001 白名单与 T-003 骨架之上完成真实摄像头 5 路自动建 path、探活、断线恢复和 MediaMTX 集成验收。 +- T-001 暂缓期间可推进 T-003,但 T-006 和 M1 出口继续受真实设备证据阻塞。 ## M2:对账、多租户投影与 16 路全流程 diff --git a/docs/current-state.md b/docs/current-state.md index 11c7006..954636f 100644 --- a/docs/current-state.md +++ b/docs/current-state.md @@ -1,10 +1,10 @@ # 当前实现状态 -> 快照日期:2026-08-03。只记录仓库现实与 blocker;任务实时状态到 Gitea Issue 查看。 +> 快照日期:2026-08-04。只记录仓库现实与 blocker;任务实时状态到 Gitea Issue 查看。 ## 当前阶段 -- 阶段:M0 摄像头兼容性验证与需求定稿。 +- 阶段:M0 摄像头兼容性验证尚未完成;已批准并行推进不依赖真实摄像头的 M1 Sense 软件骨架,但不得提前宣称 M0/M1 出口完成。 - 生产代码:尚未开始。 - 默认容量:16 路;单站点本阶段上限 128 路,必须横向分片。 @@ -16,6 +16,7 @@ - harness coding 文档、上下文清单、Gitea Issue/PR 模板和治理脚本已接入。 - Gitea 已初始化 11 个协作标签;首批 Issue 已建立,实时可领取状态必须从 Gitea 查询,不在本文复制。 - T-002 已关闭架构影响型问题:首期 S2 民办寄宿学校、客户侧私有部署、ONVIF/RTSP、NVIDIA 主路径、自研 Bell、Web/H5 与客户侧证据存储等边界已批准。 +- T-004 的 Sense/Bell 单文件交互原型已获产品确认;T-005 已归档 Claude 原稿并补录缺失评审文档,当前定稿与原始依据分开保存。 - `_reference/mibeenvr` 为本地只读参考仓库,已被忽略;只允许 M0 实验与白名单借鉴。 ## 当前可运行命令 @@ -38,7 +39,7 @@ python scripts/validate_harness_governance.py ## 当前 blocker / 待确认 -- 尚未完成 3–5 款候选摄像头的 ONVIF/RTSP 实机矩阵和采购白名单。 +- T-001 已由项目负责人暂缓,尚未完成 3–5 款候选摄像头的 ONVIF/RTSP 实机矩阵和采购白名单;Issue 在硬件条件具备前移出可领取队列。 - S2 真实生产试点的未成年人影像、公共安全视频法规适用性和最终留存政策仍需客户/法务确认,阻塞 M3 上线但不阻塞 M1 实验室骨架。 - 人脸方向已延后至 M5 的 S4 成人园区候选试点;必要性/PIP 影响评估、单独同意与替代方式、合法底库来源和删除流程未完成,阻塞人脸能力上线。 - 短信/语音具体供应商未选;生产前必须选定两条独立投递路径并验证故障切换。 @@ -47,7 +48,7 @@ python scripts/validate_harness_governance.py ## 下一步 -从 Gitea 的 `status/todo` 工单中由 dispatcher 分配依赖已满足、编号最靠前且写路径不冲突的任务。下一项优先完成 T-001(摄像头兼容性矩阵);T-003 仍需等待 T-001,T-002 已满足。不要仅凭本文宣称领取成功。 +从 Gitea 的 `status/todo` 工单中由 dispatcher 分配依赖已满足、编号最靠前且写路径不冲突的任务。当前建议领取重构后的 T-003,先完成无实机 Sense 骨架;T-001 恢复后完成兼容性白名单,T-006 再执行真实摄像头 5 路集成验收。不要仅凭本文宣称领取成功。 ## 已知风险 diff --git a/docs/tasks/T-003.md b/docs/tasks/T-003.md index 2f2aa11..30ae555 100644 --- a/docs/tasks/T-003.md +++ b/docs/tasks/T-003.md @@ -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`。