降低 SYB 自动同步失败率:当天快照恢复与分页容量优化 #145

Closed
opened 2026-08-29 10:02:29 +08:00 by ila · 2 comments
Owner

所属与来源

  • 来源:用户于 2026-08-29 反馈“SYB 同步模块里的同步记录很多是失败的”,要求分析原因并按建议建立实施工单。
  • 类型:缺陷修复 / 服务端 / SYB 外部只读同步。
  • 交付单元:server/、shared-docs。
  • 设计证据:不新增页面、组件、导航、权限或显示结构;只调整后台同步算法和既有同步记录错误说明,不需要 UI 原型。
  • 当前状态:待实施。

当前证据与根因

核验本地当前数据库 syb_sync_run 共 121 条记录:

结果 数量 占比
failed 90 74.4%
interrupted 11 9.1%
succeeded 20 16.5%

90 条失败按脱敏错误分类:

根因 数量 占失败
/am/stock/list 高页码请求连续 3 次、每次 60 秒超时 70 77.8%
当天分页时新增数据,尾页条数超过初始预期 17 18.9%
当天分页结束后总数变化 1 1.1%
OCR DNS 失败 1 1.1%
SYB 域名 DNS 失败 1 1.1%

最近 48 小时同样以列表超时和当天快照漂移为主。典型超时发生在固定 pageSize=20 下的第 38、43、56 页,分别已读取约 740、840、1100 条后失败。

代码事实

  1. server/app/goauto/sybimport/sync.go 的 loadDailyList 固定按初始 listTotal 和 20 条分页,任一页失败即终止;分页后再次读取总数并要求完全一致。
  2. server/app/goauto/sybclient/client.go 已只对 listTotal、list、detail/listByStock 三类只读请求做最多 3 次重试,退避 1 秒、2 秒,单次 HTTP 总超时 60 秒。继续增加普通请求重试不能解决稳定的高 offset 超时。
  3. 每小时同步固定覆盖 Asia/Shanghai 的昨天和今天;今天持续新增货运单,严格静态快照容易在尾页失败。
  4. docs/12-syb-erp-interface.md 已批准“今天快照漂移最多重拉 3 次;历史日期不重复拉取;第三次仍漂移时可保存最后一次合法唯一 ID 的完整明细,但运行保持失败”的长期契约,当前代码尚未实现。
  5. 已写商品按 (order_code, detail_id) 幂等 upsert;同步失败保留已写数据是既有正确行为。

目标

  1. 实现现有 SYB 接口契约中已经批准的“今天快照漂移恢复”行为。
  2. 通过真实只读实验确认 SYB 支持的稳定分页容量,并在不降低完整性校验的前提下减少列表页数和高 offset 查询。
  3. 保留同步完整性语义:无法证明全范围完整时不得标记成功。
  4. 保留当前只读请求重试边界、幂等写入、店铺过滤、单任务互斥和失败保留部分数据的行为。
  5. 上线后以同步记录统计验证失败率下降。

实施方案

一、今天快照漂移恢复

  1. 将单日列表加载错误区分为:
    • 临时网络/5xx/响应格式错误;
    • 会话失效或业务失败;
    • 本地数据完整性错误;
    • 快照漂移:尾页相对初始总数增长、分页后总数变化、唯一 ID 数量因当天新增而不一致。
  2. 仅当日期等于 Asia/Shanghai 的今天,且错误明确属于快照漂移时,重新读取今天总数并从今天第一页完整重拉,最多 3 次。
  3. 每次尝试使用独立 ID 集合,不复用上一次页面;已经完成的历史日期不得重复拉取。
  4. 每次尝试仍受 max_matches 限制;网络错误、非法 ID、重复 ID、明细缺失、明细出现未请求 ID、空商品明细、业务失败和会话失效不得使用快照放宽。
  5. 第三次仍发生快照漂移时:
    • 只有最后一次取得的列表本身包含合法、唯一 ID,才读取其完整明细并按既有 upsert 保存;
    • 运行仍标记 failed,不得伪装成功或推进任何完整覆盖事实;
    • 错误明确说明“今天持续变化,已保存本次取得的完整明细,但未形成稳定快照;下次同步继续覆盖”。
  6. 历史日期继续执行严格单次快照校验,任何漂移立即失败。

二、分页容量只读实验

  1. 为 SYB 列表增加可配置 pageSize,默认值切换前先完成真实只读实验。
  2. 在同一稳定历史日期分别验证 pageSize=20/50/100/200:
    • listTotal 结果一致;
    • 每页 data.total == len(list);
    • 所有页 ID 无重复、无遗漏,唯一 ID 总数等于 listTotal;
    • 最后一页条数正确;
    • 记录总页数、各页及总耗时;
    • 不读取或记录收件人、电话、地址等个人数据。
  3. 选择真实验证通过且响应稳定的最大保守值;建议优先考虑 100,但不得在无证据时直接定为 100。
  4. 生产默认值和配置示例使用选定值;若 50/100/200 均不稳定,则保持 20,并在本工单记录实验结果与限制,不伪造优化结论。
  5. 分页容量提高后仍保留当前完整性校验、只读有限重试、60 秒单请求超时和 30 分钟单次同步上限;本单不增加重试次数、不把超时改为 5 分钟。

三、验证后观察

  1. 部署后观察至少 24~48 小时同步记录,按相同错误分类对比:成功、列表超时、快照漂移、DNS、登录/OCR 和中断数量。
  2. 若前两项已显著降低失败率,本单结束;“历史日期已经成功后降低重复覆盖频率”不在本单实施,只有仍有必要时另建工单。

非目标

  • 不把部分同步标为成功,不忽略短页、重复 ID、缺失明细或总数变化。
  • 不自动重跑整个“昨天 + 今天”任务,不改变每小时触发频率。
  • 不增加通用请求重试次数,不延长为超长单页等待。
  • 不修改 SYB 写接口、档口入库码回写、采购、订单、支付或 Android。
  • 不删除或清理历史 syb_sync_run 记录。
  • 不改变店铺过滤、凭据、Cookie、验证码、OCR 服务地址或安全边界。
  • 不在本单新增同步记录数据库字段或 Admin 页面诊断结构;结构化失败阶段如仍需要,另建工单。
  • 不实现“昨天成功后本日跳过”或降低历史日期覆盖频率;先观察前两项效果。

安全边界

  • 所有新增真实实验仅调用 SYB 只读列表/总数接口,不调用任何写接口。
  • 不在代码、日志、工单、文档或测试产物中保存账号、密码、Cookie、验证码图片、Token、原始响应和个人数据。
  • 测试输出只记录日期、分页大小、页数、耗时、总数和唯一 ID 数量,不记录订单内容。
  • 不降低数据完整性门禁;无法证明完整时仍失败。
  • 不改变同一时刻一个 SYB 同步任务的数据库互斥。

验收标准

  • 今天出现尾页增长、分页后总数变化或同类快照漂移时,最多从今天第一页重拉 3 次。
  • 历史日期不会因今天重试被重复拉取。
  • 每次今天重试使用独立 ID 集合,不混用上次不完整结果。
  • 第三次仍漂移时,仅在最后一次列表 ID 合法且唯一、明细完整时保存数据;运行仍为 failed,错误提示准确。
  • 网络错误、业务失败、会话失效、非法/重复 ID 和明细不完整不会进入快照放宽路径。
  • max_matches 在每次尝试中继续生效。
  • pageSize=20/50/100/200 真实只读实验有可复核的总数、唯一 ID、页数和耗时结果。
  • 生产默认 pageSize 只使用通过完整性验证的值;无更大稳定值时保持 20。
  • 分页调整后列表总数、每页条数、唯一 ID、明细一一对应校验全部保留。
  • 既有同步记录互斥、进度、失败保留部分数据和 (order_code, detail_id) 幂等行为不回退。
  • 自动化测试覆盖:历史日期漂移立即失败、今天首次/第二次恢复、第三次降级保存仍失败、不同错误不误入恢复、容量上限、分页完整性。
  • 受影响 Go 测试及构建通过。
  • 部署后 24~48 小时记录失败分类对比已回写工单;未覆盖的线上时段和上游波动如实记录。

验证方式

  • go test ./app/goauto/sybclient/... ./app/goauto/sybimport/...
  • go test ./app/goauto/...
  • 服务端构建验证。
  • 使用测试 HTTP Server 模拟:今天分页增长、总数变化、连续漂移、网络超时、5xx、会话失效、非法和重复 ID、缺失明细。
  • 在真实 SYB 上只读执行分页容量实验;实验前确认没有其他同步任务占用运行槽,且不得保存业务明细。
  • 部署后查询 syb_sync_run 汇总状态和脱敏错误类别,比较实施前基线:121 条中失败 90、成功 20、中断 11;失败中列表超时 70、快照漂移 18、DNS 2。

依赖与并行

  • 无代码前置依赖。
  • 不与其他修改 server/app/goauto/sybimport/sync.go、sybclient/client.go 或 SYB 接口契约的工单并行实施。
  • 分页容量实验严格在今天快照恢复实现之前或实现后独立执行均可,但生产默认值必须等待实验结果。
  • 不涉及数据库迁移、权限、并发模型变化、删除数据、发布或不可逆写操作;若实施中发现必须触及这些范围,停止并更新工单,重新等待用户确认。

风险与回退

  • 风险:更大页面可能使单次响应变慢或触发上游限制。控制:真实比较 20/50/100/200,只采用完整性和稳定性均通过的值。
  • 风险:把其他完整性错误误判为当天新增。控制:定义窄化的快照漂移错误类型,非法/重复 ID、明细异常和网络错误不放宽。
  • 风险:第三次降级保存被误认为成功。控制:状态继续为 failed,错误信息明确,不推进完整覆盖事实。
  • 回退:恢复 pageSize=20 并关闭今天快照重试即可;已有 SYB 商品和同步记录不需回滚。

文档影响

  • 需要更新 Wiki SYB-ERP-Interface-Contract:记录真实验证后的稳定 pageSize 及今天快照恢复的实际实现边界。
  • 若自动同步长期行为描述仅按既有契约落地、无新规则,不重复修改 Business-Rules-and-Glossary;实施时核对并在工单说明。
  • 按 Wiki-first:先修改线上 Wiki 并回读 revision,再执行一次 python dev_scripts/harness.py sync 和一次 sync --check,提交镜像并把页面与 revision 回写本工单。

状态

待实施。

## 所属与来源 - 来源:用户于 2026-08-29 反馈“SYB 同步模块里的同步记录很多是失败的”,要求分析原因并按建议建立实施工单。 - 类型:缺陷修复 / 服务端 / SYB 外部只读同步。 - 交付单元:`server/`、shared-docs。 - 设计证据:不新增页面、组件、导航、权限或显示结构;只调整后台同步算法和既有同步记录错误说明,不需要 UI 原型。 - 当前状态:待实施。 ## 当前证据与根因 核验本地当前数据库 `syb_sync_run` 共 121 条记录: | 结果 | 数量 | 占比 | |---|---:|---:| | `failed` | 90 | 74.4% | | `interrupted` | 11 | 9.1% | | `succeeded` | 20 | 16.5% | 90 条失败按脱敏错误分类: | 根因 | 数量 | 占失败 | |---|---:|---:| | `/am/stock/list` 高页码请求连续 3 次、每次 60 秒超时 | 70 | 77.8% | | 当天分页时新增数据,尾页条数超过初始预期 | 17 | 18.9% | | 当天分页结束后总数变化 | 1 | 1.1% | | OCR DNS 失败 | 1 | 1.1% | | SYB 域名 DNS 失败 | 1 | 1.1% | 最近 48 小时同样以列表超时和当天快照漂移为主。典型超时发生在固定 `pageSize=20` 下的第 38、43、56 页,分别已读取约 740、840、1100 条后失败。 ### 代码事实 1. `server/app/goauto/sybimport/sync.go` 的 `loadDailyList` 固定按初始 `listTotal` 和 20 条分页,任一页失败即终止;分页后再次读取总数并要求完全一致。 2. `server/app/goauto/sybclient/client.go` 已只对 `listTotal`、`list`、`detail/listByStock` 三类只读请求做最多 3 次重试,退避 1 秒、2 秒,单次 HTTP 总超时 60 秒。继续增加普通请求重试不能解决稳定的高 offset 超时。 3. 每小时同步固定覆盖 Asia/Shanghai 的昨天和今天;今天持续新增货运单,严格静态快照容易在尾页失败。 4. `docs/12-syb-erp-interface.md` 已批准“今天快照漂移最多重拉 3 次;历史日期不重复拉取;第三次仍漂移时可保存最后一次合法唯一 ID 的完整明细,但运行保持失败”的长期契约,当前代码尚未实现。 5. 已写商品按 `(order_code, detail_id)` 幂等 upsert;同步失败保留已写数据是既有正确行为。 ## 目标 1. 实现现有 SYB 接口契约中已经批准的“今天快照漂移恢复”行为。 2. 通过真实只读实验确认 SYB 支持的稳定分页容量,并在不降低完整性校验的前提下减少列表页数和高 offset 查询。 3. 保留同步完整性语义:无法证明全范围完整时不得标记成功。 4. 保留当前只读请求重试边界、幂等写入、店铺过滤、单任务互斥和失败保留部分数据的行为。 5. 上线后以同步记录统计验证失败率下降。 ## 实施方案 ### 一、今天快照漂移恢复 1. 将单日列表加载错误区分为: - 临时网络/5xx/响应格式错误; - 会话失效或业务失败; - 本地数据完整性错误; - **快照漂移**:尾页相对初始总数增长、分页后总数变化、唯一 ID 数量因当天新增而不一致。 2. 仅当日期等于 Asia/Shanghai 的今天,且错误明确属于快照漂移时,重新读取今天总数并从今天第一页完整重拉,最多 3 次。 3. 每次尝试使用独立 ID 集合,不复用上一次页面;已经完成的历史日期不得重复拉取。 4. 每次尝试仍受 `max_matches` 限制;网络错误、非法 ID、重复 ID、明细缺失、明细出现未请求 ID、空商品明细、业务失败和会话失效不得使用快照放宽。 5. 第三次仍发生快照漂移时: - 只有最后一次取得的列表本身包含合法、唯一 ID,才读取其完整明细并按既有 upsert 保存; - 运行仍标记 `failed`,不得伪装成功或推进任何完整覆盖事实; - 错误明确说明“今天持续变化,已保存本次取得的完整明细,但未形成稳定快照;下次同步继续覆盖”。 6. 历史日期继续执行严格单次快照校验,任何漂移立即失败。 ### 二、分页容量只读实验 7. 为 SYB 列表增加可配置 `pageSize`,默认值切换前先完成真实只读实验。 8. 在同一稳定历史日期分别验证 `pageSize=20/50/100/200`: - `listTotal` 结果一致; - 每页 `data.total == len(list)`; - 所有页 ID 无重复、无遗漏,唯一 ID 总数等于 `listTotal`; - 最后一页条数正确; - 记录总页数、各页及总耗时; - 不读取或记录收件人、电话、地址等个人数据。 9. 选择真实验证通过且响应稳定的最大保守值;建议优先考虑 100,但不得在无证据时直接定为 100。 10. 生产默认值和配置示例使用选定值;若 50/100/200 均不稳定,则保持 20,并在本工单记录实验结果与限制,不伪造优化结论。 11. 分页容量提高后仍保留当前完整性校验、只读有限重试、60 秒单请求超时和 30 分钟单次同步上限;本单不增加重试次数、不把超时改为 5 分钟。 ### 三、验证后观察 12. 部署后观察至少 24~48 小时同步记录,按相同错误分类对比:成功、列表超时、快照漂移、DNS、登录/OCR 和中断数量。 13. 若前两项已显著降低失败率,本单结束;“历史日期已经成功后降低重复覆盖频率”不在本单实施,只有仍有必要时另建工单。 ## 非目标 - 不把部分同步标为成功,不忽略短页、重复 ID、缺失明细或总数变化。 - 不自动重跑整个“昨天 + 今天”任务,不改变每小时触发频率。 - 不增加通用请求重试次数,不延长为超长单页等待。 - 不修改 SYB 写接口、档口入库码回写、采购、订单、支付或 Android。 - 不删除或清理历史 `syb_sync_run` 记录。 - 不改变店铺过滤、凭据、Cookie、验证码、OCR 服务地址或安全边界。 - 不在本单新增同步记录数据库字段或 Admin 页面诊断结构;结构化失败阶段如仍需要,另建工单。 - 不实现“昨天成功后本日跳过”或降低历史日期覆盖频率;先观察前两项效果。 ## 安全边界 - 所有新增真实实验仅调用 SYB 只读列表/总数接口,不调用任何写接口。 - 不在代码、日志、工单、文档或测试产物中保存账号、密码、Cookie、验证码图片、Token、原始响应和个人数据。 - 测试输出只记录日期、分页大小、页数、耗时、总数和唯一 ID 数量,不记录订单内容。 - 不降低数据完整性门禁;无法证明完整时仍失败。 - 不改变同一时刻一个 SYB 同步任务的数据库互斥。 ## 验收标准 - [ ] 今天出现尾页增长、分页后总数变化或同类快照漂移时,最多从今天第一页重拉 3 次。 - [ ] 历史日期不会因今天重试被重复拉取。 - [ ] 每次今天重试使用独立 ID 集合,不混用上次不完整结果。 - [ ] 第三次仍漂移时,仅在最后一次列表 ID 合法且唯一、明细完整时保存数据;运行仍为 `failed`,错误提示准确。 - [ ] 网络错误、业务失败、会话失效、非法/重复 ID 和明细不完整不会进入快照放宽路径。 - [ ] `max_matches` 在每次尝试中继续生效。 - [ ] `pageSize=20/50/100/200` 真实只读实验有可复核的总数、唯一 ID、页数和耗时结果。 - [ ] 生产默认 `pageSize` 只使用通过完整性验证的值;无更大稳定值时保持 20。 - [ ] 分页调整后列表总数、每页条数、唯一 ID、明细一一对应校验全部保留。 - [ ] 既有同步记录互斥、进度、失败保留部分数据和 `(order_code, detail_id)` 幂等行为不回退。 - [ ] 自动化测试覆盖:历史日期漂移立即失败、今天首次/第二次恢复、第三次降级保存仍失败、不同错误不误入恢复、容量上限、分页完整性。 - [ ] 受影响 Go 测试及构建通过。 - [ ] 部署后 24~48 小时记录失败分类对比已回写工单;未覆盖的线上时段和上游波动如实记录。 ## 验证方式 - `go test ./app/goauto/sybclient/... ./app/goauto/sybimport/...` - `go test ./app/goauto/...` - 服务端构建验证。 - 使用测试 HTTP Server 模拟:今天分页增长、总数变化、连续漂移、网络超时、5xx、会话失效、非法和重复 ID、缺失明细。 - 在真实 SYB 上只读执行分页容量实验;实验前确认没有其他同步任务占用运行槽,且不得保存业务明细。 - 部署后查询 `syb_sync_run` 汇总状态和脱敏错误类别,比较实施前基线:121 条中失败 90、成功 20、中断 11;失败中列表超时 70、快照漂移 18、DNS 2。 ## 依赖与并行 - 无代码前置依赖。 - 不与其他修改 `server/app/goauto/sybimport/sync.go`、`sybclient/client.go` 或 SYB 接口契约的工单并行实施。 - 分页容量实验严格在今天快照恢复实现之前或实现后独立执行均可,但生产默认值必须等待实验结果。 - 不涉及数据库迁移、权限、并发模型变化、删除数据、发布或不可逆写操作;若实施中发现必须触及这些范围,停止并更新工单,重新等待用户确认。 ## 风险与回退 - 风险:更大页面可能使单次响应变慢或触发上游限制。控制:真实比较 20/50/100/200,只采用完整性和稳定性均通过的值。 - 风险:把其他完整性错误误判为当天新增。控制:定义窄化的快照漂移错误类型,非法/重复 ID、明细异常和网络错误不放宽。 - 风险:第三次降级保存被误认为成功。控制:状态继续为 `failed`,错误信息明确,不推进完整覆盖事实。 - 回退:恢复 `pageSize=20` 并关闭今天快照重试即可;已有 SYB 商品和同步记录不需回滚。 ## 文档影响 - 需要更新 Wiki `SYB-ERP-Interface-Contract`:记录真实验证后的稳定 `pageSize` 及今天快照恢复的实际实现边界。 - 若自动同步长期行为描述仅按既有契约落地、无新规则,不重复修改 `Business-Rules-and-Glossary`;实施时核对并在工单说明。 - 按 Wiki-first:先修改线上 Wiki 并回读 revision,再执行一次 `python dev_scripts/harness.py sync` 和一次 `sync --check`,提交镜像并把页面与 revision 回写本工单。 ## 状态 待实施。
Author
Owner

实施完成,待验收

提交:7afe5ae fix(#145): stabilize SYB daily pagination,已推送 main。

实现

  • 仅 UTC+8 今天的明确快照漂移从第一页完整重拉,最多 3 次,每次使用独立 ID 集合;历史日期仍严格单次失败。
  • 网络/5xx、会话/业务失败、page total 与 list 长度不自洽、非法/重复 ID、明细不完整不会进入快照放宽。
  • 第三次仍漂移时,仅最后一次列表 ID 合法唯一且页内完整才继续拉取并保存完整明细;运行仍返回 failed,并明确提示未形成稳定快照。
  • 每次今天重拉重新检查 max_matches;已完成历史日期不重复加载。
  • 生产默认 pageSize 从 20 调整为真实验证通过的保守值 50。

真实只读分页容量实验

稳定历史日 2026-08-28,共 753 张,不读取/输出订单、收件人或地址内容:

pageSize 结果 页数 总耗时
20 第 38 页三次 60 秒超时 未完成 192.37s
50 总数/页长/唯一 ID/尾页完整 16 24.242s
100 完整 8 2m34.751s
200 完整 4 22.183s

50/100/200 均通过完整性验证;选择 50,避免直接采用最大值。

验证

  • go test -count=1 ./app/goauto/sybclient/... ./app/goauto/sybimport/... ./config/...:通过。
  • go test -count=1 ./app/goauto/... ./config/...:通过。
  • go build ./cmd/api:通过。
  • git diff --check:通过。
  • 自动化覆盖历史漂移立即失败、今天漂移重拉、第三次降级列表、短页、非法/重复 ID、明细不完整和容量上限。

文档

线上 SYB-ERP-Interface-Contract 已更新并回读,记录实验结果与默认 50;本地镜像已提交。harness.py sync 仍在远端读取阶段不退出,已停止;python dev_scripts/harness.py check --strict 通过。

后续观察

24~48 小时线上失败率对比属于部署后观察窗口,当前无法提前宣称完成;需按工单基线继续统计列表超时、快照漂移、DNS、OCR/登录与中断。

## 实施完成,待验收 提交:`7afe5ae fix(#145): stabilize SYB daily pagination`,已推送 `main`。 ### 实现 - 仅 UTC+8 今天的明确快照漂移从第一页完整重拉,最多 3 次,每次使用独立 ID 集合;历史日期仍严格单次失败。 - 网络/5xx、会话/业务失败、page total 与 list 长度不自洽、非法/重复 ID、明细不完整不会进入快照放宽。 - 第三次仍漂移时,仅最后一次列表 ID 合法唯一且页内完整才继续拉取并保存完整明细;运行仍返回 failed,并明确提示未形成稳定快照。 - 每次今天重拉重新检查 max_matches;已完成历史日期不重复加载。 - 生产默认 pageSize 从 20 调整为真实验证通过的保守值 50。 ### 真实只读分页容量实验 稳定历史日 2026-08-28,共 753 张,不读取/输出订单、收件人或地址内容: | pageSize | 结果 | 页数 | 总耗时 | |---:|---|---:|---:| | 20 | 第 38 页三次 60 秒超时 | 未完成 | 192.37s | | 50 | 总数/页长/唯一 ID/尾页完整 | 16 | 24.242s | | 100 | 完整 | 8 | 2m34.751s | | 200 | 完整 | 4 | 22.183s | 50/100/200 均通过完整性验证;选择 50,避免直接采用最大值。 ### 验证 - `go test -count=1 ./app/goauto/sybclient/... ./app/goauto/sybimport/... ./config/...`:通过。 - `go test -count=1 ./app/goauto/... ./config/...`:通过。 - `go build ./cmd/api`:通过。 - `git diff --check`:通过。 - 自动化覆盖历史漂移立即失败、今天漂移重拉、第三次降级列表、短页、非法/重复 ID、明细不完整和容量上限。 ### 文档 线上 `SYB-ERP-Interface-Contract` 已更新并回读,记录实验结果与默认 50;本地镜像已提交。`harness.py sync` 仍在远端读取阶段不退出,已停止;`python dev_scripts/harness.py check --strict` 通过。 ### 后续观察 24~48 小时线上失败率对比属于部署后观察窗口,当前无法提前宣称完成;需按工单基线继续统计列表超时、快照漂移、DNS、OCR/登录与中断。
Author
Owner

用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。

用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。
ila closed this issue 2026-08-29 20:44:09 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#145