diff --git a/docs/02-architecture-and-code-map.md b/docs/02-architecture-and-code-map.md index 7cbc716..a021ccd 100644 --- a/docs/02-architecture-and-code-map.md +++ b/docs/02-architecture-and-code-map.md @@ -2,8 +2,8 @@ generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Architecture-and-Code-Map wiki_url: https://git.ilapage.cn/OPC/goauto/wiki/Architecture-and-Code-Map.- -wiki_revision: b8b969b0c20aca9af6798a5a0b8784aa735600d4 -synchronized_at: 2026-10-07T08:07:14Z +wiki_revision: b3d1c9b7ba1dd5820a20e59b0c21a971aaf1b8ee +synchronized_at: 2026-10-08T01:41:51Z @@ -630,7 +630,7 @@ Web 唯一展示位置为“采集采购 → SYB 同步记录”:列表状态 ## 自动匹配扫描游标与租约守卫(#359) -实现绑定 `9fcbc64117bcee0cbed25c3957a14a25d826f637`,仅开发分支完成,迁移与部署尚未执行。 +实现绑定 `9fcbc64117bcee0cbed25c3957a14a25d826f637`,main 合并 `0138da85602fb1baf5e208b4bc451f9357190e9d` 已于 2026-10-08 部署到 122.228.200.167。MySQL 8.4.8 追加迁移 1791300000000 已执行,两列及非负约束回读通过;不代表 MySQL 锁竞争或真实多轮 AI 批次已验收。 - `server/app/goauto/shopeeproduct/auto_match_batch.go` 按商品ID键集分页,200/页、2000/轮、10分钟预算,复用原单商品匹配。30分钟运行租约与唯一active_slot不变,运行及工作项变更增加所有权检查。 - `shopee_spec_auto_match_run.resume_after_id` 为可空、非负BIGINT:NULL不提交位置,0回绕,从最近已终结非NULL运行读取;`stop_reason` 为VARCHAR(24)、NOT NULL DEFAULT ''。完成更新在相同所有权守卫下原子提交统计和位置。 diff --git a/docs/03-business-rules-and-glossary.md b/docs/03-business-rules-and-glossary.md index cd78267..e48c979 100644 --- a/docs/03-business-rules-and-glossary.md +++ b/docs/03-business-rules-and-glossary.md @@ -2,8 +2,8 @@ generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Business-Rules-and-Glossary wiki_url: https://git.ilapage.cn/OPC/goauto/wiki/Business-Rules-and-Glossary.- -wiki_revision: 2abd7a07ccf8a28308ce9c318250e2f8f957c137 -synchronized_at: 2026-10-07T08:07:17Z +wiki_revision: 233b72e9e2415a2456bb8dd27c770df881960db4 +synchronized_at: 2026-10-08T01:42:04Z @@ -827,7 +827,7 @@ Android 0.9.64 / versionCode 77,源码 `6550b9f`(分支实现,尚未安装 ## 蝦皮规格自动匹配有界续扫(#359) -实现绑定 `9fcbc64117bcee0cbed25c3957a14a25d826f637`,分支 `fix/359-auto-match-resume`;已实现并经本地合成验证,尚未合并、执行业务库迁移或发布,不代表当前线上已启用。 +实现绑定 `9fcbc64117bcee0cbed25c3957a14a25d826f637`,已通过 main 合并 `0138da85602fb1baf5e208b4bc451f9357190e9d` 于 2026-10-08 部署到 122.228.200.167,追加迁移已执行并重启 GoAuto。定时任务启停/Cron/参数保持原样;未手动触发真实 AI,真实多轮续扫及匹配效果仍待自然运行验收。 - 定时及管理员批量匹配沿用原匹配算法、阈值、人工/有效确认映射保护和指纹重试规则;仅修复固定首段扫描无法到达后方候选。单商品手动匹配不受批次租约检查影响。 - 使用商品 ID 升序键集分页,每页最多200件,每轮实际检查最多2000件,默认实际领取处理最多20件(batchLimit原校验范围不变)。整轮数据库及AI操作共享10分钟预算,逐商品串行,30分钟租约不变。 diff --git a/docs/08-agent-api-contract.md b/docs/08-agent-api-contract.md index 6834336..10382cd 100644 --- a/docs/08-agent-api-contract.md +++ b/docs/08-agent-api-contract.md @@ -2,8 +2,8 @@ generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Android-Agent-API-Contract wiki_url: https://git.ilapage.cn/OPC/goauto/wiki/Android-Agent-API-Contract.- -wiki_revision: cf3788145daf3dfe9a4526fd231bc4b8d730f763 -synchronized_at: 2026-10-07T08:07:41Z +wiki_revision: 640da0a86bf1057d418dbeb062c07a84cb5b1d8e +synchronized_at: 2026-10-08T01:42:56Z @@ -1475,7 +1475,7 @@ Web 输入去重后一个值提交旧标量、多个值提交重复集合键, ## Admin 蝦皮规格自动匹配运行摘要追加字段(#359) -实现绑定 `9fcbc64117bcee0cbed25c3957a14a25d826f637`,分支实现尚未部署。本节仅扩展既有Admin批次接口,不修改Android Agent接口、Web页面或权限。 +实现绑定 `9fcbc64117bcee0cbed25c3957a14a25d826f637`,main 合并 `0138da85602fb1baf5e208b4bc451f9357190e9d` 已于 2026-10-08 迁移并部署线上。本节仅扩展既有Admin批次接口,不修改Android Agent接口、Web页面或权限。本轮公共健康及未认证/非管理员拒绝边界通过;现有私有凭据为采购员,管理员运行摘要新字段的在线认证回读未完成,不能用数据库字段校验代替该项。 - `POST /api/admin/v1/shopee-spec-auto-match/runs` 与 `GET /api/admin/v1/shopee-spec-auto-match/runs/latest` 的既有运行对象增加`resumeAfterId`、`stopReason`,请求参数、原字段和状态保持兼容。 - `resumeAfterId`:可空非负整数;null表示该运行没有提交有效续扫点,0表示下一轮从头扫描,正数表示最后已完成检查的位置,不是预取页末商品。运行中/旧记录可能为null。 diff --git a/docs/13-deployment-and-operations.md b/docs/13-deployment-and-operations.md index b659ba3..9df8004 100644 --- a/docs/13-deployment-and-operations.md +++ b/docs/13-deployment-and-operations.md @@ -2,8 +2,8 @@ generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件) wiki_page: Deployment-and-Operations wiki_url: https://git.ilapage.cn/OPC/goauto/wiki/Deployment-and-Operations.- -wiki_revision: cf7b9d1e8ca8f97933936e4ddfd9edc3fac43c98 -synchronized_at: 2026-10-07T08:07:26Z +wiki_revision: db99427fa2460989d34d28ef864230a907fc5e6d +synchronized_at: 2026-10-08T01:42:22Z @@ -287,11 +287,24 @@ Provider 故障日志只允许记录调用关联 ID、操作类型、耗时、 ## #359 续扫版本迁移与验证边界 -源码 `9fcbc64117bcee0cbed25c3957a14a25d826f637`(`fix/359-auto-match-resume`)已实现;尚未执行本地/线上业务库迁移、合并、发布或真实匹配。以下为获得相应授权后的步骤,不是已上线结论。 +源码 `9fcbc64117bcee0cbed25c3957a14a25d826f637` 经 main 合并 `0138da85602fb1baf5e208b4bc451f9357190e9d`,已于 2026-10-08 按用户授权迁移并发布到 122.228.200.167。本地业务库未迁移,未手动触发真实匹配;下文保留部署约束,本次发布事实见后续小节。 1. 复核无冲突运行及现有迁移版本,按既有受限备份流程备份。追加迁移`1791300000000_shopee_spec_auto_match_resume.go`仅新增运行游标与停止原因,必须先迁移再运行新版本;不修改定时任务配置或历史商品。 2. 发布后观察运行的stopReason/resumeAfterId及真实计数,确认多轮向后推进、末尾回绕,而非反复固定首段。合法无候选仍允许processedCount=0,不能要求每轮强制匹配成功。 3. 批次结构化日志按run_id记录停止原因、实际扫描/领取/规格项计数及跳过类别,不记录商品规格原文或Provider响应。lost lease旧进程不能覆盖新运行,合法过期回收标记failed/lease_lost且不提交游标。 4. 回退旧二进制时保留追加列和已保存映射,不通过数据库回滚覆盖后续业务。恢复处理会带来原本预期的AI调用和映射写入,仍受默认20件、串行与总时间预算限制。 -本地测试使用SQLite内存库和模拟Provider;MySQL8.4.3只执行合成JSON粗过滤SELECT验证,未执行MySQL迁移/锁竞争集成验证,也未调用线上AI。MySQL正式迁移及真实批次验证仍须授权。 +本地测试使用SQLite内存库和模拟Provider;MySQL8.4.3只执行合成JSON粗过滤SELECT验证。本轮线上MySQL8.4.8追加迁移及结构回读已完成,MySQL锁竞争集成和真实多轮批次仍未验证,未手动调用线上AI。 + + +### #359 线上迁移与 Server 发布(2026-10-08) + +- 用户于 2026-10-07 暂缓发布,2026-10-08 明确重新授权执行迁移和重启更新。迁移前和切换前检查采集、采购及 attempt、同步、AI匹配/解析、回填、入库码批次和调度执行记录,均无执行中任务;没有取消/重置任务或手动触发真实业务。 +- 使用已核验 Server 包,源码 main 合并 `0138da85602fb1baf5e208b4bc451f9357190e9d`,发布目录 `/home/goauto/releases/20261007-0138da8-359`(昨日预备目录,今日启用)。current 已切换,`goauto.service` 重启 active;运行进程二进制 SHA256 与发布包一致:`4962738a7fe56244e13748d861f8e8214743ac22d8bf6440c6c8e27d381f88b6`。 +- 重新生成当时受限备份 `/home/goauto/backups/20261008-359/database.sql`,目录0700/文件0600,不下载生产数据。迁移前唯一缺失1791300000000;执行后无缺失,`resume_after_id` nullable BIGINT、`stop_reason` VARCHAR(24)默认空字符串以及非负CHECK约束均回读正确,旧运行保留NULL/空字符串。 +- Web与#363无源码变化,完整沿用已验证dist;config、环境、static/temp/var真实路径不变。sys_job启停、Cron、参数发布前后摘要一致,关闭的任务仍关闭,开启的任务继续原调度。没有构建或安装Android。 +- 发布中发现新release目录受严格umask影响为0700,Nginx读取index被拒绝导致根入口404。已定向恢复到上一release相同的0755,未删除dist、未改Nginx路由。后续发布应分别设置:备份目录0700与文件0600;对外静态服务所经release目录具备与已验证基线一致的遍历权限。不能认为mkdir传mode=0755就不会被umask收紧;切换前用实际Nginx读取身份验证可访问性,切换后按页面内容验收。 +- 公网 `/`、`/index.html`、`/login`、`/syb-products/index` 均与dist入口哈希一致;10项入口JS/CSS、健康与验证码接口通过。健康接口约定是HTTP200空正文,不应强制JSON解析。未认证请求业务码401,现有私有采购员凭据访问管理员运行摘要为403,未绕过或改权限;管理员新字段认证回读尚待有效管理员会话验证。 +- 新版启动日志结构检查未见panic/fatal/1146/1054。服务器systemd较旧,读取PID用 `systemctl show goauto -p MainPID` 并解析键值,不使用不支持的 `--value`;journalctl起始时间使用服务器本地格式 `YYYY-MM-DD HH:MM:SS`。 +- Nginx配置检查通过,本次无配置变化、不需重启或reload;仅恢复发布目录可读性即恢复前端。真实多轮续扫、末尾回绕和AI实际匹配仍待自然运行验收,健康检查不等于业务效果验收。 +- 回滚代码目标 `/home/goauto/releases/20261007-eb7cb6b-363` 保留;重启前核验任务空闲,保留追加列与已经保存的映射,不恢复旧备份覆盖此后业务。