diff --git a/docs/tasks/T-702.md b/docs/tasks/T-702.md new file mode 100644 index 0000000..0c0d522 --- /dev/null +++ b/docs/tasks/T-702.md @@ -0,0 +1,81 @@ +--- +id: T-702 +title: 修复物流校验 Toast 被误判为封面上传失败 +phase: 8 +deps: [T-571] +status: TODO +created: 2026-07-27 +--- + +## 问题 / 背景 + +③「更新蝦皮」更新商品 `57064892919` 的封面时,页面出现物流校验提示: + +- `超過物流最長邊限制` +- `此物流選項不支援較長備貨商品` + +程序把第一条提示归类为图片上传错误,并返回: + +`新封面上传失败:超過物流最長邊限制` + +本地诊断日志显示第一次运行删除旧封面后,图片数量已由 7 恢复为 8,`cdn_count=8`、`blob_count=0`、`busy_count=0`,说明新图已经取得蝦皮 CDN 地址;程序却在识别新图和拖到第一位之前返回 `UPLOAD_PAGE_ERROR`。第二次运行又在删除第一张后,被同一残留物流提示阻断图片管理器稳定检查,未执行本次上传。 + +根因是 `JS_UPLOAD_STATE` 的页面 Toast 分类规则把通用词 `超過/超过` 同时当作错误语义和上传语义。`超過物流最長邊限制` 因此进入 `error_toasts`,随后同时阻断删除后的稳定等待和上传成功检测。现有回归测试只覆盖 `此物流選項不支援較長備貨商品`,没有覆盖包含 `超過` 的物流文案。 + +## 方案 + +### 1. 收紧上传 Toast 分类 + +- 页面 Toast 先保留在 `page_error_toasts`,用于诊断和最终提交阶段判断。 +- 只有包含明确图片上传语义的错误才进入 `error_toasts`,例如图片、封面、照片、图像、上传、文件、重复及对应英文关键词。 +- `超過/超过`、`格式`、`大小`、`尺寸`等通用限定词不能单独构成上传语义;例如: + - `超過物流最長邊限制`:不是上传错误。 + - `此物流選項不支援較長備貨商品`:不是上传错误。 + - `圖片大小超過限制`:是上传错误,因为同时包含明确的图片语义。 + - `有1張重複的圖片`:仍是重复图片上传错误。 +- 图片管理器内部识别到的错误继续按上传错误处理,不削弱图片格式、大小、裁剪、重复和上传队列失败的现有保护。 + +### 2. 统一 Python 与页面脚本的分类语义 + +- 在 `app/editor.py` 提供可单元测试的上传 Toast 分类函数。 +- `_upload_state()` 对 CDP 返回结果做统一归一化,避免仅依赖难以直接测试的 JavaScript 正则。 +- 页面脚本同步收紧上传关键词;Python 归一化作为最终分类边界,保证真实页面和测试替身采用同一规则。 +- 上传成功仍以新图片取得不在上传前快照中的 `susercontent` 地址为正向证据;不改变删除第一张、等待稳定、上传、拖到第一位的既有顺序。 + +### 3. 提交阶段保留真实物流错误 + +- 本任务只阻止物流提示被错误归因到“新封面上传失败”。 +- 物流提示不得被静默丢弃;若最终点击「更新」后仍被蝦皮阻止,应由提交后状态识别为商品物流资料校验失败或保留蝦皮原始提示。 +- 不自动修改商品包裹尺寸、物流选项或较长备货设置,不绕过蝦皮校验。 + +### 4. 回归测试与文档 + +- 增加精确文案 `超過物流最長邊限制` 的回归测试,确认不会阻断图片管理器稳定、上传完成或拖拽。 +- 覆盖图片大小超限、图片格式错误和重复图片仍被识别为上传错误。 +- 同步 `docs/04-architecture.md` 第七节,明确通用限定词不能单独判定为上传错误。 + +## 验收要点 + +- [ ] `超過物流最長邊限制` 和 `此物流選項不支援較長備貨商品` 只保留在 `page_error_toasts`,不进入 `error_toasts`。 +- [ ] 页面存在上述物流提示时,删除后的图片区域仍能进入稳定状态,新封面可上传并拖到第一位。 +- [ ] `圖片大小超過限制`、`圖片格式錯誤` 和 `有1張重複的圖片` 仍会中止封面上传并给出中文错误。 +- [ ] 新封面成功标准仍是不在上传前快照中的新 `susercontent` 地址,不把数量变化或任意 Toast 当作成功。 +- [ ] 最终提交遇到真实物流校验时仍能报告失败,不自动修改或绕过物流配置。 +- [ ] 不修改标题更新、旧封面备份校验、删除第一张、上传入口点击、拖拽排序和提交确认逻辑。 +- [ ] 验证通过: + - `py -3.10 -m unittest discover -s tests -p test_editor_login.py` + - `py -3.10 -m unittest discover -s tests` + - `py -3.10 -m ruff check app tests main.py` + - `py -3.10 -m compileall app main.py` + - `git diff --check` + +## 边界(不改什么) + +- 不自动修正商品包裹尺寸、物流渠道、备货天数或其他商品资料。 +- 不改变封面删除、上传、拖拽、恢复或最终提交的业务顺序。 +- 不新增 CDP 客户端、浏览器自动登录、验证码处理或风控绕过。 +- 不清理或提交本地 `data/logs/`、数据库、图片和账号登录态。 + +## 执行记录 + +- 2026-07-27:根据商品 `57064892919` 的真实更新日志创建任务。确认第一次运行新封面已取得蝦皮 CDN 地址,但 `超過物流最長邊限制` 因通用关键词 `超過` 被误归类为上传错误;第二次运行又在删除后稳定检查阶段被同一物流提示阻断。