T59 修复 Supervisor 重启后 SYB 页面短暂提示服务器连接异常 #72

Closed
opened 2026-08-24 10:54:34 +08:00 by ila · 3 comments
Owner

原始需求摘要

用户于 2026-08-24 在 Supervisor 同时重启 goauto-admin-api 与 goauto-admin-ui 后访问 SYB 商品页面,出现“服务器连接异常,请检查服务器!”,并要求按诊断建议修复。

已确认事实

  • Supervisor 于同一时刻启动前后端;Web/Vite 启动快于 API 的数据库检查、迁移、Go 编译和端口监听。
  • startsecs=3 只能证明 PowerShell 包装进程存活,不能证明 API HTTP 就绪。
  • SYB 页面创建时先查询列表,再请求采购准备预检;任一请求在 API 未就绪时失败,Axios 会显示统一网络错误且页面不自动恢复。
  • 服务完全启动后,8010、9527 和 SYB 路由均可响应;API 日志未发现对应 SYB 500 或数据库错误。

目标

  1. Supervisor 启动 Admin UI 时,先等待配置的 Admin API 真正可访问,再启动 Vite。
  2. SYB 商品页首次加载遇到短暂网络断开时,进行一次有界短延迟重试;业务 4xx/5xx 不重试。
  3. 保持现有端口、接口、认证、数据库和业务状态不变。

非目标

  • 不修改 SYB 导入、解析或采购准备业务规则。
  • 不调整数据库,不新增接口。
  • 不修改 Android Agent。
  • 不改动 Chorus 实例。

实施方案

  • 在 scripts/start-web.ps1 增加有限时长的 API 就绪轮询,使用 config.yaml 的 ports.server,成功后才启动 Vite;超时明确失败并交由 Supervisor 按现有策略重启。
  • 在 SYB 页面加载入口只针对 Axios 网络错误增加一次短延迟重试,避免 API 独立重启期间页面停在失败状态;不对认证、权限、业务错误或超时做盲目重试。
  • 为就绪检测与页面重试补充自动化测试。

设计证据

恢复既有页面正常加载行为,不新增页面、组件、文案、布局、权限或业务流程,按恢复既有行为的缺陷豁免 UI 原型。

验收

  • 同时重启两个 GoAuto Supervisor 实例后,Admin UI 只在 API 可访问后启动。
  • API 短暂未就绪时,SYB 页面首次加载可自动恢复,不弹出最终“服务器连接异常”提示。
  • API 持续不可用时,不无限重试,仍能明确失败。
  • 非网络错误不重试。
  • 8010/9527 监听正常,Supervisor 两实例 RUNNING,Chorus 不受影响。
  • Web 受影响测试和构建通过;PowerShell 语法与启动参数校验通过。

依赖、范围与文档影响

  • 依赖 #71 的 Supervisor 配置与启动脚本,允许在 #71 待验收期间串行修复。
  • 影响 scripts/ 与 web/,不可与同时修改相同启动脚本或 SYB 页面加载逻辑的任务并行。
  • 启动就绪行为和排错方式变化,需要更新 Local Development and Verification Wiki;接口、架构、业务规则无长期文档变化。
## 原始需求摘要 用户于 2026-08-24 在 Supervisor 同时重启 `goauto-admin-api` 与 `goauto-admin-ui` 后访问 SYB 商品页面,出现“服务器连接异常,请检查服务器!”,并要求按诊断建议修复。 ## 已确认事实 - Supervisor 于同一时刻启动前后端;Web/Vite 启动快于 API 的数据库检查、迁移、Go 编译和端口监听。 - `startsecs=3` 只能证明 PowerShell 包装进程存活,不能证明 API HTTP 就绪。 - SYB 页面创建时先查询列表,再请求采购准备预检;任一请求在 API 未就绪时失败,Axios 会显示统一网络错误且页面不自动恢复。 - 服务完全启动后,8010、9527 和 SYB 路由均可响应;API 日志未发现对应 SYB 500 或数据库错误。 ## 目标 1. Supervisor 启动 Admin UI 时,先等待配置的 Admin API 真正可访问,再启动 Vite。 2. SYB 商品页首次加载遇到短暂网络断开时,进行一次有界短延迟重试;业务 4xx/5xx 不重试。 3. 保持现有端口、接口、认证、数据库和业务状态不变。 ## 非目标 - 不修改 SYB 导入、解析或采购准备业务规则。 - 不调整数据库,不新增接口。 - 不修改 Android Agent。 - 不改动 Chorus 实例。 ## 实施方案 - 在 `scripts/start-web.ps1` 增加有限时长的 API 就绪轮询,使用 `config.yaml` 的 `ports.server`,成功后才启动 Vite;超时明确失败并交由 Supervisor 按现有策略重启。 - 在 SYB 页面加载入口只针对 Axios 网络错误增加一次短延迟重试,避免 API 独立重启期间页面停在失败状态;不对认证、权限、业务错误或超时做盲目重试。 - 为就绪检测与页面重试补充自动化测试。 ## 设计证据 恢复既有页面正常加载行为,不新增页面、组件、文案、布局、权限或业务流程,按恢复既有行为的缺陷豁免 UI 原型。 ## 验收 - 同时重启两个 GoAuto Supervisor 实例后,Admin UI 只在 API 可访问后启动。 - API 短暂未就绪时,SYB 页面首次加载可自动恢复,不弹出最终“服务器连接异常”提示。 - API 持续不可用时,不无限重试,仍能明确失败。 - 非网络错误不重试。 - 8010/9527 监听正常,Supervisor 两实例 RUNNING,Chorus 不受影响。 - Web 受影响测试和构建通过;PowerShell 语法与启动参数校验通过。 ## 依赖、范围与文档影响 - 依赖 #71 的 Supervisor 配置与启动脚本,允许在 #71 待验收期间串行修复。 - 影响 `scripts/` 与 `web/`,不可与同时修改相同启动脚本或 SYB 页面加载逻辑的任务并行。 - 启动就绪行为和排错方式变化,需要更新 Local Development and Verification Wiki;接口、架构、业务规则无长期文档变化。
Author
Owner

实施完成,待验收

修复内容

  • start-web.ps1 在启动 Vite 前轮询 config.yaml 中 API 端口的 /api/v1/health,最多等待 60 秒;超时明确失败并交由 Supervisor 重启。
  • SYB 商品列表及采购准备预检首次遇到 Axios Network Error 时,静默等待 1 秒并且只重试一次。
  • 第二次网络失败仍显示原有连接异常提示;认证、权限、业务错误和有响应的服务端错误不重试。
  • 新增 Playwright 回归测试,覆盖“首次网络失败后恢复”和“业务错误不重试”。

验证

  • PowerShell 语法解析:通过。
  • start-web.ps1 -ValidateConfigOnly:通过。
  • 定向 ESLint:通过。
  • 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-admin-api、goauto-admin-ui:UI 日志确认先等待 API,API ready 后才启动 Vite。
  • API 健康接口和 Admin UI:HTTP 200。
  • 两个 GoAuto 实例及三个 Chorus 实例均保持 RUNNING。
  • DevHarness strict、Wiki sync check、git diff --check:通过。

文档与提交

  • Local Development and Verification Wiki revision:2075bb8a28fa01dcdbbcf105f12a29afc9b2e6f3。
  • 实现提交:476ca64。
  • 未修改数据库、接口、认证、Android 或业务数据。

工单保持打开,等待用户验收。

## 实施完成,待验收 ### 修复内容 - `start-web.ps1` 在启动 Vite 前轮询 `config.yaml` 中 API 端口的 `/api/v1/health`,最多等待 60 秒;超时明确失败并交由 Supervisor 重启。 - SYB 商品列表及采购准备预检首次遇到 Axios `Network Error` 时,静默等待 1 秒并且只重试一次。 - 第二次网络失败仍显示原有连接异常提示;认证、权限、业务错误和有响应的服务端错误不重试。 - 新增 Playwright 回归测试,覆盖“首次网络失败后恢复”和“业务错误不重试”。 ### 验证 - PowerShell 语法解析:通过。 - `start-web.ps1 -ValidateConfigOnly`:通过。 - 定向 ESLint:通过。 - `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-admin-api`、`goauto-admin-ui`:UI 日志确认先等待 API,API ready 后才启动 Vite。 - API 健康接口和 Admin UI:HTTP 200。 - 两个 GoAuto 实例及三个 Chorus 实例均保持 RUNNING。 - DevHarness strict、Wiki sync check、`git diff --check`:通过。 ### 文档与提交 - Local Development and Verification Wiki revision:`2075bb8a28fa01dcdbbcf105f12a29afc9b2e6f3`。 - 实现提交:`476ca64`。 - 未修改数据库、接口、认证、Android 或业务数据。 工单保持打开,等待用户验收。
Author
Owner

补充归档与远端证据:

补充归档与远端证据: - 任务归档:https://git.ilapage.cn/OPC/goauto/wiki/Task-72-Fix-Supervisor-SYB-startup-race.- - 任务归档 revision:`8cc343f9fd11e461cd257a313870cc8110ec54ff` - 提交 `476ca64` 已推送到 `origin/main`。 - 自动归档命令因本机 Harness 旧 Token 对当前 Gitea 返回 401,已按 Wiki-first 回退规则使用 Gitea MCP 创建并在线回读确认;未输出或修改 Token。
Author
Owner

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila closed this issue 2026-08-28 15:07:35 +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#72