fix(android): PDD 截短的规格显示文字被拆成独立选项,导致正式采购无法确认颜色选中 #362
Open
opened 2026-10-06 17:25:23 +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#362
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与 #361 实现a49dc69(文档提交75ab256);本问题涉及的optionBlock和选中确认逻辑未被 #361 改动,故障在旧版本也存在。不能仅凭错误码相同断言 #361 对所有场景均无影响。核验基线与事实
64f0e49;设备 7「采购2」PLY110(ColorOS),Agent 0.9.68(#361 分支构建,versionCode 81);#361 尚未合并 main。PURCHASE_SPEC_SELECTION_UNCONFIRMED「无障碍点击和受控手势后未能确认精确选中状态」,每次约 15 秒;未下单。根因(代码证据 + 现场数据)
PddProductDetailCollector.kt:591optionBlock只有在块内所有候选成员的文字都以外层块完整标签开头时才合并(:609members.any { !compact(it.label).startsWith(outer) }即 break)。PDD 把显示文字截短后,「…有口袋¥18.8」不以「…有口袋不起球¥18.8」开头,合并失败,截短的 TextView 成为独立选项(:390 分组、:420 按 rawText 合并后仍保留),经normalizeColor去价格后成为「黑色长裤【有抽绳】 有口袋」。PurchaseRehearsalExecutor.kt:690isExactSpecSelected第一条规则(:692):同一维度只要有任一「text ≠ target 且 selected/checked」的候选,就判定未选中。选中真实颜色后,影子选项也是 selected,于是点击和手势兜底后都确认失败,报PURCHASE_SPEC_SELECTION_UNCONFIRMED,流程停在颜色一步,没有进入尺码。最终复核verifyExactSpecSelection也有冲突检查,但它先接受唯一目标已选中;两者执行顺序不同,按 v2 方案分别记录边界。影响
方案(v2:先修解析去重,再验证确认逻辑)
2026-10-06 最初授权仅更新方案;随后用户明确授权 v2.1 实施,并在实施中追加授权构建 APK 后安装到指定设备。合并 main、线上发布和真实采购不在本次授权内。
optionBlock既有合并能力上兼容“完整外层标签/图片标签 + 截短显示文字”。尾部价格处理复用SpecValueNormalizer,空白压缩只用于块内身份比较;归一后两侧均须非空。成员是外层完整名的前缀时,只能作为同一卡片的重复显示证据,不放宽为任意包含关系。最终规格名保留外层完整标签按现有规则去价格后的值,不把比较用的去空白文本变成下发目标。isExactSpecSelected、选中证明及最终复核能否正常完成;若能通过,本单不改这些判断。取消原方案中“直接排除目标点击节点子树内选中项”的做法:当前VisibleSpecValue.node由safeOptionRank选择,可能是图片或文字,其他显示节点可能是它的兄弟节点,并不位于它的子树。locate的精确匹配、服务端下发目标或最终点击对象选择规则,不引入模糊匹配、相似值点击或根据截短词猜测完整商品规格。v2.1 用户确认补充(2026-10-06,开始实施)
用户确认:「先把这两点补进 #362,再按最小范围实施」。
64f0e49建独立分支完成解析代码、单元测试及编译验证;#361 尚未合并,集成/装机 APK 必须包含其修复,集成方式与装机留待明确授权。本次不构建用于覆盖手机的 main-only APK,不改 #361 诊断、不触发真实订单。选中冲突的现有行为边界
isExactSpecSelected先检查其他值选中,再接受目标;但verifyExactSpecSelection当前先接受唯一目标已选中,之后才检查其他值冲突。因此“目标和另一张卡片同时 selected 时,所有复核路径都会拒绝”不是已证实的现有能力。本单需记录即时确认与最终复核的基线差异,并保证解析合并不隐藏真实独立卡片。若要统一最终复核检查顺序,属于额外行为决策,先记录并确认,不在本单默认顺手修改,也不把已有提前返回当作本次验收通过。
不做
风险
optionBlock为颜色和尺码共用,修改不能误并带体重说明的尺码、数字尺码或不同款式;先以当前颜色故障为目标,不扩展为通用规格模糊归一化。验收标准
isExactSpecSelected中确认成功,并能继续精确选择目标尺码及完成演练复核。若无需确认层改动,明确记录“确认算法保持不变”。验证方式
scripts/verify.ps1 -Component android或等效测试/构建,真实记录未通过项。文档影响
附:#361 验收相关的观察(不属本单范围)
0.9.68 安装后,设备上的
databases/goauto_diagnostics.db修改时间仍为 2026-09-12,表中最新记录是 0.9.59 写入的;#1789 在 17:15 的规格探测按 #361 本应写入点击诊断,实际没有任何新记录。可能是诊断表升级失败或写入被SafeAgentDiagnosticRecorder吞掉,请在 #361 中排查。备注
本单由 Claude Code 依据只读查询、代码阅读和设备现场只读分析整理;建单使用 Gitea REST API(当前会话无 Gitea MCP)。现场界面结构和导出的诊断库副本已删除,工单不含收货人、地址、订单号等个人信息。
2026-10-06 Codex 按用户授权将审核结论整合入正文;当前无 Gitea MCP 工具,回退 Gitea REST API,凭据仅从本机私有配置读取。本次未修改代码、数据、Wiki,未实施/安装/发布。
实施与交付(2026-10-06)
授权变化与依赖处理
最小实现
验证
APK 与安装
v2 复核意见(2026-10-06,Claude Code,用户确认补充)
依据:SynapBus
#goauto消息 #65/#66,对照 origin/main64f0e49代码复核。结论:v2 方案合理,可实施
已核实的要点:
verifyExactSpecSelection先在PurchaseRehearsalExecutor.kt:763接受「唯一目标已选中」,再在:766检查冲突,与isExactSpecSelected(:692先查冲突)顺序不同。v2 只记录这一差异、不顺手修改,做法正确。safeOptionRank选出,可能是图片,而文字节点是它的兄弟节点、不在其子树内。取消原方案中「排除点击节点子树内选中项」的做法是对的。:692自然不再误触发,改动最小。补充 1:把「单一卡片结构证据」写成可测试的条件
截短成员只有同时满足以下三条才能并入外层块,否则保持独立:
以上三条各需正例和反例测试,并加入验收标准第 3、6 条的覆盖范围。
补充 2:尽早明确 #361 的依赖
v2 的写法是「#361 未合并时先确认集成方式」,这会让本单卡住。#1789 已用 #361 版本(0.9.68/81)成功下单,建议:
此项需用户决定;用户决定前本单的解析修复与合成树测试可以先行开展,但不装机、不发布。
其他
验收项共 9 条,偏多,但都在本单范围内,没有越界,可以接受。
完工回写:代码完成、已安装,待真机验收