fix(android): 规格探测阶段跳过开面板后的规则滑动,并禁止点击尺码建议入口 #361
Open
opened 2026-10-06 16:52:11 +08:00 by ila
·
2 comments
No Branch/Tag Specified
main
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#361
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.
基本信息
核验基线与事实
64f0e49;设备 7「采购2」,PLY110(ColorOS),Agent 0.9.64(versionCode 77,与 main 一致),PDD 8.22.0。PURCHASE_SPEC_PROBE_EMPTY(规格探测未读取到任何颜色或尺码);irreversible_at 为空,无订单。openSpecPanel.swipeAfter = {count:2, direction:"up", durationMs:500, intervalMs:1000};probeSpecs无自定义别名,使用默认 DEFAULT_COLLECTOR(colorAliases 含「颜色分类」)。根因(代码证据 + 真机复现)
PurchaseRehearsalExecutor.kt:196对每个动作调用applyPostAction,:1166-1199对 OPEN_SPEC_PANEL 执行 reveal 滑动,不区分 phase。真机按同样参数模拟两次上滑后,「颜色分类」标题被滚出屏幕(颜色选项仍可见、但上方没有标题),屏幕上只剩「尺码」标题。PddProductDetailCollector.kt按非可点击标题划分维度;首个维度变成 size,isSpecPanelAtTop(:1611)为 false,moveSpecPanelToTop向下滑动,这就是用户看到的「向下滑动一下」。真机模拟回顶及在顶部继续下滑,都没有打开尺码建议,所以误点发生在滑动之后的点击。GoAutoAccessibilityService.clickFreshDetailed(:332 起,:351while (!node.isClickable))按「文字 + 类名 + 中心偏差 ≤32px」重找目标,目标本身不可点击时会改点最近的可点击祖先。「查看尺码建议 / 尺码助手」等文字已在excludedOptionWords(PddProductDetailCollector.kt:244)中,但只用于解析选项,未用于点击拦截(nonConfigurableClickDenylist:255 只有提交订单、确认订单、支付、付款)。AgentForegroundService.kt:697PddProductDetailCollector(accessibility),默认trace = {},:963);#249 的本地诊断未合并 main;该 ColorOS 设备屏蔽应用 logcat,也禁止 adb 录屏。因此「滑回顶部后哪个点击目标解析到了整行」尚未被日志证实,需在修复版本中补齐记录后复测。方案(最小范围)
excludedOptionWords中的「查看尺码建议 / 查看尺寸建议 / 尺码助手 / 尺寸助手 / 智能选码 / 选码建议」及繁体)时不点击,返回明确失败原因,不改点其他控件。不改变现有安全拦截(提交订单、支付等)。purchase_diagnostics写入)。改为与实际一致的说明,或在合并 #249 后再更新。不做
风险
验收标准
验证方式
.\scripts\verify.ps1 -Component android或等效构建。文档影响
备注
方案补充与更正(2026-10-06,Claude Code,用户确认补充)
依据:Codex 在 SynapBus #goauto 消息 #62 中的审核意见,以及 Claude Code 对 origin/main
64f0e49的再次核对。以下内容覆盖正文中对应的描述。一、对正文的两处更正
AgentDiagnosticStore/SafeAgentDiagnosticRecorder(android/.../persistence/AgentDiagnosticStore.kt,设备上为goauto_diagnostics.db)。采集任务会传入 taskId 和诊断记录器;规格探测路径AgentForegroundService.kt:697只调用PddProductDetailCollector(accessibility),trace、taskId(默认 0)、diagnostic都用默认值,所以连现有诊断也会被跳过(采集器内if (taskId <= 0) return)。applySpecDecision会把任务改回「待执行」(server/app/goauto/purchase/lifecycle.go:624),设备下次领取即进入 purchase 阶段正式下单。2026-10-06 的两次真机重试因探测失败才停住,没有产生订单;此前「重试只是探测、不会下单」的说法不完整。二、根因表述调整
PurchaseRehearsalExecutor.kt:196 → :1166);②clickFreshDetailed在目标不可点击时会改点可点击祖先(GoAutoAccessibilityService.kt:351)。三、方案细化(采纳 Codex 意见)
phase == spec_probe且 动作为 OPEN_SPEC_PANEL 时跳过 swipeAfter;保留 waitAfterMs 和原有稳定等待;purchase 阶段行为不变。回归「规格在首屏外、需采集器自行滚动才能发现」的场景。AgentDiagnosticStore/SafeAgentDiagnosticRecorder和诊断队列,不为此整体合并 #249,不引入新的诊断框架。purchase_diagnostics未合并;main 已有goauto_diagnostics.db诊断;写明本单新增记录的读取方式。四、验收与真机验证边界(覆盖正文)
MarkOrderSubmitStarted会拒绝非 live 任务进入下单边界(lifecycle.go:276起,「演练任务不能创建订单」)。能否为该 SYB 明细创建演练任务,由实施方先核实;若只能用正式任务验证,必须事先取得用户对创建订单的单独授权。实施收口(2026-10-06,用户授权补齐并实施)
以下补充及评论 #8872 覆盖正文的旧方案。本轮仅编码、自动化测试、分支提交推送及文档闭环;不合并 main、不发布、不安装 APK、不重试正式任务。
方案补充与更正(2026-10-06,Claude Code,用户确认补充)
依据:Codex 在 SynapBus #goauto 消息 #62 中的审核意见,以及 Claude Code 对 origin/main
64f0e49的再次核对。以下内容覆盖正文中对应的描述。一、对正文的两处更正
AgentDiagnosticStore/SafeAgentDiagnosticRecorder(android/.../persistence/AgentDiagnosticStore.kt,设备上为goauto_diagnostics.db)。采集任务会传入 taskId 和诊断记录器;规格探测路径AgentForegroundService.kt:697只调用PddProductDetailCollector(accessibility),trace、taskId(默认 0)、diagnostic都用默认值,所以连现有诊断也会被跳过(采集器内if (taskId <= 0) return)。applySpecDecision会把任务改回「待执行」(server/app/goauto/purchase/lifecycle.go:624),设备下次领取即进入 purchase 阶段正式下单。2026-10-06 的两次真机重试因探测失败才停住,没有产生订单;此前「重试只是探测、不会下单」的说法不完整。二、根因表述调整
PurchaseRehearsalExecutor.kt:196 → :1166);②clickFreshDetailed在目标不可点击时会改点可点击祖先(GoAutoAccessibilityService.kt:351)。三、方案细化(采纳 Codex 意见)
phase == spec_probe且 动作为 OPEN_SPEC_PANEL 时跳过 swipeAfter;保留 waitAfterMs 和原有稳定等待;purchase 阶段行为不变。回归「规格在首屏外、需采集器自行滚动才能发现」的场景。AgentDiagnosticStore/SafeAgentDiagnosticRecorder和诊断队列,不为此整体合并 #249,不引入新的诊断框架。purchase_diagnostics未合并;main 已有goauto_diagnostics.db诊断;写明本单新增记录的读取方式。四、验收与真机验证边界(覆盖正文)
MarkOrderSubmitStarted会拒绝非 live 任务进入下单边界(lifecycle.go:276起,「演练任务不能创建订单」)。能否为该 SYB 明细创建演练任务,由实施方先核实;若只能用正式任务验证,必须事先取得用户对创建订单的单独授权。实施结果(2026-10-06,待真机验收)
实现与提交
验证
构建与授权安装
Wiki
未验证与边界