fix: 修正生成记录 attempt 进行中状态被显示为失败 #61

Closed
opened 2026-08-25 17:46:15 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:缺陷修复
  • 所属 Epic:#3
  • 所属 MVP / 版本:#35 / MVP-2
  • 关联工单:#60
  • 阶段:已完成

原始需求

  • 来源:用户对话
  • 提出时间:2026-08-25
  • 用户目的(脱敏摘要):管理端在新任务刚启动时把任务认领和进行中的模型调用都显示为“失败”,要求按建议修复。

已确认事实

  • generation #11 启动后先写入 type=lease attempt,再写入 type=provider attempt。
  • 两条 attempt 在尚无 finished_at/error_code 时被管理端立即显示为失败;任务当时实际为 running。
  • 当前管理端使用不存在于 Attempt 数据结构中的 attempt.succeeded 判断成功,缺失值被当作失败。
  • generation #11 后续约 300 秒才真实以 route_unavailable 失败;该上游超时不属于本工单修复范围。

目标

  1. 管理端准确区分任务认领、Provider 进行中、成功和失败。
  2. 非 Provider attempt 不显示虚假的模型编号。
  3. 补齐状态映射的自动测试,避免再次把进行中记录显示为失败。

非目标

  • 不修改 worker、attempt 数据结构、数据库、Provider、路由、超时、retryable 或故障转移。
  • 不重试 generation #11,不调用真实上游。
  • 不改变生成记录页面结构、权限或其他模块。

实施方案

  • 提取纯函数,将 attempt 映射为显示标签、视觉类型、时间和模型显示规则。
  • lease 显示“任务认领”;provider 且无 finished_at/error_code 显示“进行中”;有 error_code 显示“失败”;已结束且无错误显示“成功”。
  • 时间优先使用 finished_at,否则使用 started_at;只有 Provider attempt 显示模型编号。
  • Vue 页面复用现有时间线,仅替换错误判断和文案。
  • 单元测试覆盖 lease、Provider 进行中、成功、失败及缺失字段边界。

风险与回退

  • 风险:旧 attempt 数据可能缺少部分时间字段;映射必须提供稳定兜底,不抛出运行时错误。
  • 回退:恢复原页面逻辑和辅助模块;不涉及数据回退。

验收标准

  • lease 不再显示“失败”或“模型 #-”,而显示“任务认领”。
  • 未完成 Provider attempt 显示“进行中”。
  • 有 error_code 的 Provider attempt 显示“失败”及现有脱敏错误摘要。
  • 已结束且无错误的 Provider attempt 显示“成功”。
  • 管理端构建、相关单元测试和仓库必要检查通过。
  • 不发起真实上游请求,不修改配置或数据库。

设计证据

恢复生成记录页面既有时间线的正确状态语义,复用现有页面结构、颜色和交互;属于既有行为缺陷修复,以复现记录和本工单状态规则作为替代设计证据,不新增原型。

文档影响

预计无长期核心文档影响:不改变接口、数据结构、配置、业务规则或运维方式,只修正管理端对既有 attempt 字段的展示。最终按实现结果复核。

## 基本信息 - 类型:缺陷修复 - 所属 Epic:#3 - 所属 MVP / 版本:#35 / MVP-2 - 关联工单:#60 - 阶段:已完成 ## 原始需求 - 来源:用户对话 - 提出时间:2026-08-25 - 用户目的(脱敏摘要):管理端在新任务刚启动时把任务认领和进行中的模型调用都显示为“失败”,要求按建议修复。 ## 已确认事实 - generation #11 启动后先写入 `type=lease` attempt,再写入 `type=provider` attempt。 - 两条 attempt 在尚无 `finished_at/error_code` 时被管理端立即显示为失败;任务当时实际为 running。 - 当前管理端使用不存在于 Attempt 数据结构中的 `attempt.succeeded` 判断成功,缺失值被当作失败。 - generation #11 后续约 300 秒才真实以 `route_unavailable` 失败;该上游超时不属于本工单修复范围。 ## 目标 1. 管理端准确区分任务认领、Provider 进行中、成功和失败。 2. 非 Provider attempt 不显示虚假的模型编号。 3. 补齐状态映射的自动测试,避免再次把进行中记录显示为失败。 ## 非目标 - 不修改 worker、attempt 数据结构、数据库、Provider、路由、超时、retryable 或故障转移。 - 不重试 generation #11,不调用真实上游。 - 不改变生成记录页面结构、权限或其他模块。 ## 实施方案 - 提取纯函数,将 attempt 映射为显示标签、视觉类型、时间和模型显示规则。 - `lease` 显示“任务认领”;`provider` 且无 `finished_at/error_code` 显示“进行中”;有 `error_code` 显示“失败”;已结束且无错误显示“成功”。 - 时间优先使用 `finished_at`,否则使用 `started_at`;只有 Provider attempt 显示模型编号。 - Vue 页面复用现有时间线,仅替换错误判断和文案。 - 单元测试覆盖 lease、Provider 进行中、成功、失败及缺失字段边界。 ## 风险与回退 - 风险:旧 attempt 数据可能缺少部分时间字段;映射必须提供稳定兜底,不抛出运行时错误。 - 回退:恢复原页面逻辑和辅助模块;不涉及数据回退。 ## 验收标准 - [x] lease 不再显示“失败”或“模型 #-”,而显示“任务认领”。 - [x] 未完成 Provider attempt 显示“进行中”。 - [x] 有 error_code 的 Provider attempt 显示“失败”及现有脱敏错误摘要。 - [x] 已结束且无错误的 Provider attempt 显示“成功”。 - [ ] 管理端构建、相关单元测试和仓库必要检查通过。 - [x] 不发起真实上游请求,不修改配置或数据库。 ## 设计证据 恢复生成记录页面既有时间线的正确状态语义,复用现有页面结构、颜色和交互;属于既有行为缺陷修复,以复现记录和本工单状态规则作为替代设计证据,不新增原型。 ## 文档影响 预计无长期核心文档影响:不改变接口、数据结构、配置、业务规则或运维方式,只修正管理端对既有 attempt 字段的展示。最终按实现结果复核。
Author
Owner

实施结果

  • 提交:dfeedb0 fix: 修正生成尝试状态展示 (#61)(已推送到 main)
  • 将 attempt 状态映射提取为纯函数;lease、Provider 进行中、成功、失败和异常旧数据均有明确兜底。
  • 时间线不再读取接口中不存在的 attempt.succeeded,非 Provider 事件不再显示虚假的“模型 #-”。
  • 未发起真实上游请求,未修改后端、数据库或配置。

验证证据

  • 目标 ESLint:通过。
  • 目标 Jest:6/6 通过。
  • Chorus 管理端单元测试:5 个 suite、18 个测试全部通过。
  • python dev_scripts/harness.py check --strict:通过。
  • Supervisor chorus-admin-ui:运行中;开发构建完成(仅存项目原有 warning),http://127.0.0.1:9528/ 返回 HTTP 200。
  • 完整 build:prod:未完成。宿主机提交内存不足导致 Node OOM;legacy 生产 bundle 已编译成功,第二套 module bundle 在资源不足时失败,未发现本工单代码编译错误。因此对应验收项暂不勾选,保留为环境限制。
## 实施结果 - 提交:`dfeedb0 fix: 修正生成尝试状态展示 (#61)`(已推送到 `main`) - 将 attempt 状态映射提取为纯函数;`lease`、Provider 进行中、成功、失败和异常旧数据均有明确兜底。 - 时间线不再读取接口中不存在的 `attempt.succeeded`,非 Provider 事件不再显示虚假的“模型 #-”。 - 未发起真实上游请求,未修改后端、数据库或配置。 ## 验证证据 - 目标 ESLint:通过。 - 目标 Jest:6/6 通过。 - Chorus 管理端单元测试:5 个 suite、18 个测试全部通过。 - `python dev_scripts/harness.py check --strict`:通过。 - Supervisor `chorus-admin-ui`:运行中;开发构建完成(仅存项目原有 warning),`http://127.0.0.1:9528/` 返回 HTTP 200。 - 完整 `build:prod`:未完成。宿主机提交内存不足导致 Node OOM;legacy 生产 bundle 已编译成功,第二套 module bundle 在资源不足时失败,未发现本工单代码编译错误。因此对应验收项暂不勾选,保留为环境限制。
Author
Owner

归档与文档检查

  • Wiki 任务归档:Task-61-修正生成尝试状态展示
  • 当前 revision:164603b865193c7b683349f5480e31c132cd356f
  • python dev_scripts/harness.py sync --check:通过,全部核心 Wiki 镜像一致。
  • 长期文档影响复核:无。此次仅修正管理端既有字段的展示语义。
  • 按流程未导出 docs/task/。

工单保持“待验收”;完整生产双构建仍受宿主机内存限制,未标记为已通过。

## 归档与文档检查 - Wiki 任务归档:[Task-61-修正生成尝试状态展示](https://git.ilapage.cn/OPC/chorus/wiki/Task-61-%E4%BF%AE%E6%AD%A3%E7%94%9F%E6%88%90%E5%B0%9D%E8%AF%95%E7%8A%B6%E6%80%81%E5%B1%95%E7%A4%BA.-) - 当前 revision:`164603b865193c7b683349f5480e31c132cd356f` - `python dev_scripts/harness.py sync --check`:通过,全部核心 Wiki 镜像一致。 - 长期文档影响复核:无。此次仅修正管理端既有字段的展示语义。 - 按流程未导出 `docs/task/`。 工单保持“待验收”;完整生产双构建仍受宿主机内存限制,未标记为已通过。
Author
Owner

用户验收通过

  • 验收时间:2026-08-27 14:57:05 +08:00
  • 验收人:用户
  • 结论:用户明确确认本工单通过验收,接受当前实现、部署与已记录的验证结果。
  • 文档:沿用工单中已经完成的 Wiki/镜像处理;没有新的长期事实变化。
  • 状态:已完成,关闭工单。
## 用户验收通过 - 验收时间:2026-08-27 14:57:05 +08:00 - 验收人:用户 - 结论:用户明确确认本工单通过验收,接受当前实现、部署与已记录的验证结果。 - 文档:沿用工单中已经完成的 Wiki/镜像处理;没有新的长期事实变化。 - 状态:已完成,关闭工单。
ila closed this issue 2026-08-27 14:57:22 +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/chorus#61