Files

5.0 KiB
Raw Permalink Blame History

id, title, status, phase, deps, created
id title status phase deps created
T-662c AI生成范围确认与异常商品点数保护 DONE 7
T-662a
2026-07-18

T-662c AI生成范围确认与异常商品点数保护

问题 / 背景

未上架、审核中或状态未知商品进入②会消耗 cmhub 点数。客户需要在每轮付费生成前明确选择范围,并让安全选项始终成为默认值;采集时选择“所有状态”只代表保存资料,不能自动授权后续扣点。

方案

  • 本任务不新增商品状态列或下拉框。点击「开始生成」后,先按现有批次、店铺、商品ID、任务状态、生成内容模式和“缺什么生成什么”规则构造真实候选;候选为空时保持现有提示,不弹范围框。
  • 候选存在时按 T-662a 状态代码分组,弹出中文生成范围对话框:
    • 只生成状态正常的商品:默认按钮,仅包含 normal;
    • 生成所有状态的商品:红色文字,包含 normal/unlisted/reviewing/unknown;
    • 取消:不创建 Worker、不调用 cmhub、不产生点数和 DB 变化。
  • 弹窗展示本轮真实候选总数及正常、未上架、审核中、未知数量;说明“生成所有状态”会让非正常状态商品也调用 AI,可能额外消耗点数。示例商品ID数量受限,日志不得泄露接口路径或密钥。
  • 若现有价格目录能依据本轮生成标题/图片模式可靠计算,则显示“预计最多消耗 X 点”;无法可靠计算时只显示风险说明,不编造点数。
  • 默认焦点和回车只允许触发“只生成状态正常的商品”;红色选项不能成为默认按钮,不记忆危险选择。没有非正常候选时禁用“生成所有状态的商品”。
  • normal_only 下,unlisted/reviewing/unknown 不进入 GenerateWorker,不创建 cmhub 请求、不消耗点数、不改 stage/status/Excel;历史 NULL 按 unknown 排除并提示重新采集。
  • all 只授权本轮付费生成,不改变数据库商品状态,也不授权③更新线上商品。
  • 使用共享纯逻辑 planner 输出 base_candidates/status_counts/execution_tasks;计划冻结字段至少包含 task_id/updated_at/product_status/new_title/new_cover_path/生成内容模式。弹窗期间相关数据变化时废弃旧计划并要求重新开始。
  • Worker 接收确认后的精确任务列表和稳定范围代码 normal_only/all;本轮日志记录所选范围、排除统计和实际入队数量,正常模式下非正常商品不得通过其他入口绕过预检。

验收标准

  • 真实候选为空时不弹范围框;有候选时弹窗数量与最终入队任务一致。
  • 默认按钮、回车和普通确认只生成 normal;未上架、审核中、未知和历史 NULL 均不产生 cmhub 请求或点数。
  • “生成所有状态”使用红色文字、非默认且不跨轮记忆;只有本轮明确选择后才能把非正常候选加入 Worker。
  • 取消不创建 Worker、不调用 cmhub、不改 DB;计划数据变化时不能执行旧计划。
  • 无非正常候选时危险按钮不可用;弹窗和日志使用中文并正确展示状态统计与可用的点数估算。
  • 停止、进度、重试、增量生成、只生成标题/图片/图文和并发逻辑不回归。

测试与文档

  • 纯逻辑 planner 覆盖四种状态、历史 NULL、两种范围、候选去重、点数估算和计划指纹。
  • tests/test_gui.py 覆盖无候选、中文弹窗、默认焦点、回车、危险按钮样式/禁用、取消、数据变化、Worker 精确列表和点数不消耗边界。
  • 更新 docs/routes.md、docs/04-architecture.md 和 docs/api.md。

验证

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 接口、价格目录、并发和重试;不新增商品状态筛选控件。
  • 不把“生成所有状态”视为线上更新授权。

执行记录

  • 已新增共享纯逻辑 product_status.build_generation_plan():按任务 ID 去重、汇总四类状态、生成 normal_only/all 精确执行清单,并冻结候选指纹。
  • ②「开始生成」在真实候选存在时弹出中文范围确认,默认只生成状态正常商品;“生成所有状态的商品”为红色危险选项,无异常候选时禁用。取消或候选在确认期间变化不会创建 Worker。
  • GenerateWorker 接收范围、状态汇总和计划指纹;默认范围下再次防御性过滤非正常商品,ai.generate_batch() 只接收最终执行清单,运行日志记录范围和排除数量。
  • 已更新 docs/routes.md、docs/04-architecture.md、docs/api.md。
  • 验证通过:py -3.10 -m unittest tests.test_product_status tests.test_gui(203 项)、py -3.10 -m unittest discover -s tests(612 项)、py -3.10 -m ruff check app tests main.py、py -3.10 -m compileall app main.py、git diff --check。