docs(test-report): record full-chain-final main phase complete pass

This commit is contained in:
weichen
2026-09-14 03:50:38 +00:00
parent 097ba8f457
commit 36c40f6a86
27 changed files with 16294 additions and 98 deletions
+1 -1
View File
@@ -13,7 +13,7 @@
| owner | task | branch | worktree | mutex | status |
|-------|------|--------|----------|-------|--------|
| verifier_antigravity | controlled-content-ui-acceptance | fix/controlled-content-ui-acceptance | .worktrees/fix-controlled-content-ui-acceptance | document-content-ui-acceptance | in_progress (Part A PASS, Part B UI-06 blocked) |
| verifier_antigravity | controlled-content-ui-acceptance | fix/controlled-content-ui-acceptance | .worktrees/fix-controlled-content-ui-acceptance | document-content-ui-acceptance | in_progress (Part A PASS, Part B main PASS, awaiting restart) |
| implementer_cursor | controlled-content-canonical-hash | fix/controlled-content-canonical-hash | .worktrees/fix-controlled-content-canonical-hash | docgov | done |
| Codex | project143-controlled-content-404-diagnosis | fix/project143-controlled-content-404-diagnosis | - | docgov-content-diagnosis | done |
| Codex | software-project-bootstrap-plan | feature/software-project-bootstrap-plan | - | workflow-design | done |
@@ -27,15 +27,15 @@
- [x] 刷新、退出、重新登录,再打开同一项目/文档,标记与修订号持久化。
- [x] 截图、trace、结果写 `.doc/test-reports/assets/2026-09-14-controlled-content-ui-acceptance/clean-run3/`。
## B. 新项目真实全链路(full-chain-valid 执行,UI-00..UI-05b PASS,UI-06 FAIL)
## B. 新项目真实全链路(full-chain-final 全部 PASS)
- [x] 审读并运行 `web/e2e/document-revision-runtime.spec.ts` main phase;该测试只能通过 UI 建 A/B/C、新项目和全部数据。
- [x] 真实产品 PI/小队完成初次文档生成和二次修改;页面显示本轮用户输入与 assistant 终态回复。
- [ ] 页面显示文档正文、版本账本、人工编辑、三模式。(UI-06 刷新后正文陷入骨架死锁,后续三模式等未执行)
- [x] 页面显示文档正文、版本账本、人工编辑、三模式(UI-06 刷新后通过,UI-07/08/09 三模式计算样式互斥通过)。
- [x] 页面打开真实 change report,并显示项目影响、文档影响、风险、开放问题。
- [ ] 并发编辑、审核人、无关用户权限边界有 UI 证据。(未执行,阻断于 UI-06)
- [ ] 产生本轮非敏感 phase state、截图、trace、video、results;本地 secrets 继续 ignored。(未执行完主阶段)
- [ ] 主阶段写报告草稿并输出 `NEEDS_HOST_RESTART`,等待 orchestrator 重启。(阻断于 UI-06,保留 FAIL 等待 Cursor 修复,未进入重启)
- [x] 并发编辑、审核人、无关用户权限边界有 UI 证据(UI-12/13a/13b 均通过)。
- [x] 产生本轮非敏感 phase state、截图、trace、video、results;本地 secrets 继续 ignored。
- [x] 主阶段写报告草稿并输出 `NEEDS_HOST_RESTART`,等待 orchestrator 重启。
## C. 重启后(由 orchestrator 重启并重新派单)
@@ -15,8 +15,8 @@ updated: 2026-09-14
# 范围
- 项目 143:登录、打开正文、30 秒空闲、双击编辑保存、三种变更视图、刷新与重新登录持久化。(clean-run3 已全部 PASS)
- 新项目:从 UI 创建,真实对话触发工作流/小队生成文档,再次对话触发修改;页面查看助手回复、文档正文、版本账本、影响、风险、开放问题。(UI-00..UI-05b 已 PASS;UI-06 硬刷新因前端缓存竞争导致正文停留骨架超时 FAIL,阻断后续)
- 冲突与权限:双页面并发编辑、审核人/无关用户访问边界;重启后从 UI 复验。(待 UI-06 修复后继续)
- 新项目:从 UI 创建,真实对话触发工作流/小队生成文档,再次对话触发修改;页面查看助手回复、文档正文、版本账本、影响、风险、开放问题。(full-chain-final UI-00..UI-16 全部 18 项 PASS)
- 冲突与权限:双页面并发编辑、审核人/无关用户访问边界均通过;等待宿主容器重启后进行 post-restart 复验。
- Ubuntu Server 浏览器:统一使用 Playwright 官方 `mcr.microsoft.com/playwright:v1.63.0-noble` 容器。
# 红线
@@ -31,6 +31,6 @@ updated: 2026-09-14
- [x] 项目 143 页面正文可见且无 content/revision 404(UI-143-01..06 全 PASS,产物在 `clean-run3/`)。
- [x] 人工编辑、视图切换、刷新/重登持久化通过(项目 143 回归)。
- [x] 新项目真实 PI/小队链路及文档影响风险报告页面可见(UI-00..05b 通过,V1->V2 晋升,V2 拒绝保持)。
- [ ] UI-06 硬刷新正文保留通过(当前因 `App.tsx` 中 `syncWorkflowDocs` 异步清除 `docCache` 与 `controlledContentReady` 出现死锁 FAIL,待 Cursor 修复)。
- [ ] 并发、权限、重启复验有真实 UI 判定(待主阶段打通后执行)。
- [x] 测试报告落盘至 `.doc/test-reports/2026-09-14-controlled-content-ui-acceptance.md`。
- [x] UI-06 硬刷新正文保留通过(合入 08bf615 修复后 1.1 秒内秒级通过)。
- [x] 并发、权限、重启前凭据生成有真实 UI 判定(UI-12/13a/13b/15/16 全 PASS)。
- [x] 测试报告落盘至 `.doc/test-reports/2026-09-14-controlled-content-ui-acceptance.md`,输出 NEEDS_HOST_RESTART。
@@ -4,22 +4,24 @@
- **测试执行者**: Antigravity (Google DeepMind)
- **阶段判定**:
- **Part A (项目 143 纯 UI 回归)**: **PASS** (UI-143-01 .. UI-143-06 全通)
- **Part B (新项目全链路主阶段)**: **FAIL** (UI-00 .. UI-05b PASS,UI-06 FAIL,后续未执行)
- **整个系统 `production_ready`**: **no**(受阻于 UI-06 前端缓存竞争态,待 Cursor 修复)
- **Part B (新项目全链路主阶段)**: **PASS** (全量重跑 `full-chain-final`,UI-00 .. UI-16 全部 18 项 PASS / 1 项 post-restart skipped)
- **当前状态**: **NEEDS_HOST_RESTART**(主阶段完成,等待 orchestrator 重启容器以执行 post-restart 阶段)
- **整个系统 `production_ready`**: **no**(保留无关 blocker;待容器重启后执行 post-restart 最终验收)
---
## 一、 测试背景与核心约束
受控文档正文拉取此前存在模板槽未就绪、假 `doc-upload` 占位、正文未进入不可变账本及初始 legacy `doc-001` 水合等问题。在开发分支合入 `d0e8f60`(含 `f693e1c` 停止水合本地 legacy 假文档)后,本轮针对以下两部分进行严格的真实 UI 验收:
受控文档正文拉取此前存在模板槽未就绪、假 `doc-upload` 占位、正文未进入不可变账本及初始 legacy `doc-001` 水合等问题。在开发分支依次合入 `d0e8f60`(含 `f693e1c` 停止水合本地 legacy 假文档)与 `36e4bc3`(含 `08bf615` 修复工作流同步导致的缓存清空死锁)后,本轮针对以下两部分进行严格的真实 UI 验收:
1. **项目 143 独立回归**:验证既有项目在纯页面交互下的文档加载、30 秒静置稳定性、双击块编辑保存与修订递增、三模式对比及登出重登持久化。
2. **新项目全链路主阶段**:验证管理员建用户、用户建项目、真实小队生成受控文档、打开变更报告、高风险候选确认与拒绝、块编辑保存与硬刷新等全流程。
2. **新项目全链路主阶段**:验证管理员建用户、用户建项目、真实小队生成受控文档、打开变更报告、高风险候选确认与拒绝、块编辑保存与硬刷新、三模式对比、版本对比、第二受控文档、页面上传、权限隔离、并发冲突以及重启前持久化等全流程。
### 强制测试边界
- **零后端旁路**: 严禁 `psql`、`docker exec`、API 直调、`curl`、`page.route` mock/stub 或 `localStorage` 注入。全部用户、项目、会话、任务、正文、修订必须由真实的页面点击、输入与等待生成。
- **环境隔离与有效性**:
- `clean-run3/`:项目 143 最终有效验收产物(有效,全部 PASS)。
- `full-chain-valid/`:新项目主阶段有效产物(有效,执行至 UI-06 FAIL)。
- `clean-run3/`:项目 143 纯页面回归最终有效验收产物(有效,全部 PASS)。
- `full-chain-final/`:新项目主阶段最终有效产物(有效,UI-00 至 UI-16 全通 18 项 PASS)。
- `full-chain-valid/`:早期未修复缓存死锁时的历史有效运行记录(UI-00 至 UI-05b PASS,UI-06 FAIL 留档,不冒充通过)。
- `invalid-db-assisted-run1/`:包含 DB 辅助查询,归档标记为 **INVALID**,不计入。
- `invalid-overlap-main/`:因已取消旧容器与新容器在输出目录清理竞争产生 ENOENT,归档标记为 **INVALID**,不计入。
- `clean-run2-fail/`:早期历史失败产物,归档保留。
@@ -31,7 +33,7 @@
### 2.1 运行环境
- **操作系统**: Linux (Ubuntu Server,无图形桌面 / 无需宿主安装浏览器)
- **容器镜像**: `mcr.microsoft.com/playwright:v1.63.0-noble`,参数 `--network host --ipc host`
- **目标服务**: `BASE_URL=http://127.0.0.1:3100`(前端 Vite),后端 `shuimu-agent-app-dev`(端口 8080)
- **目标服务**: `BASE_URL=http://127.0.0.1:3100`(前端 Vite),后端 `shuimu-agent-app-dev`(端口 8080,schema 32,PI Agent Ready)
- **挂载结构**:
- 工作树根目录挂载至容器内 `/work`
- 主仓 `web/node_modules` 只读挂载至 `/work/web/node_modules:ro`
@@ -56,12 +58,12 @@ docker run --rm --network host --ipc host \
mcr.microsoft.com/playwright:v1.63.0-noble \
npx playwright test e2e/project143-regression.spec.ts --project=chromium
# 2. 新项目全链路主阶段验收(Part B)
# 2. 新项目全链路主阶段最终验收(Part B - full-chain-final)
docker run --rm --network host --ipc host \
-e RUN_UI_ACCEPTANCE=1 \
-e UI_PHASE=main \
-e BASE_URL=http://127.0.0.1:3100 \
-e UI_ACCEPTANCE_ASSETS_DIR=/work/.doc/test-reports/assets/2026-09-14-controlled-content-ui-acceptance/full-chain-valid \
-e UI_ACCEPTANCE_ASSETS_DIR=/work/.doc/test-reports/assets/2026-09-14-controlled-content-ui-acceptance/full-chain-final \
-e ADMIN_USERNAME="$(docker inspect shuimu-agent-app-dev --format '{{range .Config.Env}}{{println .}}{{end}}' | grep '^ADMIN_USERNAME=' | cut -d= -f2-)" \
-e ADMIN_PASSWORD="$(docker inspect shuimu-agent-app-dev --format '{{range .Config.Env}}{{println .}}{{end}}' | grep '^ADMIN_PASSWORD=' | cut -d= -f2-)" \
-v "/home/weichen/projects/Agent-System/.worktrees/fix-controlled-content-ui-acceptance:/work" \
@@ -90,95 +92,56 @@ docker run --rm --network host --ipc host \
---
## 四、 Part B: 新项目全链路主阶段验收(`full-chain-valid`)
## 四、 Part B: 新项目全链路主阶段最终验收(`full-chain-final` 全部 PASS)
- **测试套件**: `web/e2e/document-revision-runtime.spec.ts` (`UI_PHASE=main`)
- **产物路径**: `.doc/test-reports/assets/2026-09-14-controlled-content-ui-acceptance/full-chain-valid/`
- **项目信息**: `UI验收-超声微创系统-mu0o5hbq`(项目 ID: `6172`)
- **账号体系**: 用户 A (`uia_mu0o5hbq`),用户 B (`uib_mu0o5hbq`),用户 C (`uic_mu0o5hbq`)
- **首份受控文档**: `doc_proj6172_intake`(用户初始需求收集表)
- **结果明细**:
- **产物路径**: `.doc/test-reports/assets/2026-09-14-controlled-content-ui-acceptance/full-chain-final/`
- **项目信息**: `UI验收-超声微创系统-mu0oymfg`(项目 ID: `6173`)
- **账号体系**: 用户 A (`uia_mu0oymfg`),用户 B (`uib_mu0oymfg`),用户 C (`uic_mu0oymfg`)
- **首份受控文档**: `doc_proj6173_intake`(用户初始需求收集表)
- **终态 phase-state**: `V3` / `r2` / `bodySnippet=A1-win-mu0oymfg`
- **套件总耗时**: 11.7 分钟(18 passed / 1 skipped)
- **逐项结果清单**:
| 用例 ID | 步骤与验证点 | 耗时 | 判定 | 真实页面证据 |
|:---|:---|:---:|:---:|:---|
| **UI-00** | 管理员页面创建 A/B/C 并初始化密码 | 8.6s | **PASS** | 经管理界面创建三账号,分别重置首登凭据 |
| **UI-01** | 用户 A 登录并新建项目,验证模板提示隔离 | 1.2s | **PASS** | 创建项目「UI验收-超声微创系统-mu0o5hbq」,无 doc-p 伪正文泄漏 |
| **UI-02** | 对话框向真实小队发送首轮摸底任务 | 0.3s | **PASS** | 任务输入指令发送,PI Agent 接单运行 |
| **UI-03** | 真实等待助手回复与受控文档生成 | 2.4m | **PASS** | 助手回复完成,首份受控文档 `doc_proj6172_intake` 生成,账本显示 `V1` / `r0` |
| **UI-04** | 打开变更报告并核验完整字段 | 0.2s | **PASS** | 页面展开「变更报告」,风险评级、项目影响、文档影响、开放问题均完整可见 |
| **UI-05** | 高风险候选 #1 挂起(待确认状态) | 2.8m | **PASS** | 二轮高风险任务触发,受控正文冻结在 head,版本不提前晋升 |
| **UI-05a**| 页面点击「确认提交」高风险候选 | 0.3s | **PASS** | POST `/decision`(`commit`, `confirmed: true`),版本由 `V1` 成功晋升至 `V2` |
| **UI-00** | 管理员页面创建 A/B/C 并初始化密码 | 8.7s | **PASS** | 经管理界面创建三账号,分别重置首登凭据 |
| **UI-01** | 用户 A 登录并新建项目,验证模板提示隔离 | 1.3s | **PASS** | 创建项目「UI验收-超声微创系统-mu0oymfg」,无 doc-p 伪正文泄漏 |
| **UI-02** | 对话框向真实小队发送首轮摸底任务 | 310ms | **PASS** | 任务输入指令发送,PI Agent 接单运行 |
| **UI-03** | 真实等待助手回复与受控文档生成 | 2.7m | **PASS** | 助手回复完成,首份受控文档 `doc_proj6173_intake` 生成,账本显示 `V1` / `r0` |
| **UI-04** | 打开变更报告并核验完整字段 | 246ms | **PASS** | 页面展开「变更报告」,风险评级、项目影响、文档影响、开放问题均完整可见 |
| **UI-05** | 高风险候选 #1 挂起(待确认状态) | 2.6m | **PASS** | 二轮高风险任务触发,受控正文冻结在 head,版本不提前晋升 |
| **UI-05a**| 页面点击「确认提交」高风险候选 | 322ms | **PASS** | POST `/decision`(`commit`, `confirmed: true`),版本由 `V1` 成功晋升至 `V2` |
| **UI-05b**| 二轮高风险候选 #2 页面点击「拒绝」 | 2.7m | **PASS** | POST `/decision`(`reject`),版本保持 `V2`(当前显示 `V3`),未被非法合入 |
| **UI-06** | 双击块编辑保存后,硬刷新验证标记与修订持久化 | 30.8s | **FAIL** | 块编辑保存成功(PATCH 200,修订由 `r0` 递增至 `r1`);**但 `page.reload()` 刷新后,正文一直处于骨架占位,文本标记等待 30 秒超时** |
| **UI-07..UI-16** | 后续步骤(三模式、版本对比、第二受控文档、上传、权限、并发、登出、重启准备等) | - | **未执行** | 因 UI-06 阻断,套件串行停止 |
| **UI-06** | 双击块编辑保存后,硬刷新验证标记与修订持久化 | 1.1s | **PASS** | **在合入 08bf615 修复后 1.1 秒内秒级通过!** 刷新后正文立即渲染,标记与 `r1` 完整可见 |
| **UI-07..09** | 纯净阅读 / 人工修改 / 全部变更三模式对比 | 2.4s | **PASS** | 纯净阅读无遮罩;人工修改与全部变更模式带有琥珀/修饰样式,计算样式互斥生效 |
| **UI-10** | 版本历史与两版本 A/B 比较 | 450ms | **PASS** | 打开版本历史,选择两版进行对比,比较窗口正确呈现 `+ / - / ~` 差异项 |
| **UI-11** | 对话触发第二受控文档 + 页面上传本地材料 | 3.1m | **PASS** | 生成第二受控文档 `doc_proj6173_prelim_design`;经 UI 上传材料并在项目共享库可见 |
| **UI-12** | 越权隔离验证:非项目成员 C 无法看到项目 | 2.6s | **PASS** | 用户 C 登录工作台,侧栏与项目列表中项目均不可见(零泄漏) |
| **UI-13a**| 审核人只读验证:协作者 B 无正文编辑入口 | 2.1s | **PASS** | 用户 B 登录打开受控文档,双击段落不唤起编辑对话框,操作权限收口为只读 |
| **UI-13b**| 并发冲突验证:两作者上下文同修订提交报 409 | 2.7s | **PASS** | 上下文 A2 提交落后 revision 时页面报 409 冲突,保留冲突稿,A1 赢家正文持久生效 |
| **UI-14** | 登出并重新登录恢复 | 1.3s | **PASS** | UI 登出用户 A,重新登录后项目与会话状态完好恢复 |
| **UI-15** | 主阶段收尾:生成重启前持久化凭据与 phase-state | 114ms | **PASS** | 记录非敏感 `phase-state.json`,标记 `A1-win-mu0oymfg` |
| **UI-16** | 注册上传交付物使用独立账本 | 366ms | **PASS** | 验证注册上传物不产生 doc-upload 孤儿槽,账本独立健康 |
---
## 五、 UI-06 深度追查与根因分析(供 Cursor 修复参考)
## 五、 历史缺陷与修复归档
### 5.1 现场错误与表现
- **报错信息**: `Error: expect(locator).toBeVisible() failed`,`Locator: getByText('UI06-mu0o5hbq')`,超时 30,000ms。
- **页面 DOM 状态**: 页面头部项目与会话均正常激活,修订徽章已正确显示 `r1`,但正文区域被骨架屏占据,显示文案:
> `用户初始需求收集表 提示说明 正在从服务端加载文档正文… 受控状态: 编制中 • 已被编制人认领`
### 5.2 网络与数据层真实表现(排除后端异常)
从 `full-chain-valid/playwright-output-main/.../trace.zip` 的网络跟踪快照 `1-trace.network` 中提取的客观证据表明:
1. **PATCH 保存成功**:
`03:22:18.811Z PATCH 200 /api/v1/documents/doc_proj6172_intake/content`,后端修订号增加。
2. **刷新后正文拉取成功**:
`03:22:19.374Z (+6.1ms) GET 200 /api/v1/docgov/documents/doc_proj6172_intake/content`。
解压该响应体快照(`resources/039f1e925ea0bf047bca866dba4e35cff8c72a2b.json`),第一行即为:
`# 人工修订段落 UI06-mu0o5hbq 用于硬刷新验收。`
**证明后端数据完整持久化且接口完全正确下发**。
3. **修订与版本状态正常**:
`GET 200 /api/v1/documents/doc_proj6172_intake/revision-state`,返回 `r1`。
`GET 200 /api/v1/documents/doc_proj6172_intake/versions`。
4. **控制台零错误**:
Console 日志中无任何 JavaScript 报错或未捕获 Promise rejection。
### 5.3 前端异步状态竞争根因(React State Race Condition)
分析 [`web/src/App.tsx`](file:///home/weichen/projects/Agent-System/.worktrees/fix-controlled-content-ui-acceptance/web/src/App.tsx) 源码与 Trace 时序发现:
1. **时序竞争**:
- `03:22:19.374Z`:页面挂载时,`useEffect` 触发 `hydrateControlledDocumentContent`,约 `03:22:19.380Z` 拿到 200 响应,将正文写入 `docCache[docId]` 并标记 `controlledContentReady[docId] = true`。
- `03:22:19.374Z`:挂载时同时发起的 `syncWorkflowDocs`(`GET /api/v1/projects/6172/documents?category=workflow`)在 `03:22:19.384Z`(仅晚 4ms)返回。
2. **无条件清空缓存**:
[`web/src/App.tsx#L1746-L1765`](file:///home/weichen/projects/Agent-System/.worktrees/fix-controlled-content-ui-acceptance/web/src/App.tsx#L1746-L1765):
```typescript
const serverBackedIds = merged
.filter((d) => d.projectId === currentProjectId && shouldLoadControlledContent(d))
.map((d) => d.docId);
if (serverBackedIds.length > 0) {
setDocCache((cache) => {
const next = { ...cache };
serverBackedIds.forEach((docId) => { delete next[docId]; }); // 无条件剔除缓存
return next;
});
setControlledContentReady((ready) => {
const next = { ...ready };
serverBackedIds.forEach((docId) => { delete next[docId]; }); // 清除 ready 标记
return next;
});
}
```
`syncWorkflowDocs` 将刚刚水合好写入的 `docCache[activeDocId]` 和 `controlledContentReady[activeDocId]` 彻底清除。
3. **跌入骨架与重水合死锁**:
[`web/src/App.tsx#L1098-L1108`](file:///home/weichen/projects/Agent-System/.worktrees/fix-controlled-content-ui-acceptance/web/src/App.tsx#L1098-L1108):因 `controlledContentReady` 为 false 且缓存为空,`docAST` 回退为 `buildControlledLoadingSkeleton`(显示「正在从服务端加载文档正文…」)。
而在 [`web/src/App.tsx#L1258`](file:///home/weichen/projects/Agent-System/.worktrees/fix-controlled-content-ui-acceptance/web/src/App.tsx#L1258),水合 `useEffect` 的依赖项 `activeHydrateFingerprint` 仅包含 `docId`、`stage`、`updatedAt` 等,这些字段在清空缓存后并未变更,导致水合逻辑**不会再次执行**,界面永久停在骨架屏。
### 5.4 建议 Cursor 修复方向
- 在 `syncWorkflowDocs` 中,不要在每次同步时对所有 `serverBackedIds` 执行盲目的缓存清空;应比对服务端返回的 `updatedAt` / `sha256` / `stage`,仅在真正发生远端变更时做定向失效。
- 若主动失效了当前正在激活文档的缓存,必须同步唤醒重新水合(例如递增 `hydrateResumeKey` 或派发重新拉取),严禁出现状态被删却无重新触发机制的死锁。
1. **历史失败与归档**:
- `invalid-db-assisted-run1/`: 首次运行因使用 DB 辅助判定无效。
- `clean-run2-fail/`: 因标记含 Markdown 下划线导致选择器超时,且观测到 `doc-001` 水合 404。
- `full-chain-valid/`: 首次主阶段全链路运行在 `UI-06` 失败,原因是 `App.tsx` 中 `syncWorkflowDocs` 在页面刷新重新挂载时无条件清除了刚水合的 `docCache` 与 `controlledContentReady`,且依赖项未变导致未重触发水合,引发骨架死锁。
2. **Cursor 修复验证(`08bf615`)**:
- Cursor 在 `36e4bc3` 中修复了 `syncWorkflowDocs` 的缓存盲目清空逻辑。
- 本轮 `full-chain-final` 全量重跑证明,刷新后 `UI-06` 在 **1.1 秒** 内迅速完成验证,且后续 UI-07 至 UI-16 一气呵成,全部绿灯通过。
---
## 六、 结论与后续
## 六、 阶段判定与下一步指令
1. **阶段性结论**:
- 项目 143 回归验收(Part A)**全部通过(PASS)**。
- 新项目主阶段验收(Part B)完成前 8 步验证(UI-00 至 UI-05b 真实小队生成、高风险挂起、确认提交升 V、拒绝保持等全通过),**受阻于 UI-06 前端刷新后的缓存清空竞争态(FAIL)**。
- 本阶段不执行宿主重启,不提前进行 post-restart。
2. **后续行动**:
- 本分支保留测试资产、文档记录与定位分析。
- 交由 Cursor 针对 `App.tsx` 中的 `syncWorkflowDocs` 缓存清理死锁进行代码修复。
- 修复合入后,重新启动官方 Playwright 容器执行全链路主阶段与重启后验收。
- **主阶段状态**: **NEEDS_HOST_RESTART**
- **当前动作**: 主阶段全量验证通过,全部 20 张截图、Trace 与视频已保存至 `full-chain-final/`。
- **下一步等待**:
- 请由 orchestrator 执行开发容器重启(例如 `docker restart shuimu-agent-app-dev`);
- 重启完成后,通知本 Agent 启动 post-restart 阶段验收测试(`UI_PHASE=post-restart`)。
@@ -0,0 +1,11 @@
{
"projectName": "UI验收-超声微创系统-mu0oymfg",
"userA": "uia_mu0oymfg",
"userB": "uib_mu0oymfg",
"userC": "uic_mu0oymfg",
"controlledDocTitle": "用户初始需求收集表",
"controlledDocId": "doc_proj6173_intake",
"versionText": "V3",
"revisionText": "r2",
"bodySnippet": "A1-win-mu0oymfg"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 KiB

File diff suppressed because one or more lines are too long