5.6 KiB
5.6 KiB
id, title, status, phase, deps, created
| id | title | status | phase | deps | created | ||
|---|---|---|---|---|---|---|---|
| T-673 | 促销编辑提示商品状态误判修复 | DONE | 7 |
|
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。