[缺陷] SYB 商品列表查询独立延长前端等待至 60 秒 #355

Open
opened 2026-10-05 14:47:55 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:缺陷;所属 Epic/MVP:无;阶段:待验收。
  • 来源:2026-10-05 用户对话,用户确认“仅 SYB 商品列表等待 60 秒”,并要求“建工单,做”。

依赖与并行

  • 基线:线上/远端 main 1f3ce610b9cb5e8f8887becb367d6302d588d924。
  • 无前置依赖;独立小修复,可与 #353/#354 并行,不夹带其尚未合并的功能。

当前事实与复现

  • 全部店铺、处理阶段 return_pending、采购类型 all,搜索触发 10000ms 超时。
  • 只读实测 GET /api/admin/v1/syb-products 耗时 12.62 秒后 HTTP/业务码均 200。后端处理阶段筛选先计算候选再分页;前端全局默认等待 10000ms。
  • 本单只缓解前端过早超时,不宣称查询性能已优化。

范围和已确认方案

  • 交付单元:Web;仅 listSybProducts 请求单独配置 timeout: 60000,覆盖搜索、分页及修改每页数量。
  • 保留筛选参数、取消 signal、加载/错误处理、旧请求隔离行为。
  • 不修改全局 timeout、其他列表、详情、AI 匹配、采购/采集、退货操作;不改 Server、Android、数据库、权限或状态机。
  • 不合并 main、不部署或重启服务;实施、验证、提交推送后待验收。
  • 预计文件:web/src/api/goauto/syb-products.js、针对性测试;Wiki 对应只读镜像。

设计证据

  • 恢复既有查询行为的非布局 Bug;复用当前加载/失败界面,无新组件,免 UI 原型。
  • 用户 2026-10-05 已确认列表独立 60 秒方案;未要求导出原型。

验收标准

  • SYB 商品列表默认 timeout=60000,筛选/分页参数和 signal 不变。
  • 超过 10 秒但少于 60 秒的模拟查询能正常返回,页面显示数据。
  • 其他接口不新增 timeout 覆盖,全局仍 10000ms;失败和取消仍传递,不自动新增重试。
  • 针对性测试、lint、Web 生产构建通过。
  • 提交推送、回写证据,保持待验收;未上线明确说明。

文档影响

  • 更新 Wiki Troubleshooting:说明此列表 60 秒客户端预算及它不等于后端提速;在线回读 revision,执行一次 sync 和 sync --check。
  • 不改服务端 API 数据契约、数据库或业务规则,无新增交付文档。默认不创建任务快照。

风险与回退

  • 等待可能延长到 60 秒,仍可能被上游更短超时终止;后端性能问题保留后续单独处理。
  • 回退仅撤销该接口 timeout 覆盖;无数据变更。

工具回退

  • 当前会话未提供 Gitea MCP,按仓库规则使用 Gitea REST API;凭据仅从用户级私密配置读取,不写入工单或仓库。

本次发布授权(2026-10-05)

用户要求将 #353、#354、#355 更新到线上服务,授权合并并配套发布 Server/Web 至 122.228.200.167。无需数据库迁移或 Android 更新;保留任务和定时任务原状态。发布前排除运行中的任务,发布证据完成后回写;用户未明确验收前不关闭。当前会话仍无 Gitea MCP,沿用已记录的 REST API 回退。

## 基本信息 - 类型:缺陷;所属 Epic/MVP:无;阶段:待验收。 - 来源:2026-10-05 用户对话,用户确认“仅 SYB 商品列表等待 60 秒”,并要求“建工单,做”。 ## 依赖与并行 - 基线:线上/远端 main 1f3ce610b9cb5e8f8887becb367d6302d588d924。 - 无前置依赖;独立小修复,可与 #353/#354 并行,不夹带其尚未合并的功能。 ## 当前事实与复现 - 全部店铺、处理阶段 return_pending、采购类型 all,搜索触发 10000ms 超时。 - 只读实测 GET /api/admin/v1/syb-products 耗时 12.62 秒后 HTTP/业务码均 200。后端处理阶段筛选先计算候选再分页;前端全局默认等待 10000ms。 - 本单只缓解前端过早超时,不宣称查询性能已优化。 ## 范围和已确认方案 - 交付单元:Web;仅 listSybProducts 请求单独配置 timeout: 60000,覆盖搜索、分页及修改每页数量。 - 保留筛选参数、取消 signal、加载/错误处理、旧请求隔离行为。 - 不修改全局 timeout、其他列表、详情、AI 匹配、采购/采集、退货操作;不改 Server、Android、数据库、权限或状态机。 - 不合并 main、不部署或重启服务;实施、验证、提交推送后待验收。 - 预计文件:web/src/api/goauto/syb-products.js、针对性测试;Wiki 对应只读镜像。 ## 设计证据 - 恢复既有查询行为的非布局 Bug;复用当前加载/失败界面,无新组件,免 UI 原型。 - 用户 2026-10-05 已确认列表独立 60 秒方案;未要求导出原型。 ## 验收标准 - [x] SYB 商品列表默认 timeout=60000,筛选/分页参数和 signal 不变。 - [x] 超过 10 秒但少于 60 秒的模拟查询能正常返回,页面显示数据。 - [x] 其他接口不新增 timeout 覆盖,全局仍 10000ms;失败和取消仍传递,不自动新增重试。 - [x] 针对性测试、lint、Web 生产构建通过。 - [x] 提交推送、回写证据,保持待验收;未上线明确说明。 ## 文档影响 - 更新 Wiki Troubleshooting:说明此列表 60 秒客户端预算及它不等于后端提速;在线回读 revision,执行一次 sync 和 sync --check。 - 不改服务端 API 数据契约、数据库或业务规则,无新增交付文档。默认不创建任务快照。 ## 风险与回退 - 等待可能延长到 60 秒,仍可能被上游更短超时终止;后端性能问题保留后续单独处理。 - 回退仅撤销该接口 timeout 覆盖;无数据变更。 ## 工具回退 - 当前会话未提供 Gitea MCP,按仓库规则使用 Gitea REST API;凭据仅从用户级私密配置读取,不写入工单或仓库。 ## 本次发布授权(2026-10-05) 用户要求将 #353、#354、#355 更新到线上服务,授权合并并配套发布 Server/Web 至 122.228.200.167。无需数据库迁移或 Android 更新;保留任务和定时任务原状态。发布前排除运行中的任务,发布证据完成后回写;用户未明确验收前不关闭。当前会话仍无 Gitea MCP,沿用已记录的 REST API 回退。
Author
Owner

实施完成,待用户验收(2026-10-05)

  • 分支 fix/355-syb-list-timeout,基于线上/main 1f3ce61;代码提交 a24c2068ef64e7fe6a92cc4b9b755d5606482aef,文档提交 19060d2,均已推送。
  • 生产代码仅一行:listSybProducts 单独增加默认 timeout: 60000;全局仍为 10000ms,既有 options/signal 原样传递;未改变其他 API、页面、后端、数据库或 Android。
  • node --test tests/unit/syb-products-timeout.test.cjs:4/4 通过。覆盖搜索/翻页/每页数量、参数与取消 signal、其他 SYB API 和全局超时隔离、错误原样传播无新增重试。
  • pnpm exec playwright test tests/e2e/syb-network-retry.spec.ts --workers=1:6/6 通过(本工单 localhost:9555 隔离 Vite,全部业务 API 用合成数据模拟)。新增 12 秒响应场景正常显示,仅发起一次列表请求;原网络恢复、业务错误、列表先显示、预检失败和旧结果隔离回归通过。测试临时服务已停止。
  • pnpm exec eslint src/api/goauto/syb-products.js 通过;pnpm run build:prod 成功,产物 web/dist。构建有既有 CSS 伪类/大包警告;测试开发环境共享依赖的字体 allow-list 警告不影响断言,未扩展处理。
  • Wiki Troubleshooting 已在线更新并回读 revision cc305694c6d7a6dfaa0e2eb150183fd36bb864a6;一次 harness.py sync 和一次 sync --check 均退出 0。同步附带获取的 #353 两份镜像只留本地,未纳入本单提交;本单仅提交 Troubleshooting 镜像。
  • 未合并 main、未发布或重启本地常驻/线上服务,线上当前等待预算尚未改变;没有执行生产写入。真实线上新版页面验收待获得发布授权后进行。60 秒为缓解,不代表后端筛选已提速。
## 实施完成,待用户验收(2026-10-05) - 分支 `fix/355-syb-list-timeout`,基于线上/main `1f3ce61`;代码提交 `a24c2068ef64e7fe6a92cc4b9b755d5606482aef`,文档提交 `19060d2`,均已推送。 - 生产代码仅一行:`listSybProducts` 单独增加默认 `timeout: 60000`;全局仍为 10000ms,既有 options/signal 原样传递;未改变其他 API、页面、后端、数据库或 Android。 - `node --test tests/unit/syb-products-timeout.test.cjs`:4/4 通过。覆盖搜索/翻页/每页数量、参数与取消 signal、其他 SYB API 和全局超时隔离、错误原样传播无新增重试。 - `pnpm exec playwright test tests/e2e/syb-network-retry.spec.ts --workers=1`:6/6 通过(本工单 localhost:9555 隔离 Vite,全部业务 API 用合成数据模拟)。新增 12 秒响应场景正常显示,仅发起一次列表请求;原网络恢复、业务错误、列表先显示、预检失败和旧结果隔离回归通过。测试临时服务已停止。 - `pnpm exec eslint src/api/goauto/syb-products.js` 通过;`pnpm run build:prod` 成功,产物 `web/dist`。构建有既有 CSS 伪类/大包警告;测试开发环境共享依赖的字体 allow-list 警告不影响断言,未扩展处理。 - Wiki `Troubleshooting` 已在线更新并回读 revision `cc305694c6d7a6dfaa0e2eb150183fd36bb864a6`;一次 `harness.py sync` 和一次 `sync --check` 均退出 0。同步附带获取的 #353 两份镜像只留本地,未纳入本单提交;本单仅提交 Troubleshooting 镜像。 - 未合并 main、未发布或重启本地常驻/线上服务,线上当前等待预算尚未改变;没有执行生产写入。真实线上新版页面验收待获得发布授权后进行。60 秒为缓解,不代表后端筛选已提速。
Author
Owner

#353 / #354 / #355 联合发布完成(2026-10-05)

用户本轮授权三单更新线上。合并提交 ddc18f5 同时保留 timeout: 60000、多店铺 paramsSerializer 及末尾 ...options,补充组合回归;main 已推送至 1b4f7cd39240cff9fd04eff4d5a60836a2dd8121(最后一笔为中文文档,无 Server/Web 差异)。

构建与测试

  • Node syb-products-timeout.test.cjs 5/5;目标 ESLint;Web 生产构建通过。
  • Server sybimport 本单/受影响范围测试(管理店铺 ID、handler 422、最大页数、日期、处理阶段分页、采购类型)通过,sybshop 全包通过;Linux amd64 CGO=0 构建成功。
  • 合并后 Playwright 四个文件 30/30:列表网络行为、上下分页/多店铺、退货取消/确认;其中 #355 实际模拟 12 秒响应。显式排除已由双方在 main 复现的旧“超过100个采集候选按钮”失效断言,不宣称全库无失败。sybimport 既有 12 个解析断言失败已由 Claude 与 main 比对,本次未扩大修复。

线上发布

  • 目标 122.228.200.167;release /home/goauto/releases/20261005-ddc18f5-353-355;旧 release /home/goauto/releases/20260930-352-1f3ce61 完整保留,可原子切回并重启回退。
  • 发布前曾遇运行中的采集/采购,检查阻止切换并等待其自然结束。最终采集/采购/SYB同步/Yeeke同步/订单回填的运行数均为0后,才原子切换 current 并重启 goauto;没有强制取消或重置任务。
  • 二进制 SHA256 bd8fefe932a890346723a784ee4447dfec322e14c4584a23e479c4b882a10fc2,上传包与服务端二进制回读校验一致。复用既有配置、static、var、temp 和环境文件;没有数据库迁移、APK 更新、权限扩展、定时开关变化、创建订单或付款。
  • Nginx 配置检查通过,配置未修改;current/dist 随 release 生效,未重启其他项目。首页 HTML 与本机构建 index 完全一致,包含应用挂载点,不是 go-admin 欢迎页;10 个入口资源、SYB 商品 JS 哈希校验通过。健康接口正常,未认证业务接口仍401。

线上只读验收

  • 已登录 API:两个管理店铺的 OR 总数等于两单店总数之和,返回行均在选择范围;非法 shopIds 返回422。
  • 已登录真实浏览器页面:上下两个分页实例存在,搜索请求实际 timeout 都为60000;原“全部店铺/退货待确认/采购类型全部”正常返回,耗时约12.14秒,无10000ms超时弹窗。未保存生产页面截图、原始数据或凭据。
  • 服务 active;当前新进程结构日志未发现 panic/fatal/1146/1054;系统任务1/2保持开启、3/4/5/6保持关闭,历史待执行采购记录未改。

文档与范围

  • #353 中文业务/API段落已在线修正并回读,revision 分别 9dfe6566032003ed16f7c693d5d257500b7c5025、60bac77693f31b33162a65dc902456f324774f7b;镜像 sync/check 通过并提交 1b4f7cd。设计状态标注和已有测试失败说明已补正文。
  • #354 局部布局无新增长期文档影响;确认状态已补正。
  • #355 Troubleshooting 发布状态已在线回读 40e77a656d1c21d72454ad722a4f71a0a4491241;发布后镜像 sync/check 已通过,文档提交 e4d4a6f 已推送 main;与线上绑定的 1b4f7cd 仅有文档差异,无需重建或再次重启。
  • 三单均保持待用户验收,不关闭;发布不是用户验收结论。
## #353 / #354 / #355 联合发布完成(2026-10-05) 用户本轮授权三单更新线上。合并提交 `ddc18f5` 同时保留 `timeout: 60000`、多店铺 `paramsSerializer` 及末尾 `...options`,补充组合回归;main 已推送至 `1b4f7cd39240cff9fd04eff4d5a60836a2dd8121`(最后一笔为中文文档,无 Server/Web 差异)。 ### 构建与测试 - Node `syb-products-timeout.test.cjs` 5/5;目标 ESLint;Web 生产构建通过。 - Server sybimport 本单/受影响范围测试(管理店铺 ID、handler 422、最大页数、日期、处理阶段分页、采购类型)通过,sybshop 全包通过;Linux amd64 CGO=0 构建成功。 - 合并后 Playwright 四个文件 30/30:列表网络行为、上下分页/多店铺、退货取消/确认;其中 #355 实际模拟 12 秒响应。显式排除已由双方在 main 复现的旧“超过100个采集候选按钮”失效断言,不宣称全库无失败。sybimport 既有 12 个解析断言失败已由 Claude 与 main 比对,本次未扩大修复。 ### 线上发布 - 目标 122.228.200.167;release `/home/goauto/releases/20261005-ddc18f5-353-355`;旧 release `/home/goauto/releases/20260930-352-1f3ce61` 完整保留,可原子切回并重启回退。 - 发布前曾遇运行中的采集/采购,检查阻止切换并等待其自然结束。最终采集/采购/SYB同步/Yeeke同步/订单回填的运行数均为0后,才原子切换 current 并重启 goauto;没有强制取消或重置任务。 - 二进制 SHA256 `bd8fefe932a890346723a784ee4447dfec322e14c4584a23e479c4b882a10fc2`,上传包与服务端二进制回读校验一致。复用既有配置、static、var、temp 和环境文件;没有数据库迁移、APK 更新、权限扩展、定时开关变化、创建订单或付款。 - Nginx 配置检查通过,配置未修改;current/dist 随 release 生效,未重启其他项目。首页 HTML 与本机构建 index 完全一致,包含应用挂载点,不是 go-admin 欢迎页;10 个入口资源、SYB 商品 JS 哈希校验通过。健康接口正常,未认证业务接口仍401。 ### 线上只读验收 - 已登录 API:两个管理店铺的 OR 总数等于两单店总数之和,返回行均在选择范围;非法 shopIds 返回422。 - 已登录真实浏览器页面:上下两个分页实例存在,搜索请求实际 timeout 都为60000;原“全部店铺/退货待确认/采购类型全部”正常返回,耗时约12.14秒,无10000ms超时弹窗。未保存生产页面截图、原始数据或凭据。 - 服务 active;当前新进程结构日志未发现 panic/fatal/1146/1054;系统任务1/2保持开启、3/4/5/6保持关闭,历史待执行采购记录未改。 ### 文档与范围 - #353 中文业务/API段落已在线修正并回读,revision 分别 `9dfe6566032003ed16f7c693d5d257500b7c5025`、`60bac77693f31b33162a65dc902456f324774f7b`;镜像 sync/check 通过并提交 `1b4f7cd`。设计状态标注和已有测试失败说明已补正文。 - #354 局部布局无新增长期文档影响;确认状态已补正。 - #355 Troubleshooting 发布状态已在线回读 `40e77a656d1c21d72454ad722a4f71a0a4491241`;发布后镜像 sync/check 已通过,文档提交 e4d4a6f 已推送 main;与线上绑定的 1b4f7cd 仅有文档差异,无需重建或再次重启。 - 三单均保持待用户验收,不关闭;发布不是用户验收结论。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#355