[INT] 实现 Sense↔Brain 配置下发与运行状态 connector #152

Closed
opened 2026-08-29 21:04:54 +08:00 by ila · 6 comments
Owner

状态

已完成(2026-08-31,用户验收;PR #164 合入 dev@0e53e04e95253974a47fac691fc8aa0e2fd7b171)

基本信息

  • 类型:跨项目 connector
  • 主项目:YoVision
  • 主 agent:单一 coordination agent
  • 所属 Epic:#7
  • 所属 MVP:#156
  • 来源:#124 对 Sense→Brain 配置与 Brain→Sense 状态需求的汇总
  • 生产者/消费者:Sense→Brain 配置;Brain→Sense 运行状态
  • 前置:#148、#149、#151 均验收
  • 采用契约:source-config/v1、runtime-status/v1、machine-identity/transport v1

目标

以已冻结契约和机器身份实现双向 connector:Sense 发布期望配置,Brain 幂等应用;Brain 发布运行状态,Sense 保存只读运维投影。任一端断开不得破坏另一端核心能力。

范围

  • Sense 从内部 Device/Profile/Area 事实生成契约快照,不直接暴露数据库模型或摄像头凭据。
  • Brain 校验版本、幂等应用新 revision,并报告已应用 revision、健康/降级状态和稳定错误代码。
  • Sense 只投影最后已知状态和陈旧时间,不远程读取 Brain 数据库或缓存。
  • 实现超时、退避、可观测错误、correlation ID、重启恢复和安全停用开关。

非目标

不实现模型分发、远程 shell、任意命令、Brain 分片迁移、标准事件、Bell 接入、根级部署或 E2E。

精确 write_paths

  • Sense/server/app/sense/integration/brain_control/**
  • Sense/server/cmd/migrate/migration/version/*brain_runtime*
  • Brain/src/yovision_brain/integration/sense_control/**
  • Sense/tests/integration/brain_control/**
  • Brain/tests/integration/sense_control/**

禁止写入:Bell/**、未列出的产品目录、contracts/**、根级部署和 docs/**。

验收标准

  • Sense 配置 mapper 与 Brain consumer 通过冻结契约测试
  • revision 重放幂等,过期/未知主版本/错误 Profile/需重校准安全拒绝
  • Brain 状态正确投影到 Sense,并明确离线、陈旧、恢复和 revision 不一致
  • connector 断开或停用时 Sense/Brain 各自核心能力仍可运行
  • 不泄漏摄像头凭据、内部路径、用户会话或数据库结构
  • 重启、退避、超时和恢复有可复制测试

验证

Sense Go、Brain Python、双端契约测试、断线/恢复/重启/身份拒绝测试及写路径检查。

风险与回退

错误配置可能影响推理。使用 revision、完整快照校验和 last-known-good;回退停用 connector 并恢复上一已应用 revision,不跨库修数据。

设计与文档影响

无新 UI;复用 Sense 运维中心既有状态呈现。完成后更新 Architecture、Product-Requirements、Business-Rules、Deployment/Operations 和验证 Wiki。

## 状态 已完成(2026-08-31,用户验收;PR #164 合入 `dev@0e53e04e95253974a47fac691fc8aa0e2fd7b171`) ## 基本信息 - 类型:跨项目 connector - 主项目:YoVision - 主 agent:单一 coordination agent - 所属 Epic:#7 - 所属 MVP:#156 - 来源:#124 对 Sense→Brain 配置与 Brain→Sense 状态需求的汇总 - 生产者/消费者:Sense→Brain 配置;Brain→Sense 运行状态 - 前置:#148、#149、#151 均验收 - 采用契约:source-config/v1、runtime-status/v1、machine-identity/transport v1 ## 目标 以已冻结契约和机器身份实现双向 connector:Sense 发布期望配置,Brain 幂等应用;Brain 发布运行状态,Sense 保存只读运维投影。任一端断开不得破坏另一端核心能力。 ## 范围 - Sense 从内部 Device/Profile/Area 事实生成契约快照,不直接暴露数据库模型或摄像头凭据。 - Brain 校验版本、幂等应用新 revision,并报告已应用 revision、健康/降级状态和稳定错误代码。 - Sense 只投影最后已知状态和陈旧时间,不远程读取 Brain 数据库或缓存。 - 实现超时、退避、可观测错误、correlation ID、重启恢复和安全停用开关。 ## 非目标 不实现模型分发、远程 shell、任意命令、Brain 分片迁移、标准事件、Bell 接入、根级部署或 E2E。 ## 精确 write_paths - `Sense/server/app/sense/integration/brain_control/**` - `Sense/server/cmd/migrate/migration/version/*brain_runtime*` - `Brain/src/yovision_brain/integration/sense_control/**` - `Sense/tests/integration/brain_control/**` - `Brain/tests/integration/sense_control/**` 禁止写入:`Bell/**`、未列出的产品目录、`contracts/**`、根级部署和 `docs/**`。 ## 验收标准 - [x] Sense 配置 mapper 与 Brain consumer 通过冻结契约测试 - [x] revision 重放幂等,过期/未知主版本/错误 Profile/需重校准安全拒绝 - [x] Brain 状态正确投影到 Sense,并明确离线、陈旧、恢复和 revision 不一致 - [x] connector 断开或停用时 Sense/Brain 各自核心能力仍可运行 - [x] 不泄漏摄像头凭据、内部路径、用户会话或数据库结构 - [x] 重启、退避、超时和恢复有可复制测试 ## 验证 Sense Go、Brain Python、双端契约测试、断线/恢复/重启/身份拒绝测试及写路径检查。 ## 风险与回退 错误配置可能影响推理。使用 revision、完整快照校验和 last-known-good;回退停用 connector 并恢复上一已应用 revision,不跨库修数据。 ## 设计与文档影响 无新 UI;复用 Sense 运维中心既有状态呈现。完成后更新 Architecture、Product-Requirements、Business-Rules、Deployment/Operations 和验证 Wiki。
ila added the kind/taskproject/senseproject/brainpriority/p0scope/coordination labels 2026-08-29 21:04:54 +08:00
Author
Owner

开始实施(2026-08-31):前置依赖已全部验收。主 agent 分配独立协调 Agent,工作树 D:\OPC\yovision-wt-152,分支 feature/152-brain-control。严格限制为工单精确 write_paths;不修改 contracts/**、docs/**、根级部署或另一工单路径。完成后提交、推送、创建到 dev 的 PR 并回写真实测试证据,保持待验收。

开始实施(2026-08-31):前置依赖已全部验收。主 agent 分配独立协调 Agent,工作树 `D:\OPC\yovision-wt-152`,分支 `feature/152-brain-control`。严格限制为工单精确 write_paths;不修改 `contracts/**`、`docs/**`、根级部署或另一工单路径。完成后提交、推送、创建到 `dev` 的 PR 并回写真实测试证据,保持待验收。
Author
Owner

实现完成,转待验收(2026-08-31)

最终差异

  • Sense:credential-free source-config/v1 mapper、持久 revision、机器身份发送、超时/指数退避/停用开关/correlation ID。
  • Brain:严格版本/摘要/Profile/几何/状态校验,幂等持久应用、future effective 延迟原子切换、last-known-good 与安全重校准停用。
  • Brain→Sense:Brain 持久单调 sequence 生成 runtime-status/v1;Sense 持久只读投影并判断倒序、非法状态迁移、未来观测、90 秒 stale/offline、恢复及 revision mismatch。
  • #151 重放接口:Sense 使用自身 GORM 表、Brain 使用自身 SQLite,均原子消费 (principal,jti) 并覆盖进程重启;没有共享数据库。
  • 迁移:新增 Sense runtime projection、source revision、replay token 三张内部表。

提交与 PR

  • 提交:ce1778b47a3e3947ba490b24f8770909ce003288
  • PR:#164(feature/152-brain-control → dev,当前可合并)

真实验证

  • Brain 冻结环境:Python 3.11.15;connector 5 passed;全量 48 passed。
  • Sense go test ./...:全量通过。
  • Sense connector/migration 与独立集成模块:通过。
  • Sense connector、独立集成模块定向 go test -race:通过。
  • go vet(connector + migration):通过。
  • 冻结契约:source-config 11 passed;runtime-status 14 passed;machine-identity 10 passed。
  • python dev_scripts/harness.py check --strict、git diff --check:通过。
  • 秘密扫描:未发现凭据值;命中仅为敏感字段拒绝规则及测试内临时生成密钥变量。
  • 精确 write_paths 审计:通过;无 __pycache__/.pyc 纳入提交。

边界、未验证与文档

  • 未修改 Bell/**、contracts/**、docs/**、根级部署或其他未授权路径。
  • 未做真实双机 TLS/网络故障注入、PostgreSQL 实例集成和生产部署验证;留给后续 E2E/部署闭环。
  • 本实现改变长期架构/运维事实,按工单原计划验收后需要更新 Wiki;本并行实施任务遵照调度要求暂不修改 Wiki/docs。
  • 未创建任务归档。

工单保持开放,状态转为“待验收”,不合并 PR、不关闭工单。

## 实现完成,转待验收(2026-08-31) ### 最终差异 - Sense:credential-free `source-config/v1` mapper、持久 revision、机器身份发送、超时/指数退避/停用开关/correlation ID。 - Brain:严格版本/摘要/Profile/几何/状态校验,幂等持久应用、future effective 延迟原子切换、last-known-good 与安全重校准停用。 - Brain→Sense:Brain 持久单调 sequence 生成 `runtime-status/v1`;Sense 持久只读投影并判断倒序、非法状态迁移、未来观测、90 秒 stale/offline、恢复及 revision mismatch。 - #151 重放接口:Sense 使用自身 GORM 表、Brain 使用自身 SQLite,均原子消费 `(principal,jti)` 并覆盖进程重启;没有共享数据库。 - 迁移:新增 Sense runtime projection、source revision、replay token 三张内部表。 ### 提交与 PR - 提交:`ce1778b47a3e3947ba490b24f8770909ce003288` - PR:#164(`feature/152-brain-control` → `dev`,当前可合并) ### 真实验证 - Brain 冻结环境:Python 3.11.15;connector `5 passed`;全量 `48 passed`。 - Sense `go test ./...`:全量通过。 - Sense connector/migration 与独立集成模块:通过。 - Sense connector、独立集成模块定向 `go test -race`:通过。 - `go vet`(connector + migration):通过。 - 冻结契约:source-config `11 passed`;runtime-status `14 passed`;machine-identity `10 passed`。 - `python dev_scripts/harness.py check --strict`、`git diff --check`:通过。 - 秘密扫描:未发现凭据值;命中仅为敏感字段拒绝规则及测试内临时生成密钥变量。 - 精确 write_paths 审计:通过;无 `__pycache__`/`.pyc` 纳入提交。 ### 边界、未验证与文档 - 未修改 `Bell/**`、`contracts/**`、`docs/**`、根级部署或其他未授权路径。 - 未做真实双机 TLS/网络故障注入、PostgreSQL 实例集成和生产部署验证;留给后续 E2E/部署闭环。 - 本实现改变长期架构/运维事实,按工单原计划验收后需要更新 Wiki;本并行实施任务遵照调度要求暂不修改 Wiki/docs。 - 未创建任务归档。 工单保持开放,状态转为“待验收”,不合并 PR、不关闭工单。
Author
Owner

主审修订完成(2026-08-31)

  • 双端统一严格校验 X-Request-ID:^[A-Za-z0-9][A-Za-z0-9._:-]{15,127}$,即 16–128 字符,拒绝短值、换行/控制字符、非法字符与超长值。
  • Brain source-config/v1 consumer 补齐 extensions Schema:必须为 object;namespace 必须匹配 ^[A-Za-z][A-Za-z0-9.-]{0,127}$;每个 value 必须为 object;合法未知 namespace 保持忽略。
  • 修订提交(amend):82afce111f62cbb7518932d56682d533525130dd。

复验:Brain 冻结 Python 3.11.15 connector 14/14、全量 57/57;Sense 全量 go test ./... 通过,connector 定向 race/vet 通过,独立集成模块 race 通过;source-config 冻结契约 11/11;Harness strict、diff/write_paths/秘密审计通过。

## 主审修订完成(2026-08-31) - 双端统一严格校验 `X-Request-ID`:`^[A-Za-z0-9][A-Za-z0-9._:-]{15,127}$`,即 16–128 字符,拒绝短值、换行/控制字符、非法字符与超长值。 - Brain `source-config/v1` consumer 补齐 `extensions` Schema:必须为 object;namespace 必须匹配 `^[A-Za-z][A-Za-z0-9.-]{0,127}$`;每个 value 必须为 object;合法未知 namespace 保持忽略。 - 修订提交(amend):`82afce111f62cbb7518932d56682d533525130dd`。 复验:Brain 冻结 Python 3.11.15 connector 14/14、全量 57/57;Sense 全量 `go test ./...` 通过,connector 定向 race/vet 通过,独立集成模块 race 通过;source-config 冻结契约 11/11;Harness strict、diff/write_paths/秘密审计通过。
Author
Owner

更正:上一条主审修订评论中的完整提交哈希抄写有误;远端 PR #164 与本地实际提交均为 82afce1f81b98ee835f9bc49798cf48ffa880434。测试与修订内容不变。

更正:上一条主审修订评论中的完整提交哈希抄写有误;远端 PR #164 与本地实际提交均为 `82afce1f81b98ee835f9bc49798cf48ffa880434`。测试与修订内容不变。
Author
Owner

用户验收结论(2026-08-31):用户明确确认“#152 和 #153通过”,#152 功能与当前验收证据通过。按分支治理,现执行 PR #164 合入 dev;合并后关闭单元工单并更新 MVP #156。长期 Wiki/docs 镜像按验收闭环统一处理。

用户验收结论(2026-08-31):用户明确确认“#152 和 #153通过”,#152 功能与当前验收证据通过。按分支治理,现执行 PR #164 合入 `dev`;合并后关闭单元工单并更新 MVP #156。长期 Wiki/docs 镜像按验收闭环统一处理。
ila closed this issue 2026-08-31 15:41:54 +08:00
Author
Owner

长期文档闭环(2026-08-31):

  • 实现合并:#152 PR #164 → dev@0e53e04e95253974a47fac691fc8aa0e2fd7b171;#153 PR #165 → dev@130087a1ba12025fd90d69a7f6af373d2afcfb81
  • Wiki revisions:Product Requirements 2b110cd34439;Architecture b25498f58c69;Business Rules c0903448152d;Deployment/Operations fa7e2031338c;Local Verification 59f6eb5816b5;Troubleshooting fdd44bfe589d
  • 核心镜像提交:9055f2522cf08c2b711f512031dc66b938e2051a;PR #166 合入 dev@eb4e1a9ea1d671b942502c2d886d563527569111
  • 验证:sync --check、DevHarness strict、仓库单元测试 48/48、diff check 均通过。
  • 用户于 2026-08-31 明确验收 #152、#153。
长期文档闭环(2026-08-31): - 实现合并:#152 PR #164 → `dev@0e53e04e95253974a47fac691fc8aa0e2fd7b171`;#153 PR #165 → `dev@130087a1ba12025fd90d69a7f6af373d2afcfb81` - Wiki revisions:Product Requirements `2b110cd34439`;Architecture `b25498f58c69`;Business Rules `c0903448152d`;Deployment/Operations `fa7e2031338c`;Local Verification `59f6eb5816b5`;Troubleshooting `fdd44bfe589d` - 核心镜像提交:`9055f2522cf08c2b711f512031dc66b938e2051a`;PR #166 合入 `dev@eb4e1a9ea1d671b942502c2d886d563527569111` - 验证:`sync --check`、DevHarness strict、仓库单元测试 48/48、diff check 均通过。 - 用户于 2026-08-31 明确验收 #152、#153。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#152