# UIA MVP E2E 验证报告 · 2026-05-09

> Plan D 代码实现全部完成,本报告追踪 spec 14 条端到端手工验证的执行状态。
> 代码实现:见 `docs/superpowers/plans/2026-05-09-wechat-uia-d-frontend-tray-e2e.md`
> Spec:`docs/superpowers/specs/2026-05-09-wechat-uia-channel-design.md`

## 执行状态

**当前状态:待执行**。Plan D 的代码实现(Phase 1-6 / Task 1-12)已全部落地且 type-check / 单测通过,但端到端验证需在 Windows 测试机上完成,**需满足下述所有前置条件后由人工按清单逐条验证**。

## 前置条件

- [ ] Windows 测试机一台(Windows 10/11,能运行 PC 微信)
- [ ] PC 微信 3.9.11.17 已安装且已登录测试微信号(不在白名单外版本)
- [ ] MySQL 测试库 ready,包含 Neta 业务表(netaclaw_*, 见 `packages/backend/sql/`)
- [ ] Plan A + B + C + D 代码全部合并到同一分支
- [ ] 本地构建 Windows 安装包: `cd packages/backend && node scripts/build-windows-installer.js`(需本地安装 .NET 8 SDK + Inno Setup 6)
- [ ] 安装成功并启动 Tray,backend + bridge 都拉起

## 14 条 Checklist

| # | 项目 | 状态 | 备注 / 证据 |
|---|---|---|---|
| E2E-01 | 启动 Neta Tray,后端 + bridge 都拉起,前端频道页访问正常 | ⬜ | 观察 `%APPDATA%\Neta\logs\bridge.log` 有 handshake 日志;前端 `http://localhost:<port>` 能打开 |
| E2E-02 | 创建 UIA channel(type=weixin-uia),handshake 后 wxid/nickname 自动填充 | ⬜ | 前端新建 UIA channel 必填 wxid → bridge handshake 写回 nickname/wechatVersion → 刷新 channel 列表看 bridge tag 显示"已连接" + 微信版本 |
| E2E-03 | 测试群里任一成员说 "hello",bridge 切窗采集 → 前端群聊管理"待审批"横幅出现该群 | ⬜ | Bridge 日志有 `room discovered`;前端群聊管理抽屉顶部出现 `新发现 N 个群（待审批）` 橙色横幅 |
| E2E-04 | 点"启用监听" + 选 at_mention + 填 botAlias=小神 | ⬜ | 群卡片底部"启用监听/忽略"按钮点击后 status=1,triggerMode 下拉持久化 |
| E2E-05 | 群里发 `@小神 你好` → agent 回复 → bot 在群里发回复 → 发送方是测试号自己 | ⬜ | UIA bridge 模拟发送,回复消息的发送方是本机登录的微信号(而非独立 ClawBot) |
| E2E-06 | 切到 all 模式 → 群里随便说 → agent 通过 system prompt 判定相关性 → 不相关时返回 [SKIP] 不发 | ⬜ | 观察 backend 日志 `uia agent skipped reason=empty_or_skip` |
| E2E-07 | 群里发图 → SQLite 落归档 → 前端归档抽屉能预览到图片 | ⬜ | 点群卡片"查看归档"按钮 → 打开归档抽屉 → 能在列表里看到图片缩略图(via `/wechat-uploads/...`) |
| E2E-08 | 关掉 PC 微信 → bridge `/health` 失败 → channel 状态变 disconnected | ⬜ | 前端卡片显示 "Bridge 离线" 红色 tag(30s 轮询生效后) |
| E2E-09 | 重开 PC 微信 → bridge 自愈 → channel 重连 | ⬜ | bridge 重连后前端卡片 "Bridge 离线" 消失;注:完整 alive 轮询 + 3 次重启留 v2 实现 |
| E2E-10 | 故意装 PC 微信 4.x(不在白名单)→ bridge 启动失败 → tray 气泡通知"版本不兼容" | ⬜ | Tray 气泡文字 + `bridge.log` 有版本校验失败记录 |
| E2E-11 | 一个微信号同时绑 ClawBot + UIA channel:DM 走 ClawBot / 群走 UIA,不重复响应 | ⬜ | ClawBot 收到群消息丢弃;UIA 收到 DM 丢弃(见 routeInboundMessage 分流逻辑) |
| E2E-12 | 删 UIA channel → group 表级联清;SQLite 归档保留(按决策不级联删) | ⬜ | 验证 `netaclaw_agent_channel_group` 对应记录清空,`%APPDATA%\Neta\wechat-archive-<cid>.db` 文件保留 |
| E2E-13 | 群被改名 → 视为新群,又出现在"待审批"横幅 | ⬜ | 改群名后触发消息,前端横幅再次亮起;旧群 roomId 也还能在归档里看到 |
| E2E-14 | 群里回复 UIA bot 的消息(包含"引用") → 前端对话页的 user message 能看到"[被引用: ... 原文...]"结构化上下文 | ⬜ | 进入 chat.vue 查看 sessionId 对应会话,user message 内容应含 "[被引用:" 前缀 |

## 失败项 follow-up

(执行后在此记录每条失败的具体现象 + 复现步骤 + issue 链接)

---

## Plan D 代码实现完成情况

| Task | 文件 | 状态 |
|---|---|---|
| Task 1 | frontend/types/index.d.ts | ✅ 通过 TS 类型检查(baseline 107 保持) |
| Task 2 | backend/controller/admin/wechat_archive.ts + 测试 | ✅ 4 条 controller 单测通过 |
| Task 2.5 | backend/config/config.default.ts | ✅ `/wechat-uploads` 静态映射已挂 |
| Task 2.6 | backend/service/agent_channel.ts page() enrich | ✅ 17 条 agent_channel 单测通过 |
| Task 3 | frontend/views/channel-management.vue drawer 动态字段 | ✅ |
| Task 4 | frontend 卡片 UIA 渲染差异 + bridge tag | ✅ |
| Task 5 | frontend composables/useUiaChannelValidation.ts | ✅ |
| Task 6 | frontend/components/channel-group-panel.vue triggerMode 2 档 + 待审批横幅 | ✅ |
| Task 7 | 每群绑 agent + 回复身份覆盖 | ✅ |
| Task 8 | frontend/components/wechat-archive-panel.vue | ✅ |
| Task 9 | frontend chat ConversationHeader 加 DM/群 tag | ✅ |
| Task 10 | windows-tray BridgeProcessManager + 2 条单测 | ✅ 2/2 测试通过 |
| Task 11 | windows-tray TrayApplicationContext 集成 bridge | ✅ 7/7 现有测试保持通过 |
| Task 12 | backend/scripts/build-windows-installer.js + setup.iss | ✅ 静态改动完成(实际构建待工程师本地运行) |

## 留待 v2

- 崩溃自愈完整 3 次重启 + 30s 间隔 tray 气泡(Task 11 当前只做"需要时拉起")
- 归档"标记为有价值 → 转存 MySQL 业务表"(UI 已占位 disabled)
- 语音/视频/跨群人物志

## 备注

- 本次执行未创建 git worktree、未做任何 git commit(按用户要求),所有改动直接落在工作区,待工程师审阅后自行 stage/commit
- Type-check baseline 维持在 107(项目历史遗留错误),本次 Plan D 实施未引入新增错误
- 前端部分均通过 `pnpm type-check` 无新增报错;后端新增测试 21 条(controller 4 + service enrich 2 + 原有 15)全部通过;Tray 单测 7/7 + 新增 2/2 全部通过
