fix(android): 下单前规格复核统一括号与空白规范化,只认已选中的规格选项 #374
Open
opened 2026-10-09 12:05:35 +08:00 by ila
·
4 comments
No Branch/Tag Specified
main
fix/370-horizontal-grid
feat/372-export-shop
feat/378-heartbeat-diagnostics
feat/372-export-price
feat/372-list-export
fix/377-rejected-purchase-outbox
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#374
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.
基本信息
PURCHASE_SPEC_NOT_MATCHED)。已核验事实
线上数据与失败现场(只读,2026-10-09)
PURCHASE_SPEC_NOT_MATCHED「创建订单前规格复核失败」。现场在 PDD 下单面板上,颜色和尺码都已正确选中(选项selected=true),已经走过地址修改和前面所有复核。已选: [纯白]RW圆领 3XL码[145-165斤]、已选: [香槟]RW圆领 L码[105-115斤]:PDD 把规格里的全角【】显示成了英文[](逐字符核对过,是 0x5B/0x5D)。下发的规格是【纯白】RW圆领/3XL码【145-165斤】和【香槟】RW圆领/L码【105-115斤】。visible-to-user=false;尺码选项可见。【新品闪购*夏日大卖】黑色等),推测原因相同;那几次的快照没有查看,未证实。代码事实(
origin/maine26743c817275137f7dc8a3659461d552371b9e3)PurchaseLiveAutomation.kt:323-327finalConfirmation:对mappedColor、mappedSize各自判断「selectedSummary包含原文」或「任意可见控件文字包含原文」,都不满足就失败。比较不做任何规范化。VERIFY_ORDER_SUMMARY(PurchaseRehearsalExecutor.verifySummary)用规范化目标和点击时记录的精确选中证据,已经通过。两处判断标准不一致。selected || checked处理,并聚合子节点状态(PddProductDetailCollector.kt:279-280、:401)。selectedSummary(PddProductDetailCollector.kt:544-547)取的是全屏可见文字中第一个以「已选」等前缀开头的文字,没有限定在当前规格面板内。目标
非目标
verifySummary、地址、价格、数量和提交按钮的判断。normalizeColor、normalizeSize等现有公共规范化函数(它们影响采集、候选查找和点击)。方案(v3,补齐面板范围、摘要适用条件与确定性边界)
ParsedPddScreen.specPanelContainer在当前代码中赋值为panelScrollable(规格滚动区域),不等于整个规格面板。摘要可能位于滚动区域上方或同一弹层中的兄弟节点;非滚动面板也可能没有该容器。以既有页面结构证据识别受限的完整面板范围,不得直接要求摘要必须是滚动容器的子节点,也不得退化为全屏或根节点搜索。无法可靠确定归属时,不使用该摘要;当前可确认的面板内选项证据仍按下述规则判断。补正常滚动、摘要在滚动区外、无滚动确认面板的夹具,不改变原采集解析行为。selected || checked)时直接失败,摘要不能覆盖。仅括号/全半角显示差异本身不算非目标冲突。若发现多个不同实际候选归一化为同一目标值、或已有候选证据表明摘要可以分解为不同规格组合,则按歧义拒绝,不选第一个;同一选项的父子文本重复不算多个候选。目标已明确不可选时也拒绝。:/:、外围空白,再按专用规则规范化;不删除规格正文中的冒号、逗号、括号或内容。不新增全屏无前缀文本兜底;已有无前缀摘要只有在现有结构识别及本单完整面板归属均成立时才可使用。PURCHASE_SPEC_NOT_MATCHED。错误信息附上不含页面文字的诊断:哪个维度、走到哪一步、是否有面板内摘要、是否找到选中项、是否有冲突。子项目影响、依赖与并行
PurchaseLiveAutomation.kt、SpecValueNormalizer.kt(只新增函数)、必要时PddProductDetailCollector.kt(只读取面板内摘要和选项,不改现有解析行为),以及对应测试。设计证据
非 UI 改动,无需原型;以本正文为准。
验收标准
以下勾选代表合成自动化及受影响回归完成,不代表真机采购验收。
checked、没有selected的目标选项 → 通过。[纯白]RW圆领)→ 失败。【白色】不匹配[白色+黑色]超值两件装;尺码L不匹配XL。2xl 110-125斤、黑色,加绒)→ 按完整值比较,正确通过或拒绝。finalConfirmation测试保持通过;现有normalizeColor/normalizeSize测试不变;Android 构建通过,如实记录。待实施时确认
specPanelContainer的滚动区域当作完整弹层。新增范围识别仅服务最终复核,若证据不足明确记录不支持场景,不扩大到通用解析器重构。风险与回退
文档影响
备注
本单由 Claude Code 依据线上只读查询、失败现场快照(本机解析后已删除)、代码阅读和 Codex 审核意见起草;不含账号、地址、Cookie 或 Token。
实施结果(2026-10-09)
实现
6f1af70d0d2a4c70c31ba42e05c4321f08c6a78e,Wiki 镜像1c67f3f;分支fix/374-final-spec-confirmation已推送。仅 Android 最终规格复核及相应测试改变,独立基于 maine26743c,不包含 #373。366项受影响单测通过、debug构建与release单测编译通过;规格及代码质量独立复审通过。完整单测因未修改的图搜返回测试忙循环而中止,未宣称全量通过。最终选项沿用解析后的 text(既有 UI 尾价分离),再执行本单窄规范化;摘要与目标不新增内容删除。当前有证据支持的双维摘要只有颜色在前、空格分隔,不支持逗号或反序猜测。详情及未验证项见交付评论。工单保持待验收。
合并 main(2026-10-09)
用户授权按 #373 → #374 → 处理镜像冲突 → 联合回归与构建 → 推送 main 执行。main 合并提交
555a954605a83c12457ed1ada86eb732fe3bb023,最新文档提交3ee8dfc0aa93ef9020786244cce29c487631ddbe,远端已确认。联合25套件478项全通过,APK构建与release单测源码编译通过。未安装、未执行真实采购、未部署或重启服务;工单仍待人工验收。ila referenced this issue2026-10-09 12:05:45 +08:00
2026-10-09 Claude Code 复核 Codex 审核意见(SynapBus #123/#124)
结论:Codex 对 #374 的 5 项意见核实成立,正文方案 2、3 需要修改后再实施。以下行号以
origin/maine26743c为准。已核实
selected || checked处理,并把子节点的状态聚合到选项上(PddProductDetailCollector.kt:279-280、:401)。正文写的「只认selected=true」会误拦只有checked的控件,应改为沿用解析器的选项和选中语义。selectedSummary(:544-547)取的是全屏可见文字中第一个以「已选」等前缀开头的文字,没有限定在当前规格面板内。normalizeColor/normalizeSize等现有行为。建议修订正文(需用户确认后修改)
每个维度按以下顺序判断:
selected || checked)规范化后与目标完全相等 → 该维度通过。规范化只做:全角【】〔〕[]()转对应英文括号,全角字母数字和空格转半角,连续空白合并,去首尾空白。不删除括号内容,不做同义词、大小写折叠或通用 NFKC。
验收补充 Codex 列出的反例:只有
checked的控件、同维度选中冲突、不在面板内的伪摘要、同前缀的长规格(「黑色」与「黑色 加绒」)、带内部空格或逗号的规格、规范化后发生碰撞的值,以及数量、地址、价格拒绝路径的回归。待实施时确认
未验证
未运行测试,未操作真机。
#374 v3 交付 / 待验收(2026-10-09)
实现与范围
e26743c,分支fix/374-final-spec-confirmation已推送:实现6f1af70d0d2a4c70c31ba42e05c4321f08c6a78e,文档1c67f3f。PurchaseFinalSpecVerifier:结构限定完整面板,冲突/不可用/碰撞/已知组合歧义优先,当前精确选中证明优先,缺证维度才使用可信完整摘要。移除任意可见文本包含目标的兜底。异常附固定无原文诊断。实际验证
:app:testDebugUnitTest(上述8套件过滤)、:app:compileReleaseUnitTestKotlin、:app:assembleDebug,BUILD SUCCESSFUL。主Agent独立重跑退出0;git diff --check通过。ImageSearchBackRecoveryTest.kt:49→PinduoduoImageSearchAutomation.awaitPage:312持续忙循环,jstack显示worker CPU约151.9秒;仅中止该次Gradle会话,未停共享daemon、未改图搜代码。不能宣称全量单测通过。APK、边界与文档
D:/OPC/goauto-worktrees/issue-374/android/app/build/outputs/apk/debug/app-debug.apk。SHA256f9c30674b345a74a342f7f720348999a6b635d5e4ca340bc3954b5511e4f2888。0.9.69-370-diag1 / code82,本包不是 #373+#374 集成包,不能靠版本文字辨别代码,也未安装。后续合并装机须另行授权并构建对应集成版本。SpecPanelFixtures.sheet/taskOptionDedupSheet;无前缀摘要仅复用PddProductDetailCollectorTest.prefixlessPanel的quantity/header结构。未知完整范围禁用摘要,仍可用独立有界选项;双维只支持已证实的颜色+空格+尺码,不猜测逗号/反序。f8a5ca861965f5da9bdec2235205f23fb9a00840。一次sync及sync --check通过,17映射一致。镜像提交保留同步取得的既有发布、#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。