Files
cmshoppe/docs/tasks/T-673.md
T

5.6 KiB
Raw Blame History

id, title, status, phase, deps, created
id title status phase deps created
T-673 促销编辑提示商品状态误判修复 DONE 7
T-667
T-672
2026-07-20

T-673 促销编辑提示商品状态误判修复

问题 / 背景

历史批次 2026-07-10T10:56:14 的 13 条任务已有新封面,③选择「只更新封面」时仍被全部拦截。排查发现:旧状态重检把蝦皮横幅「由於正在進行促銷,以下一些欄位無法進行編輯,數值將顯示為灰色。」保存为显式 unknown。

现有 product_status.classify_alerts() 将任何未命中「审核中 / 您的商品未上架」白名单的 warning 横幅都归为 unknown。促销字段受限不是商品生命周期异常;将其作为商品状态未知会阻断仅更新封面的正常流程。T-667 的历史默认迁移只处理空状态,且正确地不覆盖已保存的 unknown,因此无法修复这批已被误写的数据。

方案

  • 在共享 app/product_status.py 增加仅针对已确认文案特征的识别:标题同时表达「促销 / 促銷」和「无法 / 無法编辑 / 編輯」时,视为非商品状态警示。它不单独形成商品状态,也不作为 unknown 的理由。
  • classify_alerts() 保持状态优先级:同页若同时出现「审核中」或「您的商品未上架」,仍优先返回 reviewing 或 unlisted;只有页面成功读取、所有有效 warning 均为该已知促销编辑提示时,才返回 normal。其他未识别横幅、DOM 异常、非法返回仍返回 unknown。
  • 在 db.init_db() 增加幂等历史修复:仅处理商品状态功能上线前的未软删除批次中,product_status='unknown' 且 product_status_note 精确符合上述促销编辑提示特征的记录;改为 normal,写明「历史商品状态修正:促销编辑提示不属于商品状态异常」,保留原 product_status_at,并更新 updated_at。不得批量覆盖其他 unknown、unlisted、reviewing、normal 或上线后批次。
  • 更新商品状态架构/API/路由说明:促销字段编辑限制不属于商品状态;③仍只允许 normal,真正未知状态继续拦截。③的「商品状态不允许更新」提示不再引导已移除的“重新检测商品状态”入口。

验收标准

  • 纯逻辑识别繁体和简体促销编辑提示为 normal;同页同时有促销提示和未上架/审核中横幅时,仍分别返回 unlisted/reviewing;其他未识别横幅、非法响应保持 unknown。
  • 数据库初始化只修复上线前、活动批次中具有该已知促销提示的显式 unknown;修改后的记录可进入③只更新封面的既有内容预检。
  • 其他历史 unknown、上线后相同提示、已软删除记录以及已确认 normal/unlisted/reviewing 均不被改写;重复 init_db() 不再修改已修复记录的 updated_at。
  • ③在全是该历史修复记录且新封面完整时,build_apply_plan(..., "cover") 返回可执行任务,不创建新的商品状态例外通道。
  • 用户可见提示为中文,不再提示用户使用已移除的商品状态重检入口。

测试与文档

  • tests/test_product_status.py 覆盖促销横幅的繁简识别、多个横幅优先级和未知保护。
  • tests/test_db.py 覆盖精确历史修复范围、重复初始化和③封面预检结果。
  • 更新 docs/04-architecture.md、docs/routes.md、docs/api.md 的商品状态契约。

验证

py -3.10 -m unittest discover -s tests -p "test_product_status.py"
py -3.10 -m unittest discover -s tests -p "test_db.py"
py -3.10 -m unittest discover -s tests -p "test_gui.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

非目标

  • 不把所有 unknown 自动改为 normal,不放宽③对真实未知、未上架和审核中商品的拦截。
  • 不新增历史状态重检按钮、强制更新开关、Chrome 访问、AI 调用或线上商品更新。
  • 不把促销导致的字段可编辑性限制解释为标题更新许可;本任务只修复商品生命周期状态的误分类。

执行记录

  • 在 product_status.classify_alerts() 增加繁简促销编辑提示识别:该提示单独出现时按 normal,同页出现「审核中」或「您的商品未上架」仍优先返回真实异常状态;其他未识别横幅、DOM 异常和非法返回仍为 unknown。
  • 在 db.init_db() 增加幂等精确修复:仅处理商品状态功能上线前、未软删除批次中由该促销提示误写的 unknown,修正为 normal、保留原检测时间并写入历史修正备注;其他未知、已确认异常、上线后批次和软删除数据均不改写。
  • ③状态拦截提示改为中文安全说明,不再引导用户使用已移除的「重新确认商品状态」入口;同步更新架构、路由和 API 文档。
  • 已对本机运行时数据库执行初始化迁移核验:批次 20260710_105614_09b176d6 的 13 条促销误判记录均已修正为 normal;只更新封面预检结果为候选 13 条、可执行 13 条、状态排除 0 条、缺少封面 0 条。未打开 Chrome、未调用 AI、未提交线上更新。
  • 验证通过:py -3.10 -m unittest discover -s tests -p "test_product_status.py"(7 项)、py -3.10 -m unittest discover -s tests -p "test_db.py"(21 项)、py -3.10 -m unittest discover -s tests -p "test_gui.py"(206 项)、py -3.10 -m unittest discover -s tests(625 项)、py -3.10 -m ruff check app tests main.py、py -3.10 -m compileall app main.py、git diff --check。