docs(tasks): add promotion status misclassification fix

This commit is contained in:
chengma
2026-07-20 10:47:43 +08:00
parent ffc4cd8ca2
commit b3d9857b3e
+59
View File
@@ -0,0 +1,59 @@
---
id: T-673
title: 促销编辑提示商品状态误判修复
status: TODO
phase: 7
deps: [T-667, T-672]
created: 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` 的商品状态契约。
## 验证
```bash
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 调用或线上商品更新。
- 不把促销导致的字段可编辑性限制解释为标题更新许可;本任务只修复商品生命周期状态的误分类。
## 执行记录
- 待实现。