95b5f05ae81c05561c8b028ae212bf681e323df8
真机连续排查出三处缺陷,均已实测确认: 1) 候选卡片点不动。快照里 SnapshotNode.label 只取节点自身的 text/ contentDescription,而 clickFreshDetailed 重新定位时用 preferredOrDescendantLabel()(会往子孙里挖)。候选卡片是自身无文案的 FrameLayout,两者算出的 label 一个是空串一个是标题文字,永远对不上, 重找直接 TARGET_NOT_FOUND。改为瞄准卡片内最靠上的有文案子节点,由 clickFreshDetailed 既有的向上走到可点祖先逻辑落到卡片容器上。 卡片内文案的归属同时从 path 前缀改为几何包含——path 父子语义从未核对, 几何包含已用真机 dump 直接验证。 2) 错误码拆分。IMAGE_SEARCH_NO_CANDIDATES 此前同时表示“结果页没出现”和 “卡片点不动”,定位问题时完全分不清。拆为 RESULTS_NOT_READY / NO_CANDIDATES / CANDIDATE_CLICK_FAILED,并把 clickFreshDetailed 的 result 与 reason 带进失败消息——这两个值本来就有,此前被丢弃。 3) 自动关联从上线起一次都没执行过。snapshot.PriceGuardSkipped 与 shopee_product.currency != "CNY" 两处各自 return nil,而 priceSkipped 的唯一来源就是 referenceCurrency != "CNY",两者是同一个条件;线上 26902 个虾皮商品全部是 TWD。表现为图搜任务 completed、PDD 商品采集完整,但 关联停在旧值,采购因此无法创建(订单 26091536MJHXG8 即如此)。 币种不同只说明价格没法比,不说明关联不该建立,两件事已解耦。 补偿控制是 image_search_linked 标记,已显示在商品页与采购视图。 ImageSearchPriceAllowed 零调用方,加 [未接线] 标注,避免再被当成生效的 防线;待引入可配汇率后再接。 测试夹具默认币种由 CNY 改为 TWD(线上真实币种),并新增跨币种必须关联、 同币种行为不变两个用例。此前夹具用 CNY,所以整套用例全绿而线上从未成功。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NTDbDcwbDw1TSAcE6wfh2F
GoAuto 移动采集管理平台
GoAuto 使用 go-admin、go-admin-ui 和 Android Portal/Agent 跑通 PDD 商品采集闭环:人工添加 PDD 链接、创建采集规则、创建任务、由 Android 执行并在任务详情查看结构化结果。
当前 MVP 只包含 PDD 商品、采集规则、采集任务、Android 执行和任务详情结果。顺云宝、Shopee、采购、批量任务、规则发布流程、全局停机和实时屏幕均不在当前范围。
阅读入口
旧版 ADB/Portal 验证代码、日志和诊断资料已归档到本机 demo/,该目录不进入 Git。
当前状态
- 需求和技术边界已确认。
- Harness Coding 文档和工单已建立。
- 服务端与 Android 端为可交互 HTML 原型。
server/已固定导入 go-adminv2.3.0。web/已固定导入 go-admin-uiv3.0.0。android/已建立 Kotlin/SDK 34 Agent 骨架。- 最小闭环 8 张业务表、迁移和唯一约束测试已经落地。
- 设备首次自注册、Token 认证、停用和吊销接口已经落地。
- Token 心跳、在线/离线、空闲/忙碌和离线任务失败已经落地。
验证
.\scripts\verify.ps1 -Component all
也可以把 all 改为 server、web 或 android 单独验证。
Languages
HTML
49.6%
Go
27.2%
Kotlin
10.3%
Vue
7.7%
JavaScript
2.2%
Other
2.9%