收录Claude对T-201到T-205的验收报告,并把报告中的GUI用例数量、T-205最终方案和T-203未登录语义改为当前口径。 同步任务文档、API文档、当前状态和progress,明确匹配账号未登录由T-205预检blocked拦截,不进入逐条采集、不写skipped或failed;别名未匹配仍由T-203逐条mark_skipped。 补强test_gui中未登录预检分支断言,确认被拦截任务保持imported/pending且last_error为空。
4.9 KiB
4.9 KiB
验收报告 · T-201 ~ T-205(含 T-204b)· Phase 2 导入采集
- 日期:2026-06-27
- 范围:Codex 完成的 Phase 2——T-201
app/excel.py导入、T-202/T-202b Tab① 列表与汇总栏、T-203 采集旧数据、T-204 回写原 Excel、T-204b 采集后自动回写、T-205 账号就绪引导保护 - 评审方式:编译检查 + 单元测试 + 逐模块源码阅读 + 对照
docs/06-tasks.md验收要点 - 结论:通过,质量偏上。T-205 采用“预检拦截 + 弹窗说明 + 自动跳④”的实现,已与当前任务文档对齐。
一、验证方法与结果
python3 -m unittest discover -s tests -p "test_excel.py" # Ran 7 tests, OK(本机实跑,已临时装 openpyxl)
python3 -m compileall app main.py # OK
- 本评审在 WSL 沙箱进行:
python3缺 PySide6/openpyxl。临时安装 openpyxl 后 excel 测试 7/7 本机实跑通过。 - GUI/worker 测试(
tests/test_gui.py18 个用例、tests/test_workers.py)因本机无 PySide6 只能读源码 + 测试清单核对;其“绿”以 Codex 在 Windows(python= PySide6 6.5.3)的运行为准。
二、逐任务核对
| 任务 | 结论 | 关键核对 |
|---|---|---|
T-201 excel.py 导入 |
✅ | 多文件解析;记 source_file_abs/source_sheet/source_row/row_key;缺必需列→拒整文件记 file_errors;脏行(别名空/商品id空/非数字)逐行跳过计 invalid+row_errors;写 batches/tasks;row_key 唯一性由 DB IntegrityError 兜底;表头别名归一化(中英/空格/下划线)到位 |
| T-202 Tab① 列表+导入+匹配标记 | ✅ | QTableView+TaskTableModel;未匹配别名阶段显示「略过」并有 tooltip;导入即刷新 |
| T-202b 导入汇总栏 | ✅ | 文件数/行数/有效/无效/匹配/未匹配;「未匹配(n)」可点击筛出,「全部」复位 |
| T-203 采集旧数据 | ✅ | CollectWorker 走后台线程;逐条 set_collected;旧封面落 images/<slug>/<item_id>_old.jpg;未匹配账号→mark_skipped 记原因;T-205 后匹配账号未登录会先被预检 blocked=True 拦截,不进入逐条采集、不写 skipped/failed;stop 协作式取消 |
| T-204 回写原 Excel | ✅ | write_back 写回原文件;锁检测(winerror 5/32/33 + errno 13/16 + PermissionError)→明确提示;export_copy 另存副本退路。本机实跑验证通过 |
| T-204b 采集后自动回写 | ✅ | 采集成功>0 自动触发回写;锁占用提示转「手动重试/另存」,SQLite 保留结果。合理增项 |
三、T-205 实现方式确认
T-205 的实现方式已确认接受。
- 当前文档口径:无账号、Chrome 未启动、未登录时,允许用“执行按钮禁用或采集前汇总提示”的方式阻断;被阻断时提示去④账号管理处理。
- 当前实现:采集按钮不静态置灰,点击后由
CollectWorker._preflight预检。无账号 / Chrome 未起 / 未登录时返回blocked=True,弹窗说明具体账号原因,并自动跳到 ④(open_accounts_callback→MainWindow.open_accounts_tab)。 - 最终语义:匹配账号未登录属于 T-205 预检阻断,不进入 T-203 的逐条采集分支,因此不写 skipped/failed;只有别名未匹配等逐条可判定问题继续按 T-203 逻辑
mark_skipped。
评审判断:接受该实现,作为最终方案记录。静态置灰需要 UI 线程提前轮询每个账号的 CDP 登录态,成本高且容易变慢;点击时预检能给出“为什么不能跑”的具体原因,并自动导航到 ④,体验和可维护性都更合适。
四、小问题(不影响验收)
_on_collect_row_updated每条 row_updated 都整表refresh_tasks()(重查 DB + 重建 model)。大批量时偏向 O(n²) 次 DB 读,属性能小瑕,非正确性问题;可改单行局部更新。- 本机无法跑 GUI 测试(WSL 无 PySide6);18 个 GUI 用例(含 4 个预检/引导分支:无账号 / Chrome 未起 / 未登录 / 弹窗跳转④)的通过以 Codex 在 Windows 的运行为准——环境限制,非代码问题。
五、待办 / 边界
- ⚠️
CollectWorker/editor.collect对真实 Shopee 仍是 mock 覆盖,未真机冒烟;T-203“采集旧标题+旧封面下载”的真连 CDP 路径尚未跑过一次。 - 建议:进 Phase 3(AI 生成)前,账号④走通(启动→人工登录→检测)后,对 Tab① 做一次真机采集冒烟(导入小 Excel → 采集 1~2 条 → 看
images/<slug>/出图 + 回写原 Excel),确认 CDP 链路在新代码下无回归。
六、总评
合格偏上的工程交付:excel 解析/回写健壮且本机实测通过,worker 线程纪律与预检引导到位,测试覆盖密(含 4 个预检/引导分支)。T-205 的“预检拦截 + 引导去④”方案已接受并与当前文档对齐。可推进 Phase 3(T-301 app/ai.py)。