Files

11 KiB
Raw Permalink Blame History

id, title, phase, deps, status, created
id title phase deps status created
T-580 ⑤设置精简:删真实提交闸/关页开关/jpg质量,合并并行为「同时更新蝦皮账号(≤5)」,改名Chrome就绪超时 7
T-571
T-578
DONE 2026-07-10

问题 / 背景

软件已打包给运营正式使用,⑤设置混装了开发期安全闸、部署项、能被数字蕴含的冗余布尔和运营用不到的技术旋钮,导致「很多设置不知道怎么用」。本任务按定案精简五处,但必须保留③「开始更新」确认弹窗作为线上提交的唯一显式确认边界。核过的关键事实:

  • allow_real_submit(默认 False)是 dry-run 之外点「开始更新」时的第二道闸;_update_safety_error(apply.py)只检查它。
  • close_success_tab(默认 False):T-578 后失败已必关,成功由它决定是否关。
  • parallel_accounts(bool,默认F) + max_parallel_accounts(int,默认2,范围1-16):workers.py:674 判定 parallel_accounts and max>1。max 在 bool 关时是沉睡默认值 2——已上线用户刻意关并行的 config 是 False+2。
  • cdp_ready_timeout(默认60)管的是 chrome.wait_debug_ready(port,timeout)(accounts.py:286)——Chrome 启动后等调试端口就绪的超时。
  • jpg_quality 默认本就是 90(appconfig.py:97、ai.py:200),多处 generation_cfg.get("jpg_quality") 读取。

方案(改哪个文件、改成什么)

1. 删「允许真实提交线上商品」,默认允许提交

  • app/gui/tabs/settings.py:删 allow_real_submit_checkbox 及保存/加载分支;连带删已隐藏的 allow_cover_update_checkbox(死控件)。
  • app/gui/tabs/apply.py:删 _update_safety_error(删后恒 None,是死代码)、_show_update_safety_error、_start_update 里的安全拦截调用。真实提交守闸只保留「开始更新」确认弹窗(红线弹窗不变)。
  • app/appconfig.py:从 DEFAULT_CONFIG 删 allow_real_submit、allow_cover_update key。
  • docs/04-architecture.md / docs/api.md:把“安全开关阻断”改成“开始更新确认弹窗阻断”;明确「检查本轮更新」仍是 dry-run/预览,不提交线上。
  • 不加开发环境变量兜底(用户明确要纯删除)。

2. 删「成功后关闭本次新开编辑页」,成功也自动关页

  • app/gui/tabs/settings.py:删 close_success_tab_checkbox 及保存/加载分支。
  • app/appconfig.py:删 close_success_tab key;旧配置里出现该 key 时加载不报错,保存后不再写回。
  • app/editor.py:_close_applied_product 简化为——app 新建的 tab(created_by_app=True)成功失败都关;复用的用户页永不关。成功关闭保留 time.sleep(2) 渲染缓冲;失败不等待(T-578 口径)。
  • app/gui/workers.py ApplyWorker 不再从 config 读 close_success_tab 传参(workers.py:939 附近),改为固定成功关闭语义。
  • 若为减少调用面破坏而临时保留 apply_task(..., close_success_tab=...) 参数,只能作为兼容参数存在,不得再由 GUI/config 控制行为;验收以 app 新建 tab 成功/失败都关闭为准。

3. 合并并行为单控件「同时更新蝦皮账号」,上限锁 5,带强制迁移

  • app/gui/tabs/settings.py:删 parallel_accounts_checkbox;max_parallel_accounts_spin 的 setRange(1, 16) → setRange(1, 5);label「最大并行账号数」→「同时更新蝦皮账号」;tooltip 注明「1=逐个更新,不并行」。
  • app/gui/workers.py:674、app/gui/tabs/apply.py:285,500、workers.py:595/636/1106/1128 等所有读 parallel_accounts 的分支改为 max_parallel_accounts > 1 单条件(串行/并行日志同步)。
  • app/appconfig.py:新默认 max_parallel_accounts 改为 1;加载/保存时都把 max_parallel_accounts 夹紧到 1..5,不能只靠 UI 限制。
  • 强制迁移(必须做,否则事故):app/appconfig.py 加载/规整 config 时,若旧 config 含 parallel_accounts:==False → 强制把 max_parallel_accounts 置 1;==True → 保留旧 max_parallel_accounts 后夹紧到 1..5;处理后丢弃 parallel_accounts key。没有这步,已上线的串行用户(False+2)升级后会静默变 2 账号并行。
  • 若旧/手工配置没有 parallel_accounts:缺失 max_parallel_accounts 时用新默认 1;已有 max_parallel_accounts 时只夹紧并保留,避免 T-580 后用户在 UI 设置成 2/3 后下一次启动又被重置。
  • 保存配置后不再写 parallel_accounts;运行分支只认 max_parallel_accounts > 1。

4. 「CDP就绪超时(秒)」改名「Chrome 就绪超时(秒)」

  • app/gui/tabs/settings.py:改 cdp_ready_timeout 对应 label 文案为「Chrome 就绪超时(秒)」(避免与 AI/cmhub section 已有的「连接超时(秒)」撞词)。
  • 只改显示文案,不改 config key cdp_ready_timeout、不改 wait_debug_ready 语义。

5. 删「jpg质量」控件,锁定 90

  • app/gui/tabs/settings.py:删 jpg_quality_spin 及保存/加载分支(从 ai_form 移除该行)。
  • 保留读取逻辑:app/appconfig.py DEFAULT_CONFIG jpg_quality 留 90,ai.py 各处 generation_cfg.get("jpg_quality")/默认 90 不动——只删 UI,不删数据默认;旧配置带 jpg_quality 时仍正常读取/保存,不向用户暴露控件。

文档同步

  • docs/04-architecture.md(第七节 CDP tab 生命周期:成功也关 app 页)、docs/api.md(apply_task/③流程去掉 allow_real_submit 闸、成功关页)、⑤设置相关 UI 文档/svg;⑤ section「蝦皮更新安全 / 执行模式」删掉唯一"安全"项后更名为「蝦皮更新执行」之类(实现定名)。
  • docs/routes.md / 相关 UI 线框图:⑤设置页删除开发期控件,③更新页仍展示最终确认与检查按钮语义。

实施顺序建议

  1. 先改 app/appconfig.py 默认值、旧配置迁移、夹紧和保存去旧 key,并补 tests/test_appconfig.py。
  2. 再改⑤设置页 UI 删除控件/改 label,并补 tests/test_gui.py。
  3. 再改③更新页、ApplyWorker、editor tab 生命周期,并补 tests/test_editor_login.py / 相关 GUI worker 测试。
  4. 最后同步 docs/04-architecture.md、docs/api.md、docs/routes.md 和必要 UI 图;不要把 release 打包或版本号更新混进本任务。

验收要点

  • ⑤不再有「允许真实提交线上商品」「允许更新封面」「成功后关闭本次新开编辑页」「多账号并行更新」「jpg质量」控件。
  • 点「开始更新」不再被安全开关拦截,直接进确认弹窗;_update_safety_error 相关死代码已删净(rg allow_real_submit 无残留)。
  • 「检查本轮更新」仍只预览/写日志,不打开蝦皮、不提交线上、不改任务状态。
  • 应用成功:app 新建 tab 关闭(含 2 秒渲染缓冲);应用失败:app 新建 tab 关闭(不等待,T-578 不回归);复用的用户 tab 成功/失败均不关。
  • 「同时更新蝦皮账号」spin 范围 1–5;默认值 1;值 1 → 串行(_run_parallel_by_account 不触发)、≥2 → 并行到该上限。
  • 迁移:旧 config parallel_accounts=False, max=2 加载后 max 变 1(串行不回归);parallel_accounts=True, max=3 → max 保留 3;parallel_accounts=True, max=16 → max 夹紧为 5;加载/保存后 config 不再含 parallel_accounts key。单测覆盖上述旧值。
  • parallel_accounts 读取点全部改为 max>1:rg "parallel_accounts" 仅剩迁移代码,无行为分支残留。
  • Chrome 就绪超时 label 文案更新,功能(wait_debug_ready 超时)不变。
  • jpg 质量删 UI 后,生成图仍按 90 质量保存(ai.py 读取默认 90 不回归)。
  • 配置保存后不再写 allow_real_submit、allow_cover_update、close_success_tab、parallel_accounts;旧配置包含这些 key 时加载不报错。
  • 验证命令(unittest,不引入 pytest):
    • py -3.10 -m unittest tests.test_gui tests.test_appconfig tests.test_editor_login tests.test_ai
    • python -m ruff check app tests main.py
    • py -3.10 -m compileall app main.py
    • py -3.10 -m unittest discover -s tests
    • git diff --check

边界(不改什么)

  • 不改③「开始更新」确认弹窗(红线,仍是真实提交唯一守闸)、「检查本轮更新」dry-run、其余③按钮。
  • 不改 wait_debug_ready/CDP 就绪判断逻辑本身,只改 label。
  • 不改 AI 生成图保存链路(_save_jpeg 仍按传入质量),只锁 UI 默认。
  • 不改 ①采集/④登录/CDP 选择器/DB schema/cmhub 链路。
  • 不加开发环境变量兜底(本任务纯删 allow_real_submit)。
  • 不在本任务构建 release、不改 APP_VERSION、不处理当前工作区里与 T-580 无关的文件。

执行记录

  • 2026-07-10:完成设置精简与执行语义调整。
    • app/appconfig.py:shopee_update 默认删除真实提交、封面兼容、成功关页、并行 bool 等旧开关;新增 max_parallel_accounts 默认 1、范围 1..5;旧配置 parallel_accounts=false 迁移为 1,true 保留并夹紧;保存后不再写回旧开关。
    • app/gui/tabs/settings.py:⑤设置页删除「允许真实提交线上商品」「允许更新封面」「成功后关闭本次新开编辑页」「多账号并行更新」「jpg质量」控件;「最大并行账号数」改为「同时更新蝦皮账号」,范围 1..5;「CDP就绪超时」改为「Chrome 就绪超时」;分区标题改为「蝦皮更新执行」。
    • app/gui/tabs/apply.py / app/gui/workers.py:③「开始更新」不再被真实提交开关阻断,仍保留最终确认弹窗;按 max_parallel_accounts > 1 决定账号并行;worker 不再传成功关页开关。
    • app/editor.py:程序自动新开的商品编辑页成功/失败都关闭;成功关闭前等待 2 秒;复用用户原本 tab 不关闭。close_success_tab 仅保留为旧调用兼容参数。
    • docs/04-architecture.md、docs/api.md、docs/routes.md 同步当前配置 schema、③确认边界、tab 生命周期和⑤设置文案;更新 tests/test_appconfig.py、tests/test_gui.py、tests/test_editor_login.py 覆盖迁移、UI 删除、并行语义和成功关页。
  • 验证:
    • 当前工作区运行 python -m ruff check app tests main.py:通过。
    • 当前工作区运行 py -3.10 -m unittest tests.test_appconfig tests.test_editor_login tests.test_ai:通过,108 tests OK。
    • 当前工作区运行 T-580 相关 GUI 单测 10 项:通过。
    • 当前工作区运行 python -m compileall app main.py:通过。
    • 因当前工作区存在非 T-580 未归属默认封面提示词改名(papa1.txt 删除、默认.txt 未跟踪),直接跑 py -3.10 -m unittest tests.test_gui ... 会有 2 个 T-579 提示词名称断言失败。为隔离该非本任务影响,创建临时干净 worktree,仅应用 T-580 diff 后运行:
      • py -3.10 -m unittest tests.test_gui tests.test_appconfig tests.test_editor_login tests.test_ai:通过,246 tests OK。
      • python -m ruff check app tests main.py:通过。
      • py -3.10 -m compileall app main.py:通过。
      • py -3.10 -m unittest discover -s tests:通过,318 tests OK。
      • git diff --check:通过。