fix(server): 修复蝦皮规格自动匹配固定首批扫描空跑,增加有界分页续扫 #359
Open
opened 2026-10-06 15:25:19 +08:00 by ila
·
7 comments
No Branch/Tag Specified
main
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#359
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.
基本信息
0138da85602fb1baf5e208b4bc451f9357190e9d,线上122.228.200.167;保持原定时任务配置,未手动触发真实 AI。管理员运行摘要字段认证回读、真实多轮续扫及匹配效果仍待验证。下文早期未授权/未发布描述为当时阶段记录,以最终发布回写为准。基线、现象与根因
依赖与并行
子项目影响与范围
最小方案(v2,整合 Claude #55/#56)
1. 候选筛选与处理边界
2. 稳定键集轮转和持久化(审核阻塞项B2)
3. 分页期间的单运行与租约保护(审核阻塞项B1)
4. 计数与诊断
5. 数据库兼容与范围
实际涉及:auto_match_batch.go、批次/扫描/MySQL只读测试、models/shopee_spec_auto_match.go及追加迁移/测试;为保证每次Provider调用及映射落库都有批次守卫,局部修改ai_suggest.go和auto_match.go;aimatching/service.go仅纠正配置读取数据库错误被disabled判断遮蔽的问题。非批次Provider重试、算法和阈值不变。
设计证据与确认
验收标准
前500/1000件为空规格,后方存在合法待匹配商品时,后方商品能被处理;覆盖首个有效商品在1812位附近的合成回归,不使用生产样本。
只有颜色、只有尺码的合法商品不会被前置筛选误排除;空规格、空 values、仅 other 维度正确跳过。
首段全部已确认、未变 unmatched、达到重试上限、冷却/租约中时,仍继续扫描后续商品,不反复停在首段。
每轮实际处理不超过 batchLimit;扫描预算触顶可安全退出,下一轮及进程重启后继续扫描。
页中达到处理上限时,不漏掉页内尚未检查记录;跨页不因自身更新 updated_at 而漏扫;末尾回绕后能重新发现条件已变化商品。
保留全局单运行、指纹去重、原重试/租约、人工/正确映射保护及事务保存;不新增并行 AI 调用或全量重试。
统计计数与实际分支一致,可解释处理0件;失败、正常无候选、预算退出能够区分,不暴露业务样本或凭据。
授权后的线上验收证明不再重复扫描同一批空档案,出现真实候选/处理;允许合法无候选时仍为0,不强制所有826件成功。
必要测试、文档影响、提交、未验证项和部署/迁移授权边界回写工单,待用户验收,不自行关闭。
租约过期、owner变化、续期零行且再次核验不再拥有有效租约或数据库错误时,旧运行不再领取/调用、不回写游标、不覆盖新owner。
租约回收记录lease_lost;预算退出记录scan_budget/time_budget;正常末尾、空候选记录end_of_scan;计数与停止原因一致。
不满页但只处理一部分时不回绕;整页边界、预算恰好触顶、最近游标为0或NULL均有回归。
10分钟总预算实际传播至数据库与模拟Provider;超时不再领取,原30分钟租约保护不中断。
追加迁移重复执行安全,旧记录默认值正确、旧代码读取不受影响;Admin响应新增字段不改变原字段和状态语义。
验证方式
风险和回退
文档影响、任务记录
需求变化记录
开始实施(2026-10-07)
用户授权「做#359」。基线 origin/main
6781b309d4cd0de226c038b9fd509cb68e021b51,独立 worktreeD:/OPC/goauto-worktrees/issue-359,分支fix/359-auto-match-resume。按已确认 v2 串行执行:①复核 shopeeproduct 基线并增加失败回归;②追加字段/幂等迁移及测试,实施分页、持久游标、预算和租约守卫;③定向/整包回归与独立规格、质量评审;④Wiki-first 更新、同步检查、提交推送与证据回写。
仅编写迁移和测试,不执行本地/线上业务库迁移、不建删 MySQL 测试库、不发布、不触发真实 AI/匹配/采购。SQLite 内存测试可运行,MySQL 实测需要独立授权。无需 UI 原型,不涉及 #360 规格键规则。
实施交付(2026-10-07,开发分支待验收)
实现范围
fix/359-auto-match-resume,基线6781b309d4cd0de226c038b9fd509cb68e021b51。1791300000000_shopee_spec_auto_match_resume.go,Admin运行摘要追加字段;只编写,未执行业务库迁移。提交
95847a3f2daccb07f65a2a8f62cfd7c6144328c3:有界续扫/守卫/迁移与回归。151c426e54751717c59859b23458ee2f60f20ced:新增测试重复运行隔离。9fcbc64117bcee0cbed25c3957a14a25d826f637:MySQL零变更续租兼容。a82a1469a64255ffa34a516d02e87656376ff22f(分支已推送远端)。真实验证
使用已安装Go1.26.5(PATH默认Go版本较旧,不修改全局环境)。
go test ./app/goauto/shopeeproduct ./app/goauto/aimatching ./cmd/migrate/migration/version-local -count=1:PASS(8.587s / 3.036s / 2.548s)。-count=3:PASS(10.270s)。TestAutoMatchScanMySQLJSONCoarseFilter:7个合成SELECT用例PASS;不选择业务库、不建表/改表、不读写生产行。默认其他Go测试仍使用SQLite及模拟Provider。git diff --checkPASS;Wiki一次sync及一次sync --check结果见下。harness.py check --strict仍有既有阻塞:docs/evidence/pdd-home-35727-summary.md被判为未登记Wiki镜像;该文件未由本单修改,不扩大范围处理。长期文档
在线更新并回读一致,未直接修改镜像:
Business-Rules-and-Glossary: 2abd7a07ccf8a28308ce9c318250e2f8f957c137
Architecture-and-Code-Map: b8b969b0c20aca9af6798a5a0b8784aa735600d4
Deployment-and-Operations: cf7b9d1e8ca8f97933936e4ddfd9edc3fac43c98
Android-Agent-API-Contract: cf3788145daf3dfe9a4526fd231bc4b8d730f763
已执行一次
harness.py sync成功;一次sync --check,17页全部一致。未执行/待授权
D:/OPC/goauto-worktrees/issue-359按规则保留。合并完成,发布前迁移授权待补(2026-10-07)
用户授权「#359合并main,部署线上」。已在现有main发布工作区按常规no-ff合并,合并提交
0138da85602fb1baf5e208b4bc451f9357190e9d已推送origin/main;保留工作区原有无关未跟踪产物,未修改主开发目录。合并结果重新执行 shopeeproduct、aimatching、version-local 三包测试,全部PASS(7.062s/2.951s/1.587s)。
本单明确要求迁移单独授权,因此尚未执行业务库迁移、线上发布或重启。需确认允许在122.228.200.167执行追加迁移
1791300000000_shopee_spec_auto_match_resume.go:只增加shopee_spec_auto_match_run.resume_after_id/stop_reason和迁移登记,不改历史商品/映射,不改定时任务启停。获授权后再做线上运行任务检查、受限备份、迁移、发布与验证。本轮只更新合并/授权状态,无新的运行契约变化,不重复Wiki同步;部署完成后统一更新发布事实。工单保持open。发布尚未完成,按规则保留issue-359 worktree,发布成功后再清理。
开始授权发布(2026-10-07)
用户明确授权在线执行 #359 追加迁移,随后发布并重启 GoAuto。合并main
0138da85602fb1baf5e208b4bc451f9357190e9d;Linux Server已重新构建,SHA2564962738a7fe56244e13748d861f8e8214743ac22d8bf6440c6c8e27d381f88b6。线上目标122.228.200.167,当前release
20261007-eb7cb6b-363,MySQL8.4.8。注册版本比对唯一缺失1791300000000;Web与线上#363源码无差异,将完整复制已验证dist并核对全部文件哈希。保持config、环境、持久资源真实路径及sys_job启停/Cron/参数不变,不触发真实匹配或采购。预检有1个采集任务运行,其余被检查运行项为0;暂不迁移或重启,先准备发布文件,等待空闲后执行受限数据库备份及迁移,切换前再核验。
按用户要求暂缓发布(2026-10-07)
用户回复「暂时不能暂停,稍后再发布」。已停止发布等待,不再继续自动迁移/重启。最后一次只读核验:current仍为
/home/goauto/releases/20261007-eb7cb6b-363;唯一未应用迁移仍为1791300000000,两个新字段均未创建;sys_job状态/Cron/参数摘要未变。等待进程已结束,没有后台部署链继续执行;采购任务保持原样运行,未取消或重置。已完成准备:
0138da85602fb1baf5e208b4bc451f9357190e9d;Server构建及上传哈希一致4962738a7fe56244e13748d861f8e8214743ac22d8bf6440c6c8e27d381f88b6。/home/goauto/releases/20261007-0138da8-359,436个Web文件与#363逐一一致;沿用config与static/temp/var真实路径。/home/goauto/backups/20261007-359/database.sql,89,158,536字节;不下载生产数据。恢复发布时必须重新检查任务/迁移/版本,并生成新的当时备份,不把这份较早快照作为恢复覆盖后续业务的依据。未执行:追加迁移、current切换、GoAuto/Nginx重启、真实匹配。工单保持open待发布/验收,issue-359 worktree按尚未完成发布的规则保留。临时部署辅助文件仅保留于本机发布工作区verification-359,不含凭据或生产业务数据,不纳入源码提交。没有新的线上长期行为变化,本轮不更新Wiki。
恢复授权发布(2026-10-08)
用户明确授权「执行迁移和完成重启更新」,解除此前暂缓。已重新只读检查:采集/采购主任务及attempt、同步、AI匹配/解析、回填、入库码等执行中计数均为0;current仍为20261007-eb7cb6b-363,唯一缺失迁移1791300000000,两个新字段均未创建。
沿用已验证的#359发布包与哈希,重新生成服务器受限备份(不使用昨日快照覆盖新增业务);迁移与切换前再次检查空闲。保持定时任务启停、Cron、参数和Web资源不变,不主动触发真实匹配或采购。此次仅#359发布,不混入#364/#365。
线上迁移与发布完成(2026-10-08,待业务验收)
用户重新授权执行迁移和完成重启更新。今日备份后,迁移前/切换前两次检查采集、采购及 attempt、同步、AI、回填、入库码批次和调度执行记录均为0;未取消或重置任务。
部署与迁移
0138da85602fb1baf5e208b4bc451f9357190e9d;current 切到/home/goauto/releases/20261007-0138da8-359,goauto.service 已重启且 active。4962738a7fe56244e13748d861f8e8214743ac22d8bf6440c6c8e27d381f88b6。/home/goauto/backups/20261008-359/database.sql,90,758,085 字节,目录0700/文件0600;未下载生产数据。故障与验证
文档与清理
233b72e9e2415a2456bb8dd27c770df881960db4b3d1c9b7ba1dd5820a20e59b0c21a971aaf1b8ee640da0a86bf1057d418dbeb062c07a84cb5b1d8edb99427fa2460989d34d28ef864230a907fc5e6d7622795已推送main,不需要再部署二进制。D:/OPC/goauto-worktrees/issue-359并prune;保留分支与提交历史。release-316既有无关未跟踪内容未动。20261007-eb7cb6b-363和受限备份保留;回退代码仍须检查任务窗口,保留追加列及发布后的业务数据,不恢复旧库覆盖后续业务。工单保持open待用户验收。