Clone
5
Task-72-Fix-Supervisor-SYB-startup-race
QiuSW edited this page 2026-09-21 16:13:32 +08:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#72 修复 Supervisor 重启后 SYB 页面短暂报错

  • 类型:缺陷
  • 所属 Epic:本地开发与运行稳定性
  • 所属 MVP / 版本:T59
  • 状态:待验收
  • 日期:2026-08-24
  • Gitea 工单:#72
  • Wiki 页面:Task-72-Fix-Supervisor-SYB-startup-race
  • Wiki revision:见页面 revision

背景与目标

Supervisor 同时重启 Admin API 和 Admin UI 时,Vite 比 API 的迁移、编译和 HTTP 监听更早就绪。SYB 商品页随即请求列表和采购准备预检,短暂连接失败被统一显示为“服务器连接异常”。本任务使 UI 等待 API 真正就绪,并让 SYB 页面对一次短暂网络断开做有界恢复。

最终方案

  • start-web.ps1 在启动 Vite 前轮询 config.yaml 的 ports.server 对应 /api/v1/health。
  • API 返回 HTTP 200 后才启动 UI;60 秒仍未就绪则明确失败,由 Supervisor 按既有策略重启。
  • SYB 商品列表和采购准备预检第一次遇到 Axios Network Error 时,静默等待 1 秒并只重试一次。
  • 第二次网络失败显示原有提示;认证、权限、业务错误及有响应的服务端错误不重试。
  • 与建单方案一致,无数据库、接口、认证、Android 或业务规则变化。

修改文件

  • scripts/start-web.ps1:增加 API HTTP 就绪轮询。
  • web/src/utils/request.js:支持首次网络失败的静默处理。
  • web/src/api/goauto/syb-products.js:允许传入请求控制选项。
  • web/src/api/goauto/purchase-tasks.js:允许采购准备预检传入请求控制选项。
  • web/src/views/goauto/syb-products/index.vue:增加一次性网络重试。
  • web/tests/e2e/syb-network-retry.spec.ts:覆盖恢复和不重试边界。
  • docs/04-local-development-and-verification.md:同步长期 Wiki 镜像。

验收结果

验收标准 结果
UI 等待 API HTTP 就绪后再启动 通过
首次短暂网络失败自动恢复且不显示最终错误 通过
业务错误不重试 通过
API/UI HTTP 200,GoAuto 与 Chorus 实例 RUNNING 通过
用户页面验收 待验收

测试

  • 执行命令:PowerShell Parser、start-web.ps1 -ValidateConfigOnly
  • 结果:通过。
  • 执行命令:pnpm exec playwright test tests/e2e/syb-network-retry.spec.ts --workers=1
  • 结果:2 项通过。
  • 执行命令:.\scripts\verify.ps1 -Component web
  • 结果:通过;lint 0 error、30 个既有 warning,生产构建成功。
  • 执行命令:Supervisor 同时重启两个 GoAuto 实例并检查日志、HTTP 和全部实例状态。
  • 结果:UI 等待 API ready 后启动;8010/9527 返回 200;GoAuto 和 Chorus 均 RUNNING。
  • 执行命令:python dev_scripts/harness.py sync --check、python dev_scripts/harness.py check --strict、git diff --check
  • 结果:通过。
  • 未验证部分:用户登录后的 SYB 页面人工验收待用户完成。

相关提交

  • 476ca64 fix(#72): wait for API and retry SYB load