Files
cmshoppe/docs/reviews/2026-06-27-T401-T403-acceptance.md
chengma d0cd408126 docs: 延后Phase4真实冒烟到设置安全开关后
- 新增T-404真实单条更新冒烟任务,并依赖T-501c安全开关

- 新增T-501c Shopee更新安全开关任务,默认关闭真实提交和封面更新

- 补充Phase4验收复核、取消语义、真机冒烟范围和tab策略

- 纳入Phase3/Phase4验收报告并同步current-state与progress
2026-06-27 17:58:08 +08:00

60 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 验收报告 · T-401 ~ T-403 · Phase 4 更新 Shopee
- 日期:2026-06-27
- 范围:Codex 完成的 Phase 4——T-401 Tab③ 列表+批次/店铺/状态筛选+开始更新确认弹窗、T-402 确认后串行 apply、T-403 结果回写原 Excel + 结束弹窗汇总
- 评审方式:编译检查 + 单元测试(本机实跑 excel)+ 逐模块源码阅读 + 对照 `docs/06-tasks.md` 验收要点
- 结论:**代码层面通过,质量偏上。但 Phase 4 直接提交线上商品,真机冒烟为 0,是上线前的硬门槛缺口(验收覆盖问题,非代码问题)。**
## 一、验证方法与结果
```
python3 -m unittest discover -s tests -p "test_excel.py" # Ran 8 tests, OK(含 write_back_results 实跑)
python3 -m unittest discover -s tests # Ran 54 tests, OK (skipped=2)
```
- 本评审在 WSL 沙箱进行:临时安装 openpyxl + Pillow 后,**excel 8/8 本机实跑通过**(含新增结果回写测试)。
- UpdateTab/ApplyWorker 的 9 个 GUI 用例(含确认门控、串行成功/失败/未匹配、自动结果回写、结束弹窗、锁文件提示、预检拦截、引导去④)读源码 + 测试清单核对;其“绿”以 Codex 在 Windows(`python` = PySide6 6.5.3)的运行为准。
## 二、逐任务核对
| 任务 | 结论 | 关键核对 |
| --- | --- | --- |
| T-401 Tab③ 列表+筛选+确认弹窗 | ✅ | 批次/店铺/状态三筛选;「开始更新」仅作用于当前筛选的 actionable 任务;确认弹窗显示 批次/店铺/状态/任务数 + 明确写“打开编辑页、替换标题封面、点更新提交线上”风险;取消即 `已取消开始更新` 不执行;状态=失败可被筛出重试;无常驻提交开关 |
| T-402 确认后串行 apply | ✅ | `QMessageBox.question` 默认 No,仅 Yes 才建 worker(`test_..._requires_confirmation` 实测“未确认不调用 apply”);`ApplyWorker` 串行,逐条 `mark_running→apply_task→set_applied(True/False)`;单条失败继续;别名未匹配→`mark_skipped`;异常→`set_applied(False,error)` 继续;预检(无账号/Chrome 未起/未登录)→`blocked` 弹窗引导去④;停止取消未开始项 |
| T-403 回写结果+结束弹窗 | ✅ | apply 完成后自动 `write_back_results` 回写 `新标题/新封面路径/更新状态` 到原 Excel(锁处理同 T-204);`_update_status` 映射完整(成功/失败:原因/略过:原因/处理中/已取消/待更新);结束 `QMessageBox` 汇总 成功/失败/略过;手动「回写结果」按钮作为锁文件失败后的重试入口 |
## 三、做得好
1. **失败状态可重试闭环**:`set_applied(False)` 只置 `status=failed`、保留 `stage=generated`,故失败任务仍满足 `_is_actionable_task`,再点「开始更新」即重试。与“状态=失败可重试”吻合。
2. **committed 双重判定**:`bool(result.committed) and not result.error`,避免 editor 返回里 clicked 但带错时误判成功。
3. **apply_task 不自动关页**(承 e6d7de3 决策):③ 提交后保留商品页便于人工复核/排查,与采集自动关页区分清晰。
## 四、小问题(不影响验收)
1. **批量更新会堆积商品页**:③ 不自动关 tab,大批量后 Chrome 会累积多个编辑页。属已记录的有意决策,但 V2 可考虑成功提交后延时关页。
2. 显示用 `_is_update_task` 比执行用 `_is_actionable_task` 宽(前者含 applied 及失败/略过带新数据的),两个谓词并存,逻辑正确但建议注释说明“显示集 ⊇ 可执行集”,防后续误改。
## 五、待办 / 边界(本阶段最关键)
- ⚠️ **T-402 是整条流水线唯一不可逆、真提交线上的步骤,却从未真机冒烟过。** `apply_task → change_title/replace_cover/click_update` 全程 mock,真实 Shopee 提交路径一次没跑;之前累计的 CDP 采集、AI 生成也都还没真连。
- **强烈建议**(建议作为 Phase 4 正式验收门槛,当前单测全是 mock,不能替代):在任何真实批量更新前,先做一次单条端到端真机冒烟——
1. 账号④ 启动 + 人工登录;
2. ① 真机采集 1 条出图;
3. ② 真实模型生成 1 标题 + 1 封面;
4. ③ 只选这 1 条、确认弹窗 → 看商品页标题/封面真被改且「更新」提交成功 → 看原 Excel 回写 `更新状态=成功`。
确认无回归后再放量。
## 六、总评
代码层面合格偏上的工程交付:串行执行/确认门控/失败隔离/预检引导/结果回写都按文档落地,且 excel 侧本机实测通过。但 Phase 4 直接操作线上商品,真机冒烟是上线前的硬门槛,目前为 0——务必在真用之前补上单条端到端冒烟。可在补冒烟的同时推进 Phase 5(T-501 设置·AI 模型管理 UI)。
## 七、Codex 复核补充
- 本报告总体结论有效:T-401/T-402/T-403 代码层面已满足当前文档验收,主要缺口是未对 Tab③ 真实线上提交做单条冒烟。
- 测试数量需按环境区分:上文记录的是 Claude Code 在 WSL 沙箱的结果;Codex 完成 T-403 时本地验证为 `test_excel.py` 8 tests OK、`test_gui.py` 32 tests OK、`compileall` OK、全量 `python -m unittest discover -s tests` 88 tests OK。
- “停止取消未开始项”应理解为协作式取消:不会中断正在执行中的当前商品更新,只阻止后续未开始任务继续执行。
- “之前累计的 CDP 采集、AI 生成也都还没真连”表述需细化:Tab① 旧标题/旧封面采集此前已有真机冒烟记录;真实 AI 生成和 Tab③ 在线提交更新仍未完成端到端冒烟。
- 当前决策:暂不立即真实更新 Shopee 商品。先推进设置模块,并新增 T-501c “Shopee 更新安全开关”;T-404 单条真实更新冒烟依赖 T-501c 完成后再执行。T-404 默认先只测标题更新,封面更新作为可选子项。
- ③ 更新成功后不自动关闭商品编辑 tab 仍按当前保守策略处理;是否支持“成功后关闭本次新开 tab”放入 T-501c 设置项,不作为本次 Phase 4 验收阻塞。