已关闭
bug(cli): default command factory constructs HTTP clients without timeout #111
aflyingto创建于  4月3日关闭于  4月3日
aflyingto成员
4月3日 创建

背景

命令层默认依赖注入在 pkg/cmdutil/factory.go 中直接返回 &http.Client{},没有任何超时设置。

与此同时,api/client.go 已经定义了 DefaultHTTPClient(),默认带 30 秒超时,但默认工厂并未使用这个实现。

代码证据

  • pkg/cmdutil/factory.go
  • api/client.go

实际结果

所有依赖 Factory.HttpClient 的命令在网络阻塞、服务端长时间无响应或连接卡死时,可能无限等待。

预期结果

默认工厂应构造有超时保护的 HTTP client,至少与 api.DefaultHTTPClient() 保持一致。

影响

  • CLI 在非交互和自动化场景中可能永久挂起
  • agent 调用无法稳定设置超时边界
  • 这属于系统级稳定性问题,不是单个命令 bug

建议方向

  • 让 cmdutil.DefaultFactory() 复用 api.DefaultHTTPClient() 或等价超时配置
  • 为工厂级默认 client 行为补测试,避免后续回归
likedislike
Aaflyingto成员
4月3日 添加了label:bugpriority:high
Aaflyingto成员
4月3日 关联了pull request:docs: add team agent review task briefs
Aaflyingto成员
4月3日 关闭了 issue
aflyingto成员
4月3日 评论:

该 issue 在 PR #91 合并时被错误自动关闭。PR #91 仅新增 Team agent 审视任务书,并未实现本 issue 对应问题;现重新打开,后续应由真正修复该问题的 PR 关闭。

likedislike
Aaflyingto成员
4月3日 重新打开了 issue
Aaflyingto成员
4月3日 关联了里程碑:v0.5.0
aflyingto成员
4月3日 评论:

Team agent 交付策略

  • 当前已纳入里程碑: v0.5.0
  • 风险等级预期: high
  • 执行模式: Coordinator -> Verifier -> Implementer -> Reviewer -> human final check

建议推进顺序:

  1. 先核验默认 factory 构造 client 的真实超时行为,补 status/verified
  2. 修复默认 HTTP client 超时配置,并补工厂级测试
  3. 完成 go test ./...、构建和真实命令验证
  4. 完成安全审查、作者自检、独立评审;合并前保留人工最终确认

说明:

  • 本 issue 属于 v0.5.0 第一批优先项
  • 这是系统级稳定性问题,避免与无关命令重构混在同一 PR
likedislike
Aaflyingto成员
4月3日 关联了pull request:[WIP]fix: close open issue backlog batch
aflyingto成员
4月3日 评论:

验证记录

  • 当前版本或分支: bugfix/issue-110 / PR #92
  • 验证时间: 2026-04-03
  • 复现命令: go test ./... && ./scripts/regression-core.sh
  • 实际结果: 问题已复现并已在当前变更中处理
  • 预期结果: 行为与 issue 描述一致收口,并具备最小测试/回归证据
  • 时间线检查: 当前改动尚未合入 main,以 PR #92 进入评审为准
  • 结论: 继续修复,进入 ready-for-review

开发进度

  • 当前状态: ready-for-review
  • 根因: 默认 Factory 的 HTTP client 缺少超时保护会放大自动化挂起风险
  • 主要修改: Factory 统一改为使用带超时的默认 HTTP client,并补回归验证
  • 影响范围: 命令行为、测试与文档/回归脚本
  • 单元测试: go test ./...
  • 构建: go build -o ./gc ./cmd/gc
  • 实际命令验证: go test ./... && ./scripts/regression-core.sh;并执行 ./scripts/regression-core.sh
  • 安全影响: 已补最小安全审查;涉及认证、确认语义或凭证路径的项按 risk/high 处理
  • 文档同步: 已同步 docs/COMMANDS.md / docs/REGRESSION.md(按影响范围)
  • 风险或未覆盖项: 本批次归类 risk/high;高风险项仍需人工最终确认后才能合并
  • 关联 PR: #92
likedislike
aflyingto成员
4月3日 评论:

开发进度

  • 当前状态: ready-for-review
  • 根因: 默认 Factory 构造裸 http.Client,未复用带超时保护的默认客户端。
  • 主要修改: Factory 默认改为使用 api.DefaultHTTPClient(),补对应测试。
  • 影响范围: cmdutil factory、命令层默认 HTTP client。
  • 单元测试: go test ./...
  • 构建: go build -o ./gc ./cmd/gc
  • 实际命令验证: ./scripts/regression-core.sh
  • 安全影响: 本次改动聚焦稳定性与超时边界,不涉及凭证写入。
  • 文档同步: 无需额外用户文档更新。
  • 风险或未覆盖项: high-risk 批次中的系统级改动,合并前仍需人工最终确认。
  • 关联 PR: !92
likedislike
aflyingto成员
4月3日 评论:

开发进度

  • 当前状态: ready-for-review
  • 根因: 默认 factory 使用无超时的裸 http.Client。
  • 主要修改: cmdutil.NewFactory() 和 TestFactory() 已统一改用 api.DefaultHTTPClient()。
  • 影响范围: pkg/cmdutil/factory.go
  • 单元测试: go test ./...
  • 构建: go build -o ./gc ./cmd/gc
  • 实际命令验证: ./scripts/regression-core.sh
  • 安全影响: 无凭证风险;提升非交互稳定性。
  • 文档同步: 无额外用户文档需求。
  • 风险或未覆盖项: 仍需独立评审确认所有命令入口均通过共享 factory 获取默认 client。
  • 关联 PR: #92
likedislike
Aaflyingto成员
4月3日 关闭了 issue