6.2 KiB
6.2 KiB
id, title, phase, deps, status, created
| id | title | phase | deps | status | created | |
|---|---|---|---|---|---|---|
| T-702 | 修复物流校验 Toast 被误判为封面上传失败 | 8 |
|
DONE | 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.pypy -3.10 -m unittest discover -s testspy -3.10 -m ruff check app tests main.pypy -3.10 -m compileall app main.pygit diff --check
边界(不改什么)
- 不自动修正商品包裹尺寸、物流渠道、备货天数或其他商品资料。
- 不改变封面删除、上传、拖拽、恢复或最终提交的业务顺序。
- 不新增 CDP 客户端、浏览器自动登录、验证码处理或风控绕过。
- 不清理或提交本地
data/logs/、数据库、图片和账号登录态。
执行记录
- 2026-07-27:根据商品
57064892919的真实更新日志创建任务。确认第一次运行新封面已取得蝦皮 CDN 地址,但超過物流最長邊限制因通用关键词超過被误归类为上传错误;第二次运行又在删除后稳定检查阶段被同一物流提示阻断。 - 2026-07-27:收紧
JS_UPLOAD_STATE的上传语义关键词,移除不能单独证明上传错误的格式、大小、尺寸、像素、分辨率和超过等通用词;新增 Python 侧_normalize_upload_state()作为最终分类边界,物流提示继续保留在page_error_toasts,但不再进入阻断上传的error_toasts。 - 2026-07-27:扩展
FakeCoverCDP回归场景,覆盖真实文案超過物流最長邊限制、较长备货物流提示、图片大小超限和重复图片;确认物流提示不阻断删除后稳定、上传和拖拽,明确图片错误仍会阻断。 - 2026-07-27:同步
docs/04-architecture.md第七节。未改变旧封面备份、删除第一张、上传入口点击、CDN 成功判据、拖拽、前台恢复或最终提交逻辑。 - 2026-07-27:验证通过:
py -3.10 -m unittest discover -s tests -p test_editor_login.py(65 项)、py -3.10 -m unittest discover -s tests(700 项)、py -3.10 -m ruff check app tests main.py、py -3.10 -m compileall app main.py、git diff --check。未执行真实商品更新,以免在未经过③批量确认边界的情况下再次删除线上第一张封面。