Files
yovision/docs/current-state.md
T
QiuSW 5a82035cc3
Harness governance / validate (pull_request) Has been cancelled
docs: define T-019 event ingress
2026-08-11 15:03:20 +08:00

12 KiB
Raw Blame History

当前实现状态

快照日期:2026-08-11。只记录仓库现实与 blocker;任务实时状态到 Gitea Issue 查看。

当前阶段

  • 阶段:M0 指定摄像头型号准入、M1“一实机 + 四合成源”软件闭环和 M2 本地 16 路批量收敛/稳定基线已通过;M3 已建立 Bell 不可变事件存储、Sense→Bell 全局审计 relay 及 Brain 单路匿名区域事件工程原型。客户网络尚未提供,WireGuard T-013 后置,五条独立真实上游和生产 SLA 仍未验收。
  • 生产代码:Sense 已包含可构建进程、SQLite/PostgreSQL repository、Site/Area 准入、设备操作 Outbox、可选签名 relay、标准 ONVIF SOAP/WS-Security adapter、凭据引用、MediaMTX 生成客户端、Control API v1、对账/探活、数据库租约、孤儿只读扫描/受控命令、低基数指标和可重复 16 路容量脚本;Bell 已包含事件 v0.1 校验/不可变存储、append-only outcome,以及只服务 Sense 审计的最小 bell-api 和全局审计 repository。Brain 已包含单路 source/detector/track/zone-entry 流水线和回环可视化页,但仍没有生产模型/GPU pipeline、Brain 事件 ingress、公共管理服务/JWT、规则/Alert 或正式 Web/H5。
  • 默认容量:16 路;单站点本阶段上限 128 路,必须横向分片。

仓库现实

  • Sense/ 已有 Go module 与 cmd/sense-api;Bell/ 已有事件域 Go module 和最小 cmd/bell-api 内部审计 receiver;Brain/ 已有 Python 3.10 单路工程原型、19 项单元/HTTP/UI 契约测试和 docs/design/brain/index.html 自包含页面。Bell/Sense migration 统一位于根目录 deploy/postgres/。
  • Sense 设备模型使用 modality + capabilities,SQLite 执行 v1 migration;视频配额默认 16、允许 1~128,17/128/129、新增/启用和“降低配额不关闭已有流”均有测试。
  • T-009 冻结 PostgreSQL 17.10 和 pgx/v5 v5.10.0,实现 bell/sense schema、NOLOGIN 权限角色、Bell Site 版本 trigger、bell.site_quota_v1 和 Sense PostgreSQL repository;同站点并发准入用事务级 advisory lock,配额缺失/越界/版本回退时失败关闭且不改变已有流。
  • T-010 增量实现 bell.areas、bell.area_policy_v1、Area 版本观察和 sense.device_operation_outbox;non_imaging_only 拒绝成像设备创建/启用,失败不改变已有设备。设备创建/期望态受理与脱敏 Outbox 同事务,相同期望态不增加 generation 但仍审计。
  • Windows 隔离测试使用 D:\pgsql17\bin 启动随机回环端口临时集群,001~015 migration 可重放;Sense Outbox fencing、Bell event/global-audit repository、nonce 收据、权限、幂等冲突与不可变性测试通过后自动清理,现有 D:\pgsql17\data 和 5432 服务未被读取、停止或修改。
  • T-015 冻结 Bell Go 1.26.5、JSON Schema v6.0.2 和 ULID v2.1.2;Bell 拒绝上游自报平台 ID,在内部 candidate 组装后执行冻结 v0.1 schema 与六项语义断言。bell_runtime 只允许追加/读取 bell.events、bell.event_outcomes;Brain transport、整数事件 ID 与现有文本逻辑 ID 的跨系统映射、公共 API 和生产隐私 resolver 仍未冻结,不能把内部 factory 当成已上线入口。
  • T-016 冻结 sense-audit-relay-v1:每批 1~100 项、1 MiB、10 秒 deadline、300 秒时钟窗、600 秒 nonce 收据、30 秒数据库 lease、1~300 秒退避。Sense 使用 FOR UPDATE SKIP LOCKED 和 fencing token;Bell constant-time 校验 HMAC,逐项返回 accepted/duplicate/rejected,并把全局事实追加到不可变 bell.audit_events。relay 默认关闭,非回环两端必须 HTTPS/TLS,key 只从仓库外文件读取。
  • T-017 冻结的只是工程原型:Python 3.10.11、NumPy 1.26.4、OpenCV 4.9.0.80;默认 2 FPS 合成 fixture,可选从仓库外文件读取 MediaMTX/RTSP。合成框不是模型输出,HOG/SVM 不是生产 detector,100 项内存事件环不是可靠投递;候选不含 Bell 平台 ID。
  • T-018 Sense 回环工程控制台已通过项目负责人产品验收:默认关闭并强制 Sense/MediaMTX 播放端显式回环,直接读取 Control API v1 的设备、配额、期望态/实际态/收敛事实;设备 cursor 每页 16 项,只有成像、启用、在线且已收敛的设备可选,最多 4 路按需嵌入 MediaMTX WebRTC 页面。token 只驻留页面内存,刷新即丢失;该验收不包含录像/回放、非回环生产认证、真实 16 机或生产 SLA。
  • MediaMTX 固定为独立二进制 v1.19.3,官方 OpenAPI 已按 SHA-256 vendoring,并由固定 oapi-codegen v2.8.0 生成客户端;手写薄封装有 create/read/delete、幂等 ensure、探活和只返回名称的受限分页枚举测试。
  • T-003 对账进度与指数退避持久化,覆盖取消和 SQLite 重启恢复;T-006 增加真实 ONVIF adapter、RTSP router、实验室播种/状态工具、故障代理和五路自动验收。T-012 的普通调和不枚举孤儿;独立 PostgreSQL 扫描默认只报告,未知归属永不删除。
  • T-006 正式使用 1 台准入实机和 4 个独立合成 publisher 连续观察 1806.6 s / 180 次采样,四类恢复均通过,最大与最终 unconverged 均为 0;详细证据见 docs/research/sense-5-stream-integration.md。
  • T-014 正式使用隔离 PostgreSQL、真实 Control API、两套 MediaMTX 和 16 个独立低码率合成 publisher,完成 17 路配额拒绝、三轮 16 → 0 → 16 批量收敛和固定四路故障恢复;稳定观察 1800.1 s / 180 次采样,最大与最终 unconverged 均为 0、最终在线 Path 16、帧错误 0。证据见 docs/research/sense-16-stream-capacity.md;不外推到真实 16 机、网络、录像、AI/GPU、64/128 路或生产 SLA。
  • docs/raw/01~08 已记录需求、分析、方案、客户场景、事件比对和三系统职责。
  • docs/raw/contracts/event-v0.1.schema.json 已冻结,并有多份示例与语义说明。
  • docs/contracts/sense-control-v1.openapi.json 的 7 个站点作用域/operation endpoint 已由 T-011 实现;sense-audit-relay-v1.openapi.json 已由 T-016 实现。默认 SQLite 只暴露运维探针与低基数 /metrics,不注册业务路由或 relay;Bell 管理服务与 JWT/OIDC 尚未实现。
  • T-012 把 PostgreSQL schema 提升到 v5:due row 用数据库时钟、FOR UPDATE SKIP LOCKED、逐项续租和 fencing token 协调;MediaMTX Path 历史归属、15 分钟孤儿快照、最多 10%/128 项安全闸、无 bypass 的本地处置命令及 /metrics 已实现。SQLite 明确保留单实例开发语义。
  • harness coding 文档、上下文清单、Gitea Issue/PR 模板和治理脚本已接入。
  • Gitea 已初始化 12 个协作标签;status/waiting 用于依赖或外部条件未满足的未领取任务,实时可领取状态必须从 Gitea 查询,不在本文复制。
  • T-002 已关闭架构影响型问题:首期 S2 民办寄宿学校、客户侧私有部署、ONVIF/RTSP、NVIDIA 主路径、自研 Bell、Web/H5 与客户侧证据存储等边界已批准。
  • T-004 的 Sense/Bell 单文件交互原型已获产品确认;T-005 已归档 Claude 原稿并补录缺失评审文档,当前定稿与原始依据分开保存。
  • _reference/mibeenvr 为本地只读参考仓库,已被忽略;只允许 M0 实验与白名单借鉴。

当前可运行命令

Windows:

./init.ps1

该入口会下载锁定 Go module,运行三条治理验证、MediaMTX 客户端生成漂移检查、go test、go vet 和 go build。只启动 Sense:

go -C Sense run ./cmd/sense-api

Bell 事件域和内部审计 receiver 验证:

go -C Bell test ./...
go -C Bell vet ./...
go -C Bell build ./...

Brain 单路工程原型验证与启动:

python -m unittest discover -s Brain/tests -p "test_*.py" -v
python -m compileall -q Brain
python -m Brain.yovision_brain --source synthetic

跨平台直接验证:

python scripts/validate_agent_context.py
python -m unittest discover -s tests -p "test_*.py"
python scripts/validate_harness_governance.py

本机 PostgreSQL 17.10 隔离验证:

./scripts/test_postgres.ps1 -PgRoot D:\pgsql17

本机 16 路软件容量预检与正式验证:

./Sense/scripts/t014-capacity.ps1 -PgRoot D:\pgsql17 -PreflightOnly
./Sense/scripts/t014-capacity.ps1 -PgRoot D:\pgsql17 -OutputPath (Join-Path $env:TEMP 'yovision-t014-formal.json')

只有默认 30 分钟且输出 formal_eligible=true 的单次完整运行可作正式证据;-ObservationMinutes 1 只用于 smoke。

Sense 默认监听 127.0.0.1:8080,提供 /healthz、/readyz 运维探针和低基数 /metrics;探针不代表摄像头或 M1 里程碑健康。MediaMTX 获取、校验和独立启动方法见 Sense/README.md。

当前 blocker / 待确认

  • T-001 已完成一台 HIKVISION DS-2CD3321FD-IW1-T、硬件 0x0、固件 V5.5.61 build 180929 的 ONVIF/RTSP 指定基线准入;主/子码流、错误鉴权、三个 ONVIF 核心操作和时间漂移均有脱敏证据。项目负责人豁免了无法现场执行的三次真实断网恢复,该项没有原始时间线,单样机结论也不代表批次或多品牌兼容。
  • 后续本地开发统一使用现有一台 Hikvision IP Camera;T-006 已用该实机 + 4 条独立 FFmpeg 8.1.2 合成 RTSP 源完成五路软件闭环,不要求当前购买更多摄像头。
  • T-007 保留至少 5 条独立真实上游的客户现场门禁,可使用客户授权、借用或租赁设备;它不阻塞本地开发/M1 实验室出口,但继续阻塞生产试点和真实多路 SLA。
  • S2 真实生产试点的未成年人影像、公共安全视频法规适用性和最终留存政策仍需客户/法务确认,阻塞 M3 上线但不阻塞 M1 实验室骨架。
  • 人脸方向已延后至 M5 的 S4 成人园区候选试点;必要性/PIP 影响评估、单独同意与替代方式、合法底库来源和删除流程未完成,阻塞人脸能力上线。
  • 短信/语音具体供应商未选;生产前必须选定两条独立投递路径并验证故障切换。
  • 生产 Brain 的 Python/Savant/DeepStream 精确版本、目标硬件和 Bell 前端栈尚未冻结;T-017 的 Python/OpenCV 只适用于工程原型,不能外推为生产选择。Sense M1 的 Go、SQLite driver、MediaMTX、生成器及生成运行时版本已在 T-003 冻结,PostgreSQL/pgx 版本已在 T-009 冻结。
  • 本机现有 PostgreSQL 5432 实例使用 SCRAM 且当前开发进程没有管理员密码;T-009~T-016 不绕过认证,自动验收使用隔离临时集群。向共享/生产实例安装 migration 前仍需管理员私下提供专用数据库、最小权限登录角色、外部 Control API/relay key 文件、TLS 证书与备份方案。
  • 代码知识图谱在无业务代码阶段可能为空;工具不可用时使用 rg 处理文档与配置。

下一步

客户网络仍未提供,T-013 WireGuard 继续后置。T-018 Sense NVR 管理面已通过产品验收;当前执行 T-019,独立冻结并实现 Brain→Bell 业务事件身份、持久重试、认证和幂等 ingress。客户授权、借用或租赁条件具备后再执行 T-007 五条独立真实上游现场门禁;上述本地任务均不解除 T-007/T-013,也不形成真实多路、模型效果或生产 SLA 承诺。

已知风险

  • M0 临时 NVR 容易被误当生产基线,必须持续隔离。
  • 16 路默认值容易被写死,任务评审需专项搜索和测试边界值 17/128/129。
  • 未经真实硬件压测不能给出 GPU 路数承诺。
  • 合成 fixture 和 HOG 演示框容易被误读为生产 AI 效果;页面、日志和交付说明必须持续显示“非模型输出/非生产模型”,效果验收必须使用冻结模型、数据集和目标硬件。
  • Gitea 使用 HTTP;token 传输风险只在本机私有配置中接受,不把 token 或实例配置写入仓库。