docs(tasks): split T-662 product status workflow
This commit is contained in:
@@ -1,134 +0,0 @@
|
||||
---
|
||||
id: T-662
|
||||
title: 商品状态采集与三模块状态过滤
|
||||
status: TODO
|
||||
phase: 7
|
||||
deps: [T-659]
|
||||
created: 2026-07-18
|
||||
---
|
||||
|
||||
# T-662 商品状态采集与三模块状态过滤
|
||||
|
||||
## 问题 / 背景
|
||||
|
||||
①导入采集的商品ID列表中可能混有异常状态商品(未上架、审核中等)。当前链路只在采集阶段拦截「页面打不开」级别的失效商品(`app/editor.py:454` `PRODUCT_UNAVAILABLE_TEXT_MARKERS`:已删除/已下架/无权限等);**编辑页仍能打开的「未上架」「审核中」商品会正常采集入库 → ②照常消耗点数生成 → ③更新无意义或有触发重新审核的风险**。
|
||||
|
||||
`tasks` 表没有蝦皮侧商品状态字段,①②③均无法按状态过滤。
|
||||
|
||||
用户已提供两份编辑页状态横幅的真实 HTML 样本(`docs/html/未上架商品提示.html`、`docs/html/审核中商品提示 .html`),确认状态以 Shopee EDS 组件结构化暴露,CDP 抓取前置验证已基本完成。
|
||||
|
||||
## 需求定稿
|
||||
|
||||
1. 采集阶段从商品编辑页读取商品状态并落库(快照语义)。
|
||||
2. ①导入采集:任务列表增加状态列与状态筛选;采集汇总报告异常状态条数。
|
||||
3. ②AI生成:生成候选**默认排除**异常状态商品,不为其消耗点数;确认信息说明排除数量。
|
||||
4. ③更新蝦皮:更新候选**默认排除**异常状态商品;跳过统计并入 T-659 的确认弹窗模式。
|
||||
5. 历史数据无状态记为「未知」,默认**不排除**;重新采集即可补齐/刷新状态。
|
||||
|
||||
## 实现方案
|
||||
|
||||
### 1. 状态检测契约(依据 HTML 样本)
|
||||
|
||||
编辑页状态横幅结构(两样本一致):
|
||||
|
||||
```text
|
||||
.eds-alert.eds-alert--warning
|
||||
├─ .eds-alert-title ← 状态判定锚点(文本)
|
||||
└─ .eds-alert-desc ← 补充说明(存诊断)
|
||||
```
|
||||
|
||||
- 判定以 `.eds-alert-title` 的**归一化文本**(trim + 繁简兼容)为准,白名单匹配:
|
||||
- `審核中` / `审核中`(样本尾部有空格,必须 trim)→ `审核中`;
|
||||
- `您的商品未上架` → `未上架`(样本 desc「您的商品已被您下架。」为卖家自主下架;平台强制下架 desc 不同,原文落库后日后可细分)。
|
||||
- 无已识别横幅 → `在售`。
|
||||
- **纪律**:
|
||||
- 禁止依赖 `data-v-*` 属性(Vue scoped-CSS 构建哈希,发版即变);只用 `eds-alert`/`eds-alert-title` 设计系统类名 + 文本白名单;
|
||||
- `eds-alert--warning` 是通用组件,编辑页可能有无关警告(如图片质量建议)——未识别的横幅**不改变状态**,但 title 原文写入状态原文字段供日后扩白名单(如违规/禁卖,暂无样本);
|
||||
- 状态检测失败(DOM 查询异常等)不使采集失败,记「未知」并写日志;
|
||||
- 现有 `PRODUCT_UNAVAILABLE_TEXT_MARKERS` 失效检测**保留不动**,作为③执行层最后防线。
|
||||
|
||||
### 2. 数据模型(additive 迁移)
|
||||
|
||||
- `tasks` 表新增可空列:
|
||||
- `product_status TEXT`——枚举:`在售`/`未上架`/`审核中`/`未知`(NULL 视同「未知」);
|
||||
- `product_status_note TEXT`——横幅 title+desc 原文(诊断与日后细分);
|
||||
- `product_status_at TEXT`——快照时间(ISO 8601)。
|
||||
- 采集成功时写入三列;重新采集覆盖刷新(快照语义:状态可能过期,以最近采集为准)。
|
||||
- 迁移幂等,旧库直接升级;历史行三列为 NULL。
|
||||
|
||||
### 3. 采集抓取(`app/editor.py::collect()`)
|
||||
|
||||
- 在编辑页已加载后、抓取旧标题旧封面的同一会话内,按第 1 节契约读取状态横幅(一次 DOM 查询,不增加页面跳转)。
|
||||
- 采集步骤回调与日志包含状态结果;采集汇总新增「异常状态 N 条(未上架 x / 审核中 y)」。
|
||||
- 实现时把检测契约与两份 HTML 样本作为证据登记进 `docs/04-architecture.md` 第七节「CDP 已验证事实」。
|
||||
|
||||
### 4. ①导入采集(`app/gui/tabs/collect.py`)
|
||||
|
||||
- 任务列表增加「商品状态」列(在售/未上架/审核中/未知,异常状态用警示色)。
|
||||
- 筛选条增加状态下拉:`全部`(默认)/`在售`/`未上架`/`审核中`/`未知`。
|
||||
- 悬停或详情可见状态原文与快照时间。
|
||||
|
||||
### 5. ②AI生成(`app/gui/tabs/generate.py`)
|
||||
|
||||
- 生成候选默认排除 `未上架`/`审核中`;`在售`/`未知` 正常参与(「未知」不排除,避免历史数据全被拦)。
|
||||
- 筛选条增加状态下拉(默认「排除异常状态」,可切「全部」后异常商品重新可选——用户明确要生成时不拦死)。
|
||||
- 开始生成的确认/状态信息注明「已排除异常状态 N 条(示例商品ID:…)」;被排除记录不消耗点数、状态与 stage 不变。
|
||||
|
||||
### 6. ③更新蝦皮(`app/gui/tabs/apply.py`)
|
||||
|
||||
- 更新候选默认排除 `未上架`/`审核中`,并入 T-659 的「剔除 + 知情确认」框架:确认弹窗新增「跳过 N 条异常状态商品(未上架 x / 审核中 y,示例商品ID:…)」行。
|
||||
- 剔除后无任务可执行时沿用 T-659 的整体中止路径,文案区分「全部为异常状态商品」的情况。
|
||||
- 状态下拉同②(默认排除,可切全部);「检查本轮更新」(dry_run)与正式更新行为一致。
|
||||
- 快照过期兜底:③执行层现有商品失效检测不动;更新因商品状态失败的记录,`last_error` 如实记录。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [ ] 采集「审核中」样本结构页面 → `product_status=审核中`;「未上架」样本 → `未上架`;无横幅 → `在售`;未识别横幅 → 状态不变但原文落库。
|
||||
- [ ] 状态判定不依赖 `data-v-*`;title 文本 trim 后繁简均可匹配。
|
||||
- [ ] 状态检测异常不使采集失败,记「未知」并写日志;`PRODUCT_UNAVAILABLE_TEXT_MARKERS` 行为不变。
|
||||
- [ ] 旧库升级迁移幂等;历史行状态显示「未知」,②③默认不排除。
|
||||
- [ ] 重新采集刷新状态与快照时间。
|
||||
- [ ] ①列表显示状态列与筛选;采集汇总含异常状态统计。
|
||||
- [ ] ②默认不为「未上架/审核中」商品创建生成任务、不消耗点数;切「全部」后可强制生成;排除说明含条数与示例商品ID。
|
||||
- [ ] ③确认弹窗含异常状态跳过统计;剔除后为 0 走 T-659 中止路径;dry_run 与正式一致。
|
||||
- [ ] 被排除记录的 stage、status、Excel 均不因排除而改变。
|
||||
- [ ] 状态列/筛选在 `1180x760` 与最小窗口尺寸不截断;全部用户可见文案为中文。
|
||||
- [ ] ②③既有筛选(批次/店铺/商品ID/状态)与本状态筛选可叠加,互不破坏。
|
||||
|
||||
## 测试要求
|
||||
|
||||
- 纯逻辑:状态横幅解析(两份样本 HTML 的 title/desc、trim、繁简、未识别横幅、无横幅、多横幅共存取白名单命中项)。
|
||||
- DB:迁移幂等、三列读写、NULL 语义、重新采集覆盖。
|
||||
- ②:默认排除口径、「未知」不排除、切全部后可选、点数不消耗断言。
|
||||
- ③:跳过统计文案、全异常中止、dry_run 一致性(延用 T-659 在 `tests/test_gui.py` 的用例框架)。
|
||||
- 采集:状态检测失败降级「未知」不阻断采集。
|
||||
|
||||
## 文档同步
|
||||
|
||||
- `docs/04-architecture.md` 第七节登记「编辑页状态横幅」CDP 已验证事实(含选择器契约、两份 HTML 样本路径、data-v 禁用纪律)。
|
||||
- 不修改冻结的 `docs/06-tasks.md`。
|
||||
|
||||
## 验证
|
||||
|
||||
```bash
|
||||
py -3.10 -m unittest tests.test_editor_login
|
||||
py -3.10 -m unittest tests.test_db
|
||||
py -3.10 -m unittest tests.test_gui
|
||||
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
|
||||
```
|
||||
|
||||
## 非目标
|
||||
|
||||
- 不采集/识别「已售罄」「违规/禁卖」状态(无样本;违规文案留白名单扩展口,遇实例再补)。
|
||||
- 不自动删除或修改异常状态商品的记录,只过滤不改数据。
|
||||
- 不在①导入阶段拦截(导入时仅有商品ID,状态未知)。
|
||||
- 不做状态定时自动刷新;状态以采集快照为准,用户重新采集即刷新。
|
||||
- 不修改 CDP 登录、Chrome 启动、并发与蝦皮风控相关行为。
|
||||
- 不回写商品状态到 Excel(如需,另立任务)。
|
||||
|
||||
## 执行记录
|
||||
|
||||
- 待实现。
|
||||
@@ -0,0 +1,88 @@
|
||||
---
|
||||
id: T-662a
|
||||
title: 商品状态领域模型、数据库迁移与采集检测
|
||||
status: TODO
|
||||
phase: 7
|
||||
deps: []
|
||||
created: 2026-07-18
|
||||
---
|
||||
|
||||
# T-662a 商品状态领域模型、数据库迁移与采集检测
|
||||
|
||||
## 问题 / 背景
|
||||
|
||||
编辑页仍可打开的「未上架」「审核中」商品当前会被当作普通商品采集,后续可能继续消耗 AI 点数或进入更新流程。真实证据见:
|
||||
|
||||
- `docs/html/未上架商品提示.html`
|
||||
- `docs/html/审核中商品提示.html`
|
||||
|
||||
两份样本均使用 Shopee EDS alert 组件;原「审核中」样本文件名尾部空格已移除,后续文档和测试统一使用无空格路径。
|
||||
|
||||
## 状态契约
|
||||
|
||||
- 新增共享领域模块 `app/product_status.py`,作为①②③唯一状态事实来源,避免各 Tab 重复定义枚举、显示文字和异常判断。
|
||||
- SQLite 保存稳定代码,不保存中文枚举:
|
||||
- `normal`:未发现已知异常横幅;界面显示「正常」,**不宣称一定在售**;
|
||||
- `unlisted`:未上架;
|
||||
- `reviewing`:审核中;
|
||||
- `unknown`:历史 NULL、DOM 检测失败或出现未识别状态横幅。
|
||||
- `NULL` 和非法历史值统一按 `unknown` 读取;`unlisted/reviewing` 属于异常状态,`normal/unknown` 默认可继续后续流程。
|
||||
- 文本归一化:trim、连续空白折叠、繁简白名单兼容;禁止依赖 `data-v-*`。
|
||||
|
||||
## DOM 检测规则
|
||||
|
||||
- 编辑页就绪后一次读取 `.eds-alert.eds-alert--warning` 下的 `.eds-alert-title` 与 `.eds-alert-desc`,返回结构化文本列表,不保存整段 HTML。
|
||||
- 白名单:
|
||||
- `審核中` / `审核中` → `reviewing`;
|
||||
- `您的商品未上架` → `unlisted`。
|
||||
- 查询成功且没有 warning 横幅 → `normal`。
|
||||
- 有 warning 横幅但没有白名单命中 → `unknown`,不得保留旧的 `normal` 或误判正常。
|
||||
- DOM 查询抛错或返回结构非法 → `unknown`,但不使标题/封面采集失败;错误写脱敏诊断日志。
|
||||
- 多横幅时跳过无关警告,取 DOM 顺序中第一个白名单命中项;没有命中则为 `unknown`。
|
||||
- `product_status_note` 只保存归一化后的 title/desc 摘要,最多 2000 字符;`product_status_at` 记录本次检测时间。
|
||||
- 现有 `PRODUCT_UNAVAILABLE_TEXT_MARKERS` 和商品失效 toast 逻辑保持不变。
|
||||
|
||||
## 数据模型与采集接入
|
||||
|
||||
- `tasks` additive 新增:
|
||||
- `product_status TEXT NULL`;
|
||||
- `product_status_note TEXT NULL`;
|
||||
- `product_status_at TEXT NULL`。
|
||||
- `db.init_db()` 使用幂等原位迁移;`Task` dataclass 暴露三字段。
|
||||
- 扩展 `db.set_collected()` 时使用新增 keyword-only 参数,保持现有位置参数调用兼容;标题、封面与商品状态在同一事务写入。
|
||||
- `editor.collect()` 在同一编辑页会话中读取状态,返回状态快照;CollectWorker 透传到 DB。重新采集覆盖三字段。
|
||||
- 状态检测失败时仍可成功采集标题/封面,保存 `unknown` 与当前检测时间。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [ ] 两份真实样本分别识别为 `unlisted/reviewing`;title 尾部空格与繁简不影响结果。
|
||||
- [ ] 无 warning 为 `normal`;未知 warning、DOM 异常和非法返回均为 `unknown`。
|
||||
- [ ] 多横幅共存按约定选择,note 规范化且受长度限制。
|
||||
- [ ] 旧库迁移幂等,历史 NULL 显示语义为「未知」。
|
||||
- [ ] 重新采集覆盖状态、note 和时间;检测失败不阻断标题/封面采集。
|
||||
- [ ] 不改变商品失效判断、Chrome/CDP 页面打开关闭和 Shopee 更新逻辑。
|
||||
|
||||
## 测试与文档
|
||||
|
||||
- `tests/test_editor_login.py`:样本结构、无横幅、未知横幅、多横幅、异常降级与 collect 回归。
|
||||
- `tests/test_db.py`:迁移幂等、NULL 语义、keyword-only 写入与重新采集覆盖。
|
||||
- 更新 `docs/04-architecture.md` 第七节和 `docs/api.md`;登记样本路径、选择器纪律和状态代码。
|
||||
|
||||
## 验证
|
||||
|
||||
```bash
|
||||
py -3.10 -m unittest tests.test_editor_login tests.test_db
|
||||
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`。
|
||||
- 不新增 GUI,不过滤任务,不回写 Excel,不做定时刷新。
|
||||
|
||||
## 执行记录
|
||||
|
||||
- 待实现。
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
id: T-662b
|
||||
title: 导入采集商品状态展示、筛选与汇总
|
||||
status: TODO
|
||||
phase: 7
|
||||
deps: [T-662a]
|
||||
created: 2026-07-18
|
||||
---
|
||||
|
||||
# T-662b 导入采集商品状态展示、筛选与汇总
|
||||
|
||||
## 问题 / 背景
|
||||
|
||||
T-662a 落库商品状态后,①导入采集需要让运营看见状态快照、按状态定位记录,并在本轮采集结束时知道异常商品数量。
|
||||
|
||||
## 方案
|
||||
|
||||
- ①任务表增加「商品状态」列,显示 `正常/未上架/审核中/未知`。
|
||||
- `未上架/审核中` 使用警示色,`未知` 使用中性提示色;不使用红色冒充任务失败。
|
||||
- tooltip 显示状态说明、`product_status_note` 和快照时间;note 为空时不展示空段落。
|
||||
- 现有「状态」标签改为「任务状态」,新增独立「商品状态」下拉,避免两个状态含义混淆。
|
||||
- 商品状态筛选:`全部`(默认)/`正常`/`未上架`/`审核中`/`未知`;与批次、店铺、商品ID、任务状态叠加。
|
||||
- 采集结束汇总增加:异常状态总数、未上架数、审核中数、未知数;只统计本轮成功完成状态检测的结果,不把采集失败重复算入异常。
|
||||
- 运行中禁用新增筛选,结束后恢复;不改变采集候选和执行顺序。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [ ] 历史 NULL 显示「未知」,不会崩溃或隐藏。
|
||||
- [ ] 状态列颜色、tooltip 和筛选结果正确,刷新后保持仍有效的筛选值。
|
||||
- [ ] 汇总区分未上架、审核中和未知,不改变原成功/失败/略过统计。
|
||||
- [ ] 1180x760 与最小窗口下筛选栏、表格标题不重叠或截断。
|
||||
- [ ] 本任务只展示与筛选,不阻断采集、不修改 stage/status/Excel。
|
||||
|
||||
## 测试与文档
|
||||
|
||||
- `tests/test_gui.py` 覆盖列显示、颜色、tooltip、组合筛选、运行态和汇总。
|
||||
- 更新 `docs/routes.md`、`docs/04-architecture.md` 和 `docs/api.md`。
|
||||
|
||||
## 验证
|
||||
|
||||
```bash
|
||||
py -3.10 -m unittest tests.test_gui
|
||||
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
|
||||
```
|
||||
|
||||
## 非目标
|
||||
|
||||
- 不改变②③行为,不自动删除异常商品,不回写商品状态到 Excel。
|
||||
|
||||
## 执行记录
|
||||
|
||||
- 待实现。
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
id: T-662c
|
||||
title: AI生成异常商品默认排除与强制生成确认
|
||||
status: TODO
|
||||
phase: 7
|
||||
deps: [T-662a]
|
||||
created: 2026-07-18
|
||||
---
|
||||
|
||||
# T-662c AI生成异常商品默认排除与强制生成确认
|
||||
|
||||
## 问题 / 背景
|
||||
|
||||
未上架、审核中商品默认继续进入②会消耗 cmhub 点数。②当前点击「开始生成」会直接创建 `GenerateWorker`,没有通用生成确认框,因此不能把不存在的确认流程写成现状。
|
||||
|
||||
## 方案
|
||||
|
||||
- 现有「状态」标签改为「任务状态」,新增独立「商品状态」下拉:
|
||||
- `可生成(默认)`:`normal/unknown`;
|
||||
- `全部`;
|
||||
- `正常/未上架/审核中/未知`。
|
||||
- 保留商品状态筛选前的基础范围快照,用于摘要计算,避免异常记录从模型隐藏后无法统计。
|
||||
- 默认模式不把 `unlisted/reviewing` 传给 `GenerateWorker`,不创建 AI 请求、不消耗点数、不改 stage/status/Excel;摘要、状态栏和本轮日志说明排除数量及示例商品ID。
|
||||
- `unknown` 默认可生成,避免历史数据和临时检测失败被整批拦住。
|
||||
- 用户切换「全部」「未上架」或「审核中」后,如果本轮确实包含异常商品,弹一次中文高风险确认,列出数量、状态、示例商品ID和可能产生点数;默认取消。确认后才允许异常商品进入 worker。
|
||||
- 正常任务不新增通用确认弹窗,保持现有一键开始流程。
|
||||
- UI 可见筛选范围与最终 worker 列表必须分别记录;确认期间数据变化则取消旧计划并要求重新开始。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [ ] 默认可生成模式排除未上架/审核中,正常和未知仍可生成。
|
||||
- [ ] 默认排除记录不产生 worker 任务、cmhub 请求、点数或 DB 状态变化。
|
||||
- [ ] 摘要与日志即使在异常记录被隐藏时仍能显示排除数量。
|
||||
- [ ] 显式显示异常状态后,只有确认才可强制生成;取消不执行。
|
||||
- [ ] 正常批次不增加额外弹窗;停止、进度、重试与现有增量生成不回归。
|
||||
- [ ] 商品状态筛选与批次、店铺、商品ID、任务状态叠加正确。
|
||||
|
||||
## 测试与文档
|
||||
|
||||
- 纯逻辑 helper 覆盖默认排除、未知放行和显式包含。
|
||||
- `tests/test_gui.py` 覆盖隐藏统计、强制确认、取消、worker 列表、点数不消耗边界和运行态。
|
||||
- 更新 `docs/routes.md`、`docs/04-architecture.md` 和 `docs/api.md`。
|
||||
|
||||
## 验证
|
||||
|
||||
```bash
|
||||
py -3.10 -m unittest tests.test_ai tests.test_gui
|
||||
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
|
||||
```
|
||||
|
||||
## 非目标
|
||||
|
||||
- 不修改 AI 接口、价格目录、并发、重试或普通任务的启动交互。
|
||||
|
||||
## 执行记录
|
||||
|
||||
- 待实现。
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
id: T-662d
|
||||
title: 更新蝦皮异常商品过滤与T-659预检整合
|
||||
status: TODO
|
||||
phase: 7
|
||||
deps: [T-662a, T-659]
|
||||
created: 2026-07-18
|
||||
---
|
||||
|
||||
# T-662d 更新蝦皮异常商品过滤与T-659预检整合
|
||||
|
||||
## 问题 / 背景
|
||||
|
||||
③需要在更新内容预检之外处理商品状态。商品状态是采集快照,不能取代 Shopee 执行时校验;同时「显示全部」只是查看范围,不能被误当成更新异常商品的授权。
|
||||
|
||||
## 方案
|
||||
|
||||
- 现有「状态」标签改为「任务状态」,新增独立「商品状态」下拉:
|
||||
- `可更新(默认)`:`normal/unknown`;
|
||||
- `全部`;
|
||||
- `正常/未上架/审核中/未知`。
|
||||
- 保留商品状态筛选前的基础范围快照,显示默认排除数量;即使表格隐藏异常记录,也能在摘要/确认中说明。
|
||||
- 无论商品状态筛选选择什么,`unlisted/reviewing` 都不得传入 `ApplyWorker`;「全部」只用于查看,不构成强制线上更新授权。
|
||||
- 扩展 T-659 结构化预检结果,分别保存:可执行、缺标题、缺封面、未上架、审核中;同一任务只计一次总跳过,但各原因统计可分别展示。
|
||||
- 确认框、状态栏与本轮日志显示异常状态排除数量、分类和示例商品ID。预检排除记录不计入 worker 的成功/略过/失败,不改 stage/status/Excel。
|
||||
- 内容缺失和商品异常全部剔除后没有可执行任务时,按真实主因显示中文中止文案;全部异常时不得误报「更新内容未生成」。
|
||||
- 「检查本轮更新」与正式更新使用同一计划;用户确认期间筛选或数据变化时废弃旧计划。
|
||||
- `unknown` 默认允许更新;现有商品失效 toast、页面校验、账号预检和 T-659 内容校验继续作为执行层防线。
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [ ] 默认可更新模式排除未上架/审核中,正常和未知可进入内容预检。
|
||||
- [ ] 切换「全部」能查看异常记录,但开始更新和 dry-run 仍剔除异常商品。
|
||||
- [ ] 确认框正确合并内容缺失与商品状态原因,同一任务总数不重复。
|
||||
- [ ] 全异常时显示商品状态中止原因;全缺内容时仍保持 T-659 文案。
|
||||
- [ ] 被排除记录不进入 `ApplyWorker`,DB、Excel 和本轮 worker 统计不变。
|
||||
- [ ] T-659 三种更新模式、账号就绪、分批、停止和真实更新确认不回归。
|
||||
|
||||
## 测试与文档
|
||||
|
||||
- `tests/test_gui.py` 覆盖默认排除、显示全部、原因去重、全异常中止、dry-run 一致性和 T-659 回归。
|
||||
- 更新 `docs/routes.md`、`docs/04-architecture.md` 和 `docs/api.md`。
|
||||
|
||||
## 验证
|
||||
|
||||
```bash
|
||||
py -3.10 -m unittest tests.test_gui
|
||||
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
|
||||
```
|
||||
|
||||
## 非目标
|
||||
|
||||
- 不根据采集快照自动修改蝦皮商品状态,不提供异常商品强制更新入口,不做实时状态刷新。
|
||||
|
||||
## 执行记录
|
||||
|
||||
- 待实现。
|
||||
Reference in New Issue
Block a user