Files
cmshoppe/docs/05-coding-rules.md
T
chengma 0e0ed193b6 feat: 完成T-504更新执行增强
- 新增 dry-run、多账号并行和最大并行账号数设置

- 增加 run_logs/run_log_events 运行日志表及读写接口

- ApplyWorker 支持 dry-run 预览、按账号并行、端口冲突阻断和日志展示

- 补充 DB/GUI 单元测试并同步任务、架构、API、路由和当前状态文档

验证: python -m compileall app main.py tests; python -m unittest discover -s tests
2026-06-29 10:25:09 +08:00

98 lines
6.8 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.
# 编码规则(Coding Rules)
> 每次写代码前先读完本文件。这是让 AI 不跑偏、代码质量稳定的硬约束。
> 与技术细节冲突时,以 [技术栈](03-tech-stack.md) / [架构设计](04-architecture.md) 的事实为准;与“该不该做”冲突时,以 [需求](02-requirements.md) 为准。
## 0. 黄金法则
1. **不臆造**:选择器、字段、文件、接口不确定就查证或先用 `prototypes/inspect_images.py` 探查页面,不要猜 class 名。
2. **守范围**:只做当前任务要求的事,不顺手加批量/并行等后续功能。
3. **照架构**:复用 `app/cdp.py`(迁移前参考根目录 `cdp.py`),遵守 `04-architecture.md` 第七节“已验证结论”,不另起一套 CDP 交互。
4. **小步改**:一次只解决一个问题,不夹带无关重构。
5. **可验证**:改完必须能 `py_compile`,关键路径能在测试商品上跑通,对得上验收标准。
## 1. 动手前
- 按链路确认:`vision` -> `requirements` -> `tech-stack` -> `architecture` -> `tasks`。
- 找到本任务对应的验收标准,写之前就知道“怎么算做对”。
- 复用优先:已有 CDP 底座(T-000 后为 `app/cdp.py`,当前来源为根目录 `cdp.py`)的 `CDP`、`find_product_tab`、`create_tab`、`drag`;已有 `prototypes/demo.py`/`prototypes/set_*.py` 中验证过的 JS 片段。
- 需求含糊或改动会偏离已验证事实时,先问。
## 2. 事实来源纪律
- CDP 交互只信 `04-architecture.md` 第七节的“已验证结论”和真实页面探查结果。
- 不从旧脚本注释或记忆里推断仍然有效的选择器;Shopee 页面可能已变,必要时重新探查。
- 不虚构 Shopee 接口、字段、按钮文案。
- 选择器 / 流程变化必须同步更新 `04-architecture.md` 和相关任务。
## 3. 范围纪律
- V1 只做 `02-requirements.md` 中列为 P0 的当前目标功能(5 Tab、账号管理、Excel 导入采集、AI 生成、批量确认后更新 Shopee、结果回写)。
- 除 T-504 已接入的多账号并行、dry-run、运行日志外,其他 V2 / V3 功能(规则模板等)只记录,不实现。
- 需求明确排除的非目标(自动登录、绕风控、商品数据批量爬取、外部数据库)不得实现。
## 4. 架构纪律
- 技术栈以 `03-tech-stack.md` 为准;GUI 固定使用 PySide6,不引入第二套 UI 框架。
- 新增依赖前先说明理由;优先标准库(json、sqlite3、subprocess),GUI 用 PySide6,Excel 用 openpyxl。
- 存储边界:应用设置进 `config.json`,账号/任务/结果进 SQLite,登录态只在 user-data-dir,同一事实只存一处。
- 模块职责以 `04-architecture.md` 为准:GUI 不写业务逻辑,业务在 `appconfig/db/excel/config/chrome/cdp/editor`。
- PySide6 后台任务必须通过 worker/QThread/signal 回传 UI;后台线程不得直接操作 Qt widget,不共享 SQLite connection。
- 模块/CLI 合约以 `api.md` 为准。
## 5. 代码规范
- 标识符使用英文;UI 文案、注释、文档保持中文,与现有脚本一致。
- 错误必须处理:CDP 超时、tab 找不到、上传失败、按钮禁用都要给明确提示,不吞错。
- 注释解释“为什么”(尤其 CDP 的坑:代理、Origin、就绪判断、拖拽落点),不复述“做了什么”。
- 复用现有脚本里已验证的 JS 字符串,不重写出不一致的版本。
## 6. 测试与验证
完成前至少检查:
- [ ] `python -m compileall app main.py` 通过(T-000 前仅文档改动不要求)。
- [ ] T-006 完成后,纯逻辑改动有对应 `unittest`,至少覆盖正常路径和一个失败路径。
- [ ] 涉及 CDP 的改动,在测试商品(ITEM_ID 51100639510)上实跑验证。
- [ ] 涉及满 9 张封面删除时,必须先验证该任务 `old_cover_path` 本地备份存在;备份缺失不得删除线上图片。
- [ ] 涉及 DB 的改动,覆盖 schema 初始化、重复初始化、短事务写入、失败状态写入。
- [ ] 涉及 Excel 的改动,覆盖 source_file_abs/source_sheet/source_row 回写定位。
- [ ] 对得上需求验收标准(如标题 `value`+`modelvalue` 双等于、封面在第一位)。
- [ ] 没有夹带无关改动。
- [ ] 涉及选择器/流程/配置 schema 变化时,文档已同步。
- [ ] 回复里如实说明跑了什么命令、结果如何。
```bash
python -m compileall app main.py
python -m unittest discover -s tests # T-006 完成且 tests/ 存在后
python prototypes/demo.py # 单账号闭环验证(不提交)
```
测试命令时机:
- T-006 前:`tests/` 尚未建立时,只要求运行与当前任务匹配的可用验证;不要因为 `python -m unittest discover -s tests` 缺目录而判失败。
- T-006 后:`python -m unittest discover -s tests` 成为纯逻辑改动的必跑项;新增/修改 appconfig、db、excel、prompts、config、chrome 纯逻辑时同步补测。
## 7. 绝不
- 绝不把真实账号、密码、Cookie、token 写进代码、文档或日志。
- 绝不把密码/API Key 写进代码、文档、日志或导出文件;本地配置/DB 可明文保存,必须 gitignore,保存/变更时提示“本地明文保存”,UI 打码。
- 绝不把 `config.json`、`config/ai_models.json`、`cmshopee.db`、`chrome_user_data_dir/`、`images/` 提交版本库。
- 绝不提交运营填写后的 Excel 业务文件;根目录 `shopee待处理任务模板.xlsx` 是标准空模板,允许提交。
- 绝不自动登录 / 自动填账号密码;登录由人工完成,程序只检测登录态。
- 绝不在缺少 ③ 批量确认弹窗确认的情况下点击「更新」提交线上。
- 绝不擅自删除用户文件或重置 user-data-dir。
- 绝不为通过验证而降低验收标准(如不验证 `modelvalue` 就当改成功)。
## 8. 安全与合规
- 登录凭证只存在于各账号 user-data-dir;不导出、不外传、不写入配置或日志。
- 写日志、状态 payload、导出调试信息前,结构化数据先过 `appconfig.sanitize_for_log()`;自由文本只有在掌握明文值时才用 `appconfig.redact_secrets()` 替换,不要把原始密码/API Key 拼进异常或状态栏。
- 涉及 Shopee 时,遵守 `04-architecture.md` 写明的页面规则与限流边界;不高频批量、不绕风控/验证码。
- 高风险动作(删满 9 张的封面、点击更新)必须有显式确认,并先在测试商品验证;删满 9 张封面前还必须有本地旧封面备份,缺失备份时拒绝删除。
- ③ 的批量确认弹窗是提交线上前的确认边界;T-504 的 dry-run 只预览不提交、不改任务状态。真实更新即使开启多账号并行,也必须经过③确认和⑤安全设置。
## 9. 拿不准就问
问题要具体:说明卡在哪、有哪些选项、倾向哪个及原因。尤其端口分配、删图确认框结构这类影响后续的决策,先确认再写。