[E2E] 验证三项目版本化契约与故障隔离闭环 #155

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

状态

已完成(2026-08-31;用户验收通过;PR #170 合入 dev@0276bce)

基本信息

  • 类型:跨项目端到端验收
  • 主项目:YoVision
  • 主 agent:单一 coordination agent
  • 所属 Epic:#7
  • 所属 MVP:#156
  • 来源:#124、Epic #7 阶段 3
  • 生产者:Sense/Brain
  • 消费者:Brain/Sense/Bell
  • 前置:#148、#149、#150、#151、#152、#153、#154 均验收
  • 契约事实源:上述冻结 v1 目录

目标

建立一条可复制、隔离且不依赖生产秘密的三项目 E2E:Sense 发布源/规则配置,Brain 应用并生成匿名事件,Sense 可靠 relay,Bell 幂等形成 Alert 并完成 ack/close;同时验证任一端离线时的独立运行与恢复。

范围

  • 使用临时 PostgreSQL、动态端口、随机机器身份和合成媒体/事件;不连接客户设备或生产服务。
  • 核对配置 revision、Brain 运行投影、匿名事件与证据降级、Sense Outbox、Bell Receipt/Event/Alert/ack/close。
  • 故障注入至少覆盖 Brain 离线、Bell 离线、身份错误、重复事件、同键冲突、证据不可用、进程重启和恢复补投。
  • 测试结束停止且只停止所属进程,清理临时目录,并检查 Git 工作区和日志无秘密。
  • 三端原有独立 E2E 继续通过,根级 E2E 不替代单端验收。

非目标

不验证真实 GPU/生产模型、真实摄像头、真实通知供应商、生产迁移、16 路长稳或客户现场效果;发现产品缺陷时另建单,不在测试工单顺手修改业务代码。

精确 write_paths

  • tests/e2e/coordination/**
  • scripts/e2e/coordination/**

禁止写入:Sense/**、Brain/**、Bell/**、contracts/**、部署实现和 docs/**。

验收标准

  • 正常链路完成配置 → Brain 应用/状态 → 匿名事件 → Outbox → Bell Receipt/Event/Alert → ack/close
  • 同键重放幂等,同键异载荷冲突,重启后事实和状态保持
  • Brain/Bell 离线分别不阻断 Sense 核心能力;Bell 恢复后可靠补投
  • 任一产品单独启动和既有独立 E2E 仍通过
  • 身份错误、证据降级、超时和未知主版本返回稳定且不泄密
  • 临时进程/目录清理、工作区 clean、日志与包秘密扫描通过
  • 明确披露真实 GPU、真机、16 路和生产环境未验证边界

验证

单一 PowerShell 入口执行契约、API、进程、数据库、故障注入和清理检查;另运行三端既有独立测试及 DevHarness strict 检查。

风险与回退

E2E 可能误连业务服务或残留进程。强制拒绝默认端口/非临时数据库、随机凭据、进程归属和 finally 清理;回退删除测试入口,不修改产品事实或生产数据。

设计与文档影响

不新增 UI,复用已确认页面。完成后把真实命令、故障边界和未验证项更新到 Deployment-and-Operations、Local-Development-and-Verification 和 Troubleshooting Wiki。

## 状态 已完成(2026-08-31;用户验收通过;PR #170 合入 `dev@0276bce`) ## 基本信息 - 类型:跨项目端到端验收 - 主项目:YoVision - 主 agent:单一 coordination agent - 所属 Epic:#7 - 所属 MVP:#156 - 来源:#124、Epic #7 阶段 3 - 生产者:Sense/Brain - 消费者:Brain/Sense/Bell - 前置:#148、#149、#150、#151、#152、#153、#154 均验收 - 契约事实源:上述冻结 v1 目录 ## 目标 建立一条可复制、隔离且不依赖生产秘密的三项目 E2E:Sense 发布源/规则配置,Brain 应用并生成匿名事件,Sense 可靠 relay,Bell 幂等形成 Alert 并完成 ack/close;同时验证任一端离线时的独立运行与恢复。 ## 范围 - 使用临时 PostgreSQL、动态端口、随机机器身份和合成媒体/事件;不连接客户设备或生产服务。 - 核对配置 revision、Brain 运行投影、匿名事件与证据降级、Sense Outbox、Bell Receipt/Event/Alert/ack/close。 - 故障注入至少覆盖 Brain 离线、Bell 离线、身份错误、重复事件、同键冲突、证据不可用、进程重启和恢复补投。 - 测试结束停止且只停止所属进程,清理临时目录,并检查 Git 工作区和日志无秘密。 - 三端原有独立 E2E 继续通过,根级 E2E 不替代单端验收。 ## 非目标 不验证真实 GPU/生产模型、真实摄像头、真实通知供应商、生产迁移、16 路长稳或客户现场效果;发现产品缺陷时另建单,不在测试工单顺手修改业务代码。 ## 精确 write_paths - `tests/e2e/coordination/**` - `scripts/e2e/coordination/**` 禁止写入:`Sense/**`、`Brain/**`、`Bell/**`、`contracts/**`、部署实现和 `docs/**`。 ## 验收标准 - [x] 正常链路完成配置 → Brain 应用/状态 → 匿名事件 → Outbox → Bell Receipt/Event/Alert → ack/close - [x] 同键重放幂等,同键异载荷冲突,重启后事实和状态保持 - [x] Brain/Bell 离线分别不阻断 Sense 核心能力;Bell 恢复后可靠补投 - [x] 任一产品单独启动和既有独立 E2E 仍通过 - [x] 身份错误、证据降级、超时和未知主版本返回稳定且不泄密 - [x] 临时进程/目录清理、工作区 clean、日志与包秘密扫描通过 - [x] 明确披露真实 GPU、真机、16 路和生产环境未验证边界 ## 验证 单一 PowerShell 入口执行契约、API、进程、数据库、故障注入和清理检查;另运行三端既有独立测试及 DevHarness strict 检查。 ## 风险与回退 E2E 可能误连业务服务或残留进程。强制拒绝默认端口/非临时数据库、随机凭据、进程归属和 finally 清理;回退删除测试入口,不修改产品事实或生产数据。 ## 设计与文档影响 不新增 UI,复用已确认页面。完成后把真实命令、故障边界和未验证项更新到 Deployment-and-Operations、Local-Development-and-Verification 和 Troubleshooting Wiki。
Author
Owner

开始实施(2026-08-31):从 dev@55b12df373b2396f883415322788eb5d5490a05c 建立 feature/155-coordination-e2e。严格只写 tests/e2e/coordination/** 与 scripts/e2e/coordination/**;先复用 #148–#154 已验收契约、connector、机器身份和部署入口形成隔离临时 E2E,不修改产品/契约/部署实现。若发现产品缺陷将另建单,不混入本工单。

开始实施(2026-08-31):从 `dev@55b12df373b2396f883415322788eb5d5490a05c` 建立 `feature/155-coordination-e2e`。严格只写 `tests/e2e/coordination/**` 与 `scripts/e2e/coordination/**`;先复用 #148–#154 已验收契约、connector、机器身份和部署入口形成隔离临时 E2E,不修改产品/契约/部署实现。若发现产品缺陷将另建单,不混入本工单。
Author
Owner

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

最终差异

  • 新增 scripts/e2e/coordination/run-coordination-e2e.ps1 单入口及 BAT 包装。
  • 每次创建动态端口临时 PostgreSQL;Sense/Bell 使用随机且不同的 database owner 与 database,禁止默认 5432。
  • 使用一次性 Python venv 执行冻结契约;依次验证 source-config、runtime-status、machine-identity、events、evidence。
  • 串行验证 Sense 配置/状态、Brain 匿名事件、Sense durable Outbox 离线重试/重启恢复、Bell Receipt/Event/Alert、确认/关闭,以及错误身份、重放、重复、同键冲突、未知版本、证据不可用等稳定故障。
  • 默认继续执行 Sense/Bell 既有隔离 E2E 与 Brain 全套测试;仅调试时可显式 -SkipIndependentProductE2E。
  • 收尾只停止本次临时 PostgreSQL/子进程,校验端口关闭,扫描临时日志中的随机凭据并安全清理专属临时目录。
  • 增加 tests/e2e/coordination/README.md,说明唯一入口与调试参数。

验证证据

  • pwsh scripts/e2e/coordination/run-coordination-e2e.ps1:通过。
    • source-config:11 tests
    • runtime-status:14 tests
    • machine-identity:10 tests
    • events:7 tests
    • evidence:4 tests
    • Sense source/status、Brain-event/evidence/Outbox、PostgreSQL 并发恢复:通过
    • Brain connector/event export:25 tests;完整 Brain:74 tests
    • Bell ingress/evidence、rule/alert、lifecycle:通过
    • Sense isolated E2E:通过(含冷启动恢复与 Windows stop)
    • Bell isolated E2E:通过(含 Receipt/Event、20 并发 ack、close 幂等、冷启动恢复与 package stop)
    • 末行:COORDINATION_E2E passed
  • python dev_scripts/harness.py check --strict:通过。
  • git diff --cached --check:通过。
  • 默认完整运行后工作区无产品构建文件改动;提交仅包含 #155 声明的两个 write_paths。

Git / PR

  • 提交:c2b2943a3afddc887dc6123d7d745267ac0cfb24
  • 分支:feature/155-coordination-e2e
  • PR:#170 #170 (目标 dev,mergeable)

文档影响

本次没有直接修改长期 Wiki(工单 write_paths 禁止 docs/**)。待 #155 人工验收并合入后,按工单既定范围另建/执行文档同步任务,更新 Deployment、Local Verification、Troubleshooting 的长期入口与排障事实。

状态:待验收。

## 实施完成,待验收(2026-08-31) ### 最终差异 - 新增 `scripts/e2e/coordination/run-coordination-e2e.ps1` 单入口及 BAT 包装。 - 每次创建动态端口临时 PostgreSQL;Sense/Bell 使用随机且不同的 database owner 与 database,禁止默认 5432。 - 使用一次性 Python venv 执行冻结契约;依次验证 source-config、runtime-status、machine-identity、events、evidence。 - 串行验证 Sense 配置/状态、Brain 匿名事件、Sense durable Outbox 离线重试/重启恢复、Bell Receipt/Event/Alert、确认/关闭,以及错误身份、重放、重复、同键冲突、未知版本、证据不可用等稳定故障。 - 默认继续执行 Sense/Bell 既有隔离 E2E 与 Brain 全套测试;仅调试时可显式 `-SkipIndependentProductE2E`。 - 收尾只停止本次临时 PostgreSQL/子进程,校验端口关闭,扫描临时日志中的随机凭据并安全清理专属临时目录。 - 增加 `tests/e2e/coordination/README.md`,说明唯一入口与调试参数。 ### 验证证据 - `pwsh scripts/e2e/coordination/run-coordination-e2e.ps1`:**通过**。 - source-config:11 tests - runtime-status:14 tests - machine-identity:10 tests - events:7 tests - evidence:4 tests - Sense source/status、Brain-event/evidence/Outbox、PostgreSQL 并发恢复:通过 - Brain connector/event export:25 tests;完整 Brain:74 tests - Bell ingress/evidence、rule/alert、lifecycle:通过 - Sense isolated E2E:通过(含冷启动恢复与 Windows stop) - Bell isolated E2E:通过(含 Receipt/Event、20 并发 ack、close 幂等、冷启动恢复与 package stop) - 末行:`COORDINATION_E2E passed` - `python dev_scripts/harness.py check --strict`:通过。 - `git diff --cached --check`:通过。 - 默认完整运行后工作区无产品构建文件改动;提交仅包含 #155 声明的两个 write_paths。 ### Git / PR - 提交:`c2b2943a3afddc887dc6123d7d745267ac0cfb24` - 分支:`feature/155-coordination-e2e` - PR:#170 https://git.ilapage.cn/ila/yovision/pulls/170 (目标 `dev`,mergeable) ### 文档影响 本次没有直接修改长期 Wiki(工单 write_paths 禁止 `docs/**`)。待 #155 人工验收并合入后,按工单既定范围另建/执行文档同步任务,更新 Deployment、Local Verification、Troubleshooting 的长期入口与排障事实。 状态:**待验收**。
Author
Owner

人工验收通过(2026-08-31)

  • 验收人:用户
  • 验收结论:#155 验收通过。
  • PR #170 已合入 dev;在线回读确认 merged=true。
  • 合并提交:0276bceab5004efdf9713039bf48091c62ee9263。
  • 验收范围:版本化契约、配置/状态、匿名事件、Sense Outbox、Bell Receipt/Event/Alert/ack/close、离线恢复、身份/重放/冲突/证据降级、三端独立 E2E、秘密扫描与临时资源清理。
  • 明确未验证边界保持不变:真实 GPU/生产模型、真实摄像头、真实通知供应商、生产迁移及 16 路长稳/现场效果。
  • 长期文档:#155 的精确写路径禁止 Wiki/docs/**;后续由独立文档工单更新 Deployment、Local Verification、Troubleshooting,不混入本实现提交。

据此关闭 #155,并同步 MVP #156。

## 人工验收通过(2026-08-31) - 验收人:用户 - 验收结论:#155 验收通过。 - PR #170 已合入 `dev`;在线回读确认 `merged=true`。 - 合并提交:`0276bceab5004efdf9713039bf48091c62ee9263`。 - 验收范围:版本化契约、配置/状态、匿名事件、Sense Outbox、Bell Receipt/Event/Alert/ack/close、离线恢复、身份/重放/冲突/证据降级、三端独立 E2E、秘密扫描与临时资源清理。 - 明确未验证边界保持不变:真实 GPU/生产模型、真实摄像头、真实通知供应商、生产迁移及 16 路长稳/现场效果。 - 长期文档:#155 的精确写路径禁止 Wiki/`docs/**`;后续由独立文档工单更新 Deployment、Local Verification、Troubleshooting,不混入本实现提交。 据此关闭 #155,并同步 MVP #156。
ila closed this issue 2026-08-31 20:50:24 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#155