Files
cmshoppe/docs/reviews/2026-06-27-T001-T103-acceptance.md
T
chengmaandClaude Opus 4.8 6d821f89e2 docs: T-001~T-103 验收报告
- 新增 docs/reviews/2026-06-27-T001-T103-acceptance.md(逐任务核对、已验证事实保留、真机冒烟待办)
- progress.md 追加审查指针

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 09:53:05 +08:00

4.3 KiB
Raw Blame History

验收报告 · T-001 ~ T-103(含 T-000/T-004/T-005/T-006)

  • 日期:2026-06-27
  • 范围:Codex 完成的 Phase 0 地基(T-000T-006)+ Phase 1 账号与启动(T-101T-103)
  • 评审方式:编译检查 + 单元测试 + 逐模块源码阅读 + 对照 docs/api.md/docs/04-architecture.md/docs/06-tasks.md 契约
  • 结论:通过。按文档完成,忠实于已验证事实,质量偏上。

一、验证方法与结果

python3 -m compileall app main.py        # OK
python3 -m unittest discover -s tests    # Ran 22 tests, OK (skipped=2)

2 个 skip 为 app.excel / app.prompts 的契约测试(模块尚未实现则自动跳过,实现后即校验),属预期。

二、逐任务核对

任务 结论 关键核对
T-000 包结构 ✅ app/ 包 + main.py + __main__.py;prototypes 导入已修正
T-001 editor.py ✅ 已验证 CDP 事实全部对上(见第三节);满 9 张不臆造删除,返回 FULL_IMAGE_SLOTS 留 T-502
T-002 appconfig.py+config.json ✅ 默认值齐;response_timeout 按分辨率派生;_assert_no_secrets 强制 config.json 不含密钥
T-003 db.py+SQLite ✅ WAL/busy_timeout/foreign_keys;建表幂等;set_collected/generated/applied 等齐;schema 与架构 5.2 双向同步
T-004 .gitignore ✅ 配置/密钥/DB/凭证/图片全部排除
T-005 ai_models 后端 ✅ category 过滤、唯一名校验、至少各一个 text/image、_mask_api_key 打码、get_model
T-006 测试基座 ✅ 22 测试通过;excel/prompts 用契约测试自动 skip
T-101 slug+目录 ✅ 规范化 + sha1 后缀保证唯一;路径绝对化;按需建目录
T-102 chrome.py 启动器 ✅ 正好三参数;/json/version 探测用空 ProxyHandler 绕过系统代理
T-103 登录保活+检测 ✅ 登录页重定向 / 缺 SPC_ST·SPC_U 判未登录;5 个登录单测覆盖

三、已验证 CDP 事实保留情况(最关键)

app/cdp.py 完整保留三处防护:清除 *_proxy 环境变量、requests.trust_env=False、websocket 连接 suppress_origin=True。

app/editor.py 与原型逐项一致:

事实 实现
标题输入框 XPath //input[@class='eds-input__input' and string-length(@modelvalue)>24] ✅
SPA 就绪判断 标题框 + itembox + 上传 input 三者皆存在 ✅
写标题让 Vue 感知 原生 setter + 派发 input/change,校验 value==modelvalue==新值 ✅
上传输入框 .shopee-image-manager__upload input[type=file] + DOM.setFileInputFiles ✅
上传成功判断 轮询张数 +1 且新图 src 含 susercontent、非 blob: ✅
封面=第一位 拖拽落点 first.left - 0.30*w ✅
更新按钮 button.eds-button 中 <span>更新</span>,禁用态识别 ✅
登录检测 登录页 URL 或缺 SPC_ST/SPC_U → 未登录 ✅

四、值得肯定

  1. 不臆造未验证内容:满 9 张删除封面未硬写,明确注释"确认框选择器未验证,留 T-502"。
  2. 文档↔代码一致:db schema 比原 5.2 丰富(batches 表、stage/status 分离、*_attempts 重试、行级定位 source_file_abs/sheet/row/row_key),但架构 5.2 已同步更新。
  3. 工程加分项:SQLite 多线程连接纪律、密钥脱敏与 _assert_no_secrets 守卫、契约式 pending 测试。

五、小问题(不影响验收,可不改)

  • editor.replace_cover 在 setFileInputFiles 后又手动派发一次 input/change(原型无,冗余但无害)。
  • collect() 旧封面写死 .jpg 扩展名(Shopee 封面基本为 jpg,影响极小)。

六、待办 / 边界

  • ⚠️ T-001 验收原文为"在测试商品跑通",但本轮测试均为 mock CDP,未连真实 Shopee。editor.py 是对此前已在线验证过的原型的忠实移植,可信度高,但这份新代码尚未在真实 Shopee 上重新冒烟。
  • 建议:接 GUI(T-104+)前,用 prototypes 同款环境对 editor.py 做一次真机冒烟(打开测试商品 → 采集 → 改标题 → 换封面,不提交),确认移植无回归。

七、总评

合格偏上的工程交付:按文档、守纪律、有测试、不臆造。可放心推进 T-104(PySide6 主窗口骨架)。