Commit Graph
31 Commits
Author SHA1 Message Date
chengma 34ff39a200 feat: 增加任务批量勾选和重新上报 (#89) 2026-08-10 10:56:48 +08:00
chengma 977af345b5 fix: 统一重新执行提示位置 (#87) 2026-08-10 10:16:11 +08:00
chengma bf816bce02 fix: 任务错误提示改为顶部居中 (#87) 2026-08-10 10:05:45 +08:00
chengma 74198bd70d fix: 放大任务错误提示并自动关闭 (#84) 2026-08-10 09:59:34 +08:00
chengma e7fb06d7aa fix: 任务执行前检查 Android 设备连接 (#84) 2026-08-10 09:35:46 +08:00
chengma 39f4a8ee4f fix: 优化重新采集取消交互 (#82) 2026-08-10 09:08:54 +08:00
chengma 7e90af0dc9 feat: 接入采购演练真机适配器 (#75) 2026-08-10 01:07:57 +08:00
chengma c86c7482d9 feat: 完善采购任务安全恢复 (#73) 2026-08-10 00:27:52 +08:00
chengma f201bcc4bf feat: 安全领取并分派采购任务 (#72) 2026-08-10 00:05:40 +08:00
chengma 311d55f0da feat: 实现采购任务安全演练 (#71) 2026-08-09 23:39:37 +08:00
chengma a6c573a76a fix: 允许等待重试任务手动重新执行 (#70) 2026-08-09 22:47:44 +08:00
chengma ff8cdd77c3 fix: Wi-Fi 恢复失败后继续搜索设备 (#66) 2026-08-09 22:18:55 +08:00
chengma eda3661604 feat: 增加采集任务重新执行入口 (#63) 2026-08-09 21:44:29 +08:00
chengma 5fd71981e0 feat: 支持持续自动获取任务 (#45) 2026-08-09 10:54:18 +08:00
chengma 5aaf0a937e fix: 允许颜色缺价后继续采集 (#42) 2026-08-08 11:25:06 +08:00
chengma 9dadac2bff feat: 滚动采集评价数量和店铺名 (#40) 2026-08-08 10:30:04 +08:00
chengma 2f83be5e40 fix: 中文显示任务当前步骤 (#39) 2026-08-08 10:29:59 +08:00
chengma cb323d37ba feat: 实现 PDD 任务详情窗口 (#39) 2026-08-08 09:46:58 +08:00
chengma 9562da9aad fix: 蛇形遍历颜色并逐色采价 (#37) 2026-08-08 09:25:40 +08:00
chengma e65cc2afda fix: 商品页就绪后立即进入规格面板 (#36) 2026-08-07 18:13:10 +08:00
chengma c59b4b0d59 fix: 修复 PDD 页面误判与失败回执 (#35) 2026-08-07 17:58:30 +08:00
chengma 2d1fdbea3f feat: 执行并提交 PDD 采集任务 (#32) 2026-08-07 17:38:29 +08:00
chengma 93beef8b36 feat: 保存并展示 PDD 店铺与价格采样信息 (#31) 2026-08-07 17:13:25 +08:00
chengma 51062f4c7b feat: 领取 Admin 采集任务并保存本地 (#30) 2026-08-07 16:42:31 +08:00
chengmaandClaude Opus 5 dd387e3ee5 feat: claim 支持领取无主任务 (#17)
PDD 商品页要能「创建采集任务」而不指定客户端——采集只是浏览商品页,
没有副作用,哪台设备采都一样。但原来的查询是

    WHERE assigned_client = ? AND status = 'assigned'

无主任务(assigned_client 为空 + pending)永远没人能领,建出来就是死的。

改动
- ClaimNextTask 同时查两种:指定给本机的 + 无主的
- 排序 ORDER BY (assigned_client IS NULL), priority DESC, created_at
  ——指定给本机的优先。显式分配是人为决定,应当先兑现
- 原子更新两种情况合成一条语句:对"指定给我的"写 assigned_client
  是写同一个值无副作用;对无主的,这一步就是"谁领到就标记谁"
- 表结构不用动(assigned_client 本来可空,status 已有 pending)

推翻了一条已定案的规则
Client 契约 §5.1 原写「Admin 只把任务分配给指定的 Client」,
现改为两种并存并说明各自适用场景:
- 采集任务不指定客户端
- 采购任务可指定可留空。涉及钱和账号——不同设备可能登着不同的
  拼多多账号,需要指定账号时必须显式分配,留空即接受"谁先抢到谁下单"

Client 侧对两种没有区别,不需要知道任务原来有没有主。

已验证(Go 1.23.0)
- 新增 7 个测试,全量 62 个全过
- 并发抢占用例重复 20 次稳定:8 个客户端抢同一条无主任务,
  正好 1 个拿到,且 assigned_client 记的就是那个赢家
- 既有测试未受影响,"只领分配给自己的"仍然成立

一处仍未解决的风险(已记入 #17 风险表)
tasks 表没有字段标记"该任务需要真实下单",所以契约里
"不向 dry_run 客户端分配真实下单任务"实际无法执行。
真实下单开关关闭时不出问题,开启前必须补该字段。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 10:53:32 +08:00
chengma 02073eab37 docs: define idempotent Client registration contract (#12) 2026-08-06 17:21:36 +08:00
chengmaandClaude Opus 5 62d46bf10a docs: 新增设备登记联调手册,并定案 client.name
面向 Client 开发者的实操文档,目标是让一台新设备出现在 Admin 的
客户端列表里。文中所有请求和响应都是在真实运行的 Admin 上跑出来的。

新增 docs/admin/07-设备登记联调手册.md
- 先讲清"没有注册接口,登记是 claim 的副作用"
- **重点提示 204 不是错误**:新设备第一次 claim 必然 204,
  它同时意味着登记成功。这是最容易被 Client 误判成失败的地方
- 设备号必须持久化、永不变——变了 Admin 会当成新机器,
  列表里会堆一串僵尸记录
- 设备名只在首次登记时采纳,之后 Admin 侧改名不会被覆盖。
  这个行为会让人困惑("我改了 Client 怎么 Admin 没变"),先说清楚
- 四步验证流程 + 可直接复制的 curl + 手工插测试任务的 SQL
- 7 条常见问题,含"列表里多出好几台一样的机器"这类实际会碰到的
- 列出 Client 侧待办清单,标明前两条做完就能登记成功

定案 client.name(原 [待定])
Client 设置页本来就有「设备名」输入框(deviceNameInput,50 字上限),
只是没接进 ClientInfo。Admin 仍容忍它缺失,缺了用 X-Client-Id 兜底,
所以 Client 先不发也不影响登记。

同步更新
- docs/client/04-admin-api-contract.md §5:请求示例补 client 字段,
  加"204 不是错误"的必须项,并指向本手册
- docs/README.md:两处导航加入口,Client 侧"对接 Admin"那行也指过来

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 17:08:58 +08:00
chengmaandClaude Opus 5 0279ffd60e docs: 更新 Client 现状差异表
核对代码后重写 02 §3.1,删掉两行已完成的、更新其余行的现状描述。

已对齐(移出差异表)
- 顶级导航:已是 2 个(pdd任务 / 参数设置)
- PDD 任务页:已有表格、筛选、搜索、状态条和 canFetchMore 增量加载
- 顺带核对:db_schema.py 已建 4 张表,status 的 8 个取值与
  03 §3 完全一致,也没有残留已废弃的 sync_state / lease_token / admin_status

仍是差异的行更新了现状描述,主按钮文案那行的行号从 485/487 改为 470/472。

新发现一处文档自相矛盾:02 §3 建议目录写 src/ui/main_window.py,
但 client/AGENTS.md 的代码分层规则写 src/ui_main.py,代码按后者走。
已在表下说明,建议把建议目录改成与代码一致,需另开工单决定。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 16:55:55 +08:00
chengmaandClaude Opus 5 4f920f9d8b docs: 排除蝦皮原始报表,并同步主按钮文案
raw_data 不进 Git
原始报表含逐商品台币销售额等商业数据,进了 Git 就是永久历史。
- .gitignore 排除 raw_data/
- 改掉三处"仓库里有一份样本"的失真表述,改为向项目负责人索取
- 06 §2.1 相应加强:既然大样本不进库,admin/testdata/ 下的脱敏小样本
  就必须提交,否则别人拉下来测试跑不了;并写明脱敏做法

主按钮文案 开始自动获取 → 获取任务 ⇄ 停止获取
只改按钮标签。"自动获取"作为功能名保留(状态栏、Tab 顺序、
协调器开关等处不动),05 §4.1 加了一句说明两者不是一回事。

已知遗留:pdd_ui.py 自身仍不一致——构造时用「获取任务」,
但状态机 485/487 行仍是「开始自动获取」/「停止自动获取」,
会覆盖掉构造时的文字。该文件有未提交改动,本次未触碰,
差异已记入 02 §3.1,需另开工单修。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 15:58:09 +08:00
chengmaandClaude Opus 5 1f95de373a docs: 增加红线清单,并把约束下沉到代码文件
起因:实测发现 Codex 不会主动把 338 行的规则手册当判断依据——
问“能用 PySide6 吗”答“可以评估”,问“加个 emoji 图标”直接给改法,
问“改错别字要建工单吗”结论对但依据是通用常识、不是 §0 的实际条件。
三次都表现为“知道代码事实,但不应用项目规则”。

对策一:红线上收
- 根 AGENTS.md 开头新增 5 条红线(Qt 绑定、下单开关、风控、凭据、
  不可逆阶段),并明确“不要论证其可行性,先停下来问用户”

对策二:把约束放到 agent 必然会打开的文件里
- pdd_ui.py / pdd_ui_event.py / settings_ui.py / settings_ui_event.py
  写入模块 docstring,说明各自职责和最易踩的硬性规则
- 四个文件目前只有 docstring,无实现

同步修正
- ui_event.py 已拆成按页面分的四个文件,更新 client/AGENTS.md
  的代码分层规则和 02 §3.1 的现状差异表

未包含:ui_main.py 和 demo1/auto_v1.py 的同类 docstring,
这两个文件承载尚未提交的代码,留待代码提交时一并处理。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 12:01:38 +08:00
chengmaandClaude Opus 5 0b645ee8b3 docs: 建立面向初级程序员的文档基线
按初级程序员可读、可维护的目标重写项目文档,并定案三项设计决策。

新增
- docs/client/00-getting-started.md 上手指南:装环境、跑起来、常见报错
- docs/client/00-glossary.md 术语表:Outbox、幂等、不可逆阶段等
- docs/templates/task.md 工单与归档模板
- client/requirements.txt 固定依赖版本
- .gitignore 屏蔽 data/、打包产物和调试产物

设计定案
- 本地库只存已领取任务,不再镜像 Admin 任务池;已完成任务永久保留
- 去掉租约、心跳和状态回查;Admin 接口从 5 个降到 3 个
  (本项目人工付款,重复下单只产生未付款订单,由人工审核处理)
- 打包采用 PyInstaller one-dir:launcher.exe + app/ + data/,便携模式

文档改进
- 补齐可直接抄的代码模板:Worker 线程、事务写库、幂等键、增量加载、错误提示、路径解析
- 状态机由 ASCII 图改为完整转换表,并补充崩溃恢复规则
- 消除文档与现有代码的冲突,02 新增“现状与目标差异”清单
- 待确认事项一律给出临时默认值,避免阻塞开发
- AGENTS.md 新增“小改动直通”,工单必填项由 8 项压缩到 6 项

说明:Gitea 尚未配置,本次无对应工单号;AGENTS.md §0 的 Gitea 信息待补。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 11:44:39 +08:00