Files
cmshoppe/docs/reviews/2026-06-27-T401-T403-acceptance.md
T

60 lines
6.0 KiB
Markdown
Raw Normal View History

# 验收报告 · 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 验收阻塞。