fix(android): 限定同任务一次性页面复用,采购导航按路径等待商品页稳定 #373
Open
opened 2026-10-09 12:05:35 +08:00 by ila
·
7 comments
No Branch/Tag Specified
main
fix/376-pre-address-spec-verification
fix/374-final-spec-confirmation
fix/373-navigation-diagnostics
fix/370-color-discovery
feat/367-last-batch-repurchase
fix/368-image-search-partial-link
integration/364-365-366-main
feat/364-purchase-failure-snapshot
integration/365-366-validation
fix/365-order-result-observation
fix/366-address-editor-ready
fix/359-auto-match-resume
feat/363-inner-code-page-size
fix/362-truncated-spec-card
fix/361-spec-probe-click
docs/agents-worktree-rules
fix/358-syb-size-weight
feat/357-syb-cancel-status
feat/356-purchase-order-filter
fix/355-syb-list-timeout
feat/353-syb-shop-multiselect
fix/354-syb-top-pagination
fix/352-syb-source-created
fix/348-reveal-swipe
feat/340-syb-excluded-products
fix/351-inner-code-apply-selection
fix/350-match-layout
fix/350-inner-code-matching
feat/349-batch-return-use
feat/347-batch-return-cancel
feat/345-yeeke-reship
fix/346-root-serves-spa
fix/344-inner-code-stall-match
fix/343-syb-writeback-session
feat/339-syb-page-size
feat/338-return-match
feat/337-yeeke-admin-ui
feat/336-yeeke-return-sync
fix/335-bottom-submit-node
fix/334-spec-probe-top-swipe
fix/333-purchaser-device-owner
fix/331-spec-panel-recognition
fix/330-syb-writeback-session
feat/327-syb-writeback-filter
feat/326-order-information
fix/325-order-result
feat/316-chrome-order-backfill
fix/307-backfill-entry
feat/305-syb-order-writeback
feat/306-order-paid-amount
release/283
fix/283-purchase-mapping-consistency
fix/230-horizontal-spec-selection
feat/263-spec-rematch
fix/262-purchase-handoff
fix/260-261-purchase-readiness
fix/259-partial-collection-link
feat/258-one-click-replace
fix/257-color-normalized-match
fix/256-collection-single-dimension
fix/255-current-page-reidentify
feat/253-one-click-link
fix/254-match-loading
fix/251-syb-spec-candidates
feat/250-continuous-collection
fix/249-local-purchase-diagnostics
fix/248-bottom-submit
fix/247-short-address-panel
fix/246-address-return-panel
fix/245-purchase-failure-diagnostics
fix/244-selected-card-duplicates
fix/243-spec-entry-recovery
feat/242-agent-order-backfill
feat/241-order-backfill-endpoint
fix/239-syb-partial-sync
fix/238-spec-panel-preswipe
feat/237-client-api-keys
feat/236-purchaser-syb-sync
fix/235-syb-pagination-overlap
release/234-integrated
fix/229-address-entry-dedup
fix/228-selection-proof-panel-transition
fix/227-address-panel-return
fix/226-reopen-pdd-on-manual-retry
fix/225-in-place-purchase-retry
fix/224-final-spec-revalidation
fix/223-probed-confirmed-mapping
chore/221-devharness-sync
feat/218-purchase-result-bubble
fix/217-agent-retry-current-spec
fix/216-syb-spec-role-order
feat/215-mandatory-live-spec-probe
feat/214-verified-purchase-actions
fix/212-syb-sync-shop-snapshot
feat/211-spec-entry-ready-wait
feat/210-order-result-payment-transition
feat/209-pdd-bottom-spec-entry
feat/200-ai-match-result-purchase-ready
feat/199-job-execution-logs
feat/198-syb-ai-parse
feat/195-scheduled-spec-auto-match
fix/197-ai-write-timeout
feat/190-syb-inline-correction
fix/193-address-entry-reveal
feat/194-one-click-spec-match
fix/192-order-result-scroll
No results found.
Labels
No items
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: OPC/goauto#373
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
基本信息
已核验事实
线上数据与失败现场(只读,2026-10-09)
设备「采购2」(device 7,Agent
0.9.69-370-diag1)在 11:49~11:53 按 2131 → 2125 顺序重试 7 个任务,全部是purchase阶段(没有重新做规格探测)。失败现场快照(服务端 6 份 + 手机本地 1 份未上传)显示:PURCHASE_SPEC_TARGET_NOT_VISIBLEPURCHASE_SPEC_TARGET_NOT_VISIBLEPURCHASE_SPEC_TARGET_NOT_VISIBLE快照只在本机解析规格面板文字,未输出地址和姓名,用完已删除。
代码事实(
origin/maine26743c817275137f7dc8a3659461d552371b9e3)PurchaseRehearsalExecutor.kt:127-131:purchase阶段遇到OPEN_PRODUCT时,若canReuseCurrentProduct(input)为真就跳过打开商品。PurchaseRehearsalExecutor.kt:206:canReuseCurrentProduct只判断screen.problem == null && screen.hasPurchaseProductEvidence()。hasPurchaseProductEvidence(PddProductDetailCollector.kt:237)只要求是 PDD 包、有规格面板或规格入口或商品标题,不核对是不是本任务的商品。注释本意是只给「同一任务 spec_probe 后紧接的 purchase」复用。verifyProduct(:314)同样只看hasPurchaseProductEvidence。PDD 页面不显示 goods_id,界面上无法核对商品编号;之后的规格、数量、价格复核和finalConfirmation都不核对商品身份。evaluateIdleReturn可返回 Agent;#367 重购期间跳过该返回(AgentForegroundService.kt:1384),任务可能直接进入purchase。这使跨任务复用旧商品页的风险更易暴露,但不能据此断定本批任务都跳过了打开链接。本批具体触发路径尚未证实,须结合下方用户观察和导航诊断判断。openProduct(:261)调用openLink后,只要连续 2 次(间隔 100ms)读到「商品页证据」就认为打开成功。如果打开前 PDD 已经停在别的商品页,这 200ms 内读到的可能还是旧页面。更正(2026-10-09,用户观察)
用户观察到:重购时每个任务都先用浏览器打开 PDD 链接,再跳转到 PDD 商品页。说明本批「打开商品」实际执行了,而不是被
canReuseCurrentProduct跳过。更可能的过程(推断):PddLinkLauncher.open(url, preferDirect = true)(AgentForegroundService.kt:786)。直达方式(setPackagePDD +NEW_TASK|CLEAR_TASK,#232)只有抛异常时才退回浏览器(PddLaunchFallback.kt:5-6)。手机上只读查询确认 PDD 能处理该链接(MainFrameActivity),直达失败的原因尚未查明;当时的系统日志已被覆盖,本地也没有记录。手机为 Android 16 / ColorOS 16,GoAuto 无悬浮窗权限,推测与系统限制后台拉起其他应用有关,未证实。openProduct连续 2 次(间隔 100ms)读到商品页证据就判定成功,于是把旧页面当成本任务商品。现场显示一两分钟后仍停在旧商品上。本单拟分别处理两种风险(跳过打开、打开后误认旧页面);一次性交接只处理前者,后者仍须补齐可验证的旧页排除判据,不能宣称方案 1 已解决本批故障。
推断(未证实)
purchase阶段的任务(例如人工重试、重置后的任务,或在 AI 匹配等待期间设备先执行了其他任务的探测),同样可能复用错误页面。2026-10-09 导航取证补充(已授权、不下单)
代码
2c58d58(基于e26743c),调试包0.9.69-373-nav-diag3 / code 82。只读采样沿用采购的默认商品结构解析及“连续2次”旧判据;不调用采购执行器、不执行规格选择/地址/订单动作。时间为探针开始后的单调时钟毫秒(包含基线读取,不是固定 sleep 秒数);采样和真任务执行调度有差异。7fe81efc-015e-488d-8ce7-830f13b99f43:这是发起浏览器后、浏览器真正前台之前的旧页误认,不仅是此前推测的“浏览器返回PDD后仍旧页”。仅增加小固定延时不能代替阶段判断。
43e22c1d-19fb-48ee-a2d6-9c9291adf90e:基线窗口118;t=671直达请求ACCEPTED;t=897窗口已变120,但解析标题仍与旧页相同、商品结构成立;t=1585才出现不同标题并满足旧判据。观察至约20秒结束。该证据反对“windowId变了即可解锁”;标题不同本身也不是目标goodsId证明。v4 目标与用户确认边界
用户先授权“补齐两项方案和回归测试,再实施正式修复”,明确拒绝新增分享,随后接受最小导航等待方案并提出“重购最后一批时,每个任务之间间隔足够多的时间来等待pdd app商品页加载成功”。
v4 实施方案与参数
A. 一次性同任务交接(30秒复用上限)
0 <= age < 30_000ms。依据:当前Agent心跳15秒,探测结束后同步Outbox提交,Server事务后同步匹配,返回后释放互斥并triggerSync领取;网络请求与AI可能延长,因此30秒是保守政策(两个心跳间隔),不是实测最大时延/分位数,也不保证慢AI可复用。超过上限重新打开,不直接失败。PurchaseExecutionInput增加默认false的本地复用布尔,仅服务计算后传入;不能因屏幕有商品结构自行允许。B. 导航等待(最长30秒,不无条件睡30秒)
实施步骤(本工单为唯一计划源)
验收与回归(v4,替代旧版绝对身份测试)
以下勾选为代码与自动化回归完成,不表示真实采购验收通过。
文档、风险与回退
Wiki Business-Rules-and-Glossary更新复用及导航等待边界,Deployment-and-Operations记录版本/验证限制;API/数据库无变化。额外缓冲每次重开最少约3秒,加载慢时等至30秒;浏览器转瞬未被采到会安全超时,商品稳定不等于身份正确。代码可回退无迁移,但回退会恢复跨任务复用风险。工单待用户验收,不因诊断完成或自动化通过关闭。
合并 main(2026-10-09)
用户授权按 #373 → #374 → 处理镜像冲突 → 联合回归与构建 → 推送 main 执行。main 合并提交
555a954605a83c12457ed1ada86eb732fe3bb023,最新文档提交3ee8dfc0aa93ef9020786244cce29c487631ddbe,远端已确认。联合25套件478项全通过,APK构建与release单测源码编译通过。未安装、未执行真实采购、未部署或重启服务;工单仍待人工验收。2026-10-09 Claude Code 复核 Codex 审核意见(SynapBus #123/#124)
结论:Codex 对 #373 的 3 项意见核实成立,建议并入正文后再实施。以下行号以
origin/maine26743c为准。已核实
GoAutoAccessibilityService.onAccessibilityEvent(:55-60)只在包名变化时递增foregroundRevision;PDD 内部换商品不递增。正文方案 2 写的「以currentForegroundRevision变化作为打开成功前提」不成立,「先回 Agent」也只能证明离开过 PDD,不能证明回来的是新商品。PddNavigation.kt:39-42的直达方式带FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK,正式采购调用时preferDirect = true。它会清掉 PDD 旧任务栈,但startActivity成功不代表目标商品已经加载,旧页面在切换完成前仍可能被读到。建议修订正文(需用户确认后修改)
UiSnapshot是否提供还需实施时确认。**无法区分新旧页面时明确失败,不点击规格。**不把前台变化或「先回 Agent」当作充分证明。未验证
未运行测试,未操作真机。旧页面消失的判断条件需要在实施时用真机现象确认。
2026-10-09 Claude Code 更正:本批更可能的进入方式
用户观察:重购最后一批时,每个任务都先用浏览器打开 PDD 链接,再跳转到 PDD 商品页。
canReuseCurrentProduct跳过。正文原来的说法(跳过打开)对本批不准确,已在正文「更正」一节说明。openProduct在 200ms 内把旧页面判定为打开成功。2026-10-09 导航诊断阶段开始(用户已授权)
用户授权补导航诊断、构建覆盖安装并保留用户数据,仅验证打开商品页;不进入规格选择、地址修改、下单或付款。基线 origin/main e26743c,分支 fix/373-navigation-diagnostics,worktree issue-373。
本阶段只保持既有导航选择逻辑并记录直达/浏览器、布尔结果、异常类名(不含消息/URL)、相对时间及聚合页面证据。增加仅 debug 包存在且受 shell DUMP 权限保护的导航验证入口,使用现有任务互斥锁,忙碌时拒绝、不抢占;验证入口不调用采购执行器、不创建/重试服务端任务。只记录临时诊断 runId 和结构标量,不保存正常流程原始树、页面文本、地址、截图。正式采购路径诊断继续关联既有任务/attempt/device/rule 快照。
先补测试、构建和签名校验,安装前后校验设置与设备身份摘要;本阶段不能代替旧页排除修复及整单验收。未授权合并或发布。诊断字段不需要 SQLite/业务库迁移。
导航诊断阶段交付 / 待验收(2026-10-09)
本次仅执行用户授权的“补导航诊断、保留数据覆盖安装、只打开商品页验证”,不是 #373 正式导航修复完成,也未实施 #374。
代码与验证
fix/373-navigation-diagnostics已推送;实现2c58d5817cda45243d2f4f5925fe7e6e87598e21,运维 Wiki 镜像8f07a19。:app:compileReleaseUnitTestKotlin、:app:assembleDebug通过。不是全量单测结论。git diff --check通过。安装
install -r覆盖安装 0.9.69-373-nav-diag3 / code 82,未卸载、未清数据。f875bef42b04d9897567ae5fcaec2d3245cec48fb4b3975f811402ed0c25aef0,安装后读取 APK 哈希一致。bf86d7465c6092be74ce9c4187eb30c9a7d045c3b91891a547e2598429766dec。设置、设备身份、界面偏好前后文件摘要一致;服务恢复 ONLINE,无当前执行任务。核心真机证据
正文已补充最终 diag3 的 runId 与完整必要时间线:
文档与范围
Deployment-and-Operations已在线更新并回读一致,revision69c80ae55159abbdb98c0f4acc68322cd320739d。harness.py sync与一轮sync --check均成功,17 个核心映射一致。fix(android): 正式采购阶段只在同一任务探测后紧接时复用商品页,其他情况重新打开本任务链接to fix(android): 限定同任务一次性页面复用,采购导航按路径等待商品页稳定v4 正式修复交付 / 待验收
fix/373-navigation-diagnostics已推送。实现dbf9a5f4606529189e57b6c266449070d5001340,本单 Wiki 镜像92aeab8d04627401d27ec154f2877bd53a2f81f5。另以c9b7a2d单独收尾前轮已发布 #365/#367/#368/#370 的遗留镜像,未混入业务代码。验证
:app:compileReleaseUnitTestKotlin、:app:assembleDebug、git diff --check通过。android/app/build/outputs/apk/debug/app-debug.apk:0.9.69-373-fix1 / code 82,SHA256171f4b12395e2940ce873b62ea394799f521d1a0997f6aaf7582a123c24795e8。apksigner校验通过,沿用原签名证书bf86d7465c6092be74ce9c4187eb30c9a7d045c3b91891a547e2598429766dec。文档与未执行项
6c1a317ef67a0b015bb16a615b8c490b384188a0;Deployment-and-Operations revision01a3a9cd968510c9435ec1fb2be0040fe17d0282。在线回读一致,sync及sync --check通过,17映射一致。首次sync因前轮遗留镜像未提交被保护性拦截,单独提交后完成同步。D:/OPC/goauto-worktrees/issue-373保留。待用户授权装机与验收,不关闭工单。按授权顺序合并 / 联合验证完成
1e924fa41195281a3223003a69c8c16ae37f8aa5;#374 合并提交555a954605a83c12457ed1ada86eb732fe3bb023;main 最新3ee8dfc0aa93ef9020786244cce29c487631ddbe已推送。两单原提交及分支历史保留,未压缩或强推。D:/OPC/goauto-worktrees/release-373-374,未切换或覆盖根仓库用户旧分支/本地改动,未更新Supervisor运行目录。集成验证
:app:compileReleaseUnitTestKotlin、:app:assembleDebug成功。存在原有弃用/未使用变量编译警告,未扩大范围修改。git diff检查通过。D:/OPC/goauto-worktrees/release-373-374/android/app/build/outputs/apk/debug/app-debug.apk,SHA2566e2d0e0ed1eb943b3f168bb16d628d2c2bb4ce3b7c7c8b9e567dcdf8259150f8。版本保留0.9.69-373-fix1 / code82,同时包含#374,不与单独#373包混淆。bf86d7465c6092be74ce9c4187eb30c9a7d045c3b91891a547e2598429766dec。没有安装或清手机数据。文档与清理
a47b6b3b7ef7745417d1c2c88932f5bb12228f27;Deployment-and-Operations revision3f69f2e39675752dfd43dc38de41cb7defb74a42,回读一致、镜像检查通过。git worktree remove,均遇WindowsFilename too long,Git登记已移除但D:/OPC/goauto-worktrees/issue-373、D:/OPC/goauto-worktrees/issue-374留有部分目录,未强删。分支与提交保留,源码可恢复;按规则记录残留待后续清理。本轮不涉及业务库迁移、Admin发布、服务重启、手机安装或真实采购/付款。仍保留#373非goodsId身份核验及#374结构/摘要格式的已知边界。工单不关闭,待用户验收。
2026-10-09 按用户授权完成合并版真机覆盖安装(未执行采购):
adb install -r,返回 Success;未卸载、未清除数据。0.9.69-373-fix1/ code 82,包含 #373 + #374;基于已推送 main3ee8dfc0aa93ef9020786244cce29c487631ddbe的集成构建。6e2d0e0ed1eb943b3f168bb16d628d2c2bb4ce3b7c7c8b9e567dcdf8259150f8。