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

58 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-667
title: 历史批次默认架上商品与移除状态重检入口
status: DONE
phase: 7
deps: [T-662a, T-662d, T-666]
created: 2026-07-20
---
# T-667 历史批次默认架上商品与移除状态重检入口
## 问题 / 背景
T-662a 于 2026-07-18 16:34:37(本地时间)首次上线商品状态字段。此前导入的历史批次没有 `product_status` 快照;T-666 要求用户逐条打开历史商品详情页补检,几百条记录会带来明显等待和额外操作负担。产品决定:商品状态功能上线前创建、且状态为空的历史批次,默认按架上商品处理,以便继续生成和更新;不再提供用户手动状态重检入口。
## 方案
- 定义稳定的商品状态功能上线时间常量 `2026-07-18T16:34:37`。`db.init_db()` 每次启动执行幂等迁移:仅对未软删除批次中 `batches.created_at` 早于该时间,且 `tasks.product_status` 为 `NULL` 或空白的记录写入 `normal`。
- 同时写 `product_status_note=历史批次默认按架上商品处理(未实时检测)`,保留 `product_status_at=NULL`,避免把默认值伪装为实时页面检测;更新 `updated_at`。已有 `normal/unlisted/reviewing/unknown` 均不得覆盖,功能上线后创建的批次也不得自动迁移。
- 移除①「重新检测商品状态」按钮、确认框、活动计时、专用 Worker、编辑器入口、`run_type=status_recheck` 运行日志及只为该入口添加的 GUI/测试/文档说明。常规①采集仍照现有流程实时检测并保存状态,新批次不受影响。
- ③继续只允许 `product_status=normal` 更新。历史默认记录因已迁移为 `normal` 可进入既有更新内容预检;不再显示“尚未检测商品状态”或引导用户点击重检。真实已保存的 `unknown` 仍显示「状态未知」并保持拦截。
## 验收标准
- [x] 启动或 `db.init_db()` 后,状态功能上线时间前的活动批次中 NULL/空状态任务变为 `normal`,备注为历史默认语义,`product_status_at` 仍为空;重复初始化不重复改写。
- [x] 上线时间等于或晚于阈值的 NULL/空状态任务不迁移,已有四类状态也不覆盖,软删除批次不迁移。
- [x] ③历史默认 `normal` 记录可按原有标题/封面完整性规则进入更新;已保存 `unknown` 仍按「状态未知」阻断。
- [x] ①不再显示「重新检测商品状态」,运行中控件状态、采集活动计时、回写逻辑和正常采集不回归。
- [x] 不打开 Chrome、不访问商品详情页、不新增 AI 调用、不修改 Excel、不更新线上商品。
## 测试与文档
- `tests/test_db.py` 覆盖历史迁移范围、幂等、边界时间、已有状态及软删除批次保护。
- `tests/test_product_status.py`、`tests/test_gui.py` 覆盖③历史默认正常可更新、真实 unknown 仍阻断,以及①重检入口移除。
- 更新 `docs/routes.md`、`docs/04-architecture.md`、`docs/api.md`;T-666 保留完成记录并标明已被本任务替代。
## 验证
```bash
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
```
## 非目标
- 不把功能上线后创建的缺失状态任务自动视为正常。
- 不覆盖已确认的未上架、审核中、状态未知或正常快照。
- 不为历史迁移新增确认弹窗、状态强制更新开关或详情页批量检测。
## 执行记录
- 在 `db.init_db()` 增加幂等历史状态迁移:仅迁移上线时间前、未软删除批次的 NULL/空状态任务,写入 `normal` 和明确的历史默认备注,保留 `product_status_at=NULL`。
- 移除 T-666 的①「重新检测商品状态」入口、专用 Worker、编辑器流程、运行日志及其③引导;常规采集的实时状态读取保持不变。
- 更新架构、路由和 API 文档,并在 T-666 保留历史执行记录及其被替代说明。
- 验证通过:`py -3.10 -m unittest discover -s tests`(619 项)、`py -3.10 -m ruff check app tests main.py`、`py -3.10 -m compileall app main.py`、`git diff --check`。