- 新增 docs/reviews/2026-06-27-T001-T103-acceptance.md(逐任务核对、已验证事实保留、真机冒烟待办) - progress.md 追加审查指针 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.3 KiB
4.3 KiB
验收报告 · T-001 ~ T-103(含 T-000/T-004/T-005/T-006)
- 日期:2026-06-27
- 范围:Codex 完成的 Phase 0 地基(T-000
T-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 → 未登录 ✅ |
四、值得肯定
- 不臆造未验证内容:满 9 张删除封面未硬写,明确注释"确认框选择器未验证,留 T-502"。
- 文档↔代码一致:db schema 比原 5.2 丰富(batches 表、stage/status 分离、
*_attempts重试、行级定位source_file_abs/sheet/row/row_key),但架构 5.2 已同步更新。 - 工程加分项: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 主窗口骨架)。