Files

110 lines
11 KiB
Markdown
Raw Permalink 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-580
title: ⑤设置精简:删真实提交闸/关页开关/jpg质量,合并并行为「同时更新蝦皮账号(≤5)」,改名Chrome就绪超时
phase: 7
deps: [T-571, T-578]
status: DONE
created: 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`:通过。