fix(backend): harden Go runtime paths #93

Merged
ph merged 1 commit from backend-go-hardening into master 2026-06-17 03:28:13 +00:00
Owner

变更说明

这次 MR 根据后端 Go 代码审阅结果,集中修复可验证的运行时和代码规范问题:

  • 修复 websocket 并发写入风险,统一通过单 writer goroutine 写响应和事件。
  • 修复 daemon event bus 的 ring buffer / replay / Done 后订阅行为。
  • 修复后台任务启动失败、非零退出、输出截断和全局 manager 并发访问问题。
  • 修复 trace 全局 store 的 data race 风险,并对坏时间戳、坏 event data 返回明确错误。
  • 加强 JSON marshal/unmarshal、HTTP 错误响应读取、路径解析、mention 解析、AskUserQuestion sink 错误等错误处理。
  • 改善 request context 传播:文件树查询、bash rtk fallback、daemon shutdown 都会尊重上游取消或超时。
  • 修复 ID 生成在随机源失败时的 fallback,避免产生全零或重复 ID。
  • 去掉部分不必要的 init 单例初始化,改为直接包级初始化。
  • 将 Skill.MarshalXML() 重命名为 Skill.ToXML(),避免 go vet 识别为错误的 encoding/xml.Marshaler 形状。
  • 稳定工具 registry List/Names 输出顺序。
  • 拆分 Agent runLoop 的辅助逻辑,降低后续测试和维护成本。

单元测试补充

新增和补充覆盖包括:

  • websocket body decode 和 writer helper。
  • daemon EventBus replay / capacity / Done 行为。
  • background runner 状态、ID fallback、global manager 并发访问。
  • trace invalid data、invalid timestamp、global store 并发访问。
  • filesystem TreeFiles context cancellation。
  • session ID fallback、round invalid tool arguments。
  • tools registry ordering、web error body read failure、AskUserQuestion sink error。
  • agent runLoop helper 和 ID fallback。

验证

已在本地通过:

env GOCACHE=/tmp/geek-gocache go test ./...
env GOCACHE=/tmp/geek-gocache go vet ./...
env GOCACHE=/tmp/geek-gocache go test -race ./...

说明

当前工作区里仍有既有前端改动(web/*、docs/frontend-architecture.md 等),本 MR 没有包含这些文件,只提交后端修复、cmd/geek shutdown 处理和 docs/backend-overview.md 的相关更新。

## 变更说明 这次 MR 根据后端 Go 代码审阅结果,集中修复可验证的运行时和代码规范问题: - 修复 websocket 并发写入风险,统一通过单 writer goroutine 写响应和事件。 - 修复 daemon event bus 的 ring buffer / replay / Done 后订阅行为。 - 修复后台任务启动失败、非零退出、输出截断和全局 manager 并发访问问题。 - 修复 trace 全局 store 的 data race 风险,并对坏时间戳、坏 event data 返回明确错误。 - 加强 JSON marshal/unmarshal、HTTP 错误响应读取、路径解析、mention 解析、AskUserQuestion sink 错误等错误处理。 - 改善 request context 传播:文件树查询、bash rtk fallback、daemon shutdown 都会尊重上游取消或超时。 - 修复 ID 生成在随机源失败时的 fallback,避免产生全零或重复 ID。 - 去掉部分不必要的 init 单例初始化,改为直接包级初始化。 - 将 Skill.MarshalXML() 重命名为 Skill.ToXML(),避免 go vet 识别为错误的 encoding/xml.Marshaler 形状。 - 稳定工具 registry List/Names 输出顺序。 - 拆分 Agent runLoop 的辅助逻辑,降低后续测试和维护成本。 ## 单元测试补充 新增和补充覆盖包括: - websocket body decode 和 writer helper。 - daemon EventBus replay / capacity / Done 行为。 - background runner 状态、ID fallback、global manager 并发访问。 - trace invalid data、invalid timestamp、global store 并发访问。 - filesystem TreeFiles context cancellation。 - session ID fallback、round invalid tool arguments。 - tools registry ordering、web error body read failure、AskUserQuestion sink error。 - agent runLoop helper 和 ID fallback。 ## 验证 已在本地通过: ```bash env GOCACHE=/tmp/geek-gocache go test ./... env GOCACHE=/tmp/geek-gocache go vet ./... env GOCACHE=/tmp/geek-gocache go test -race ./... ``` ## 说明 当前工作区里仍有既有前端改动(web/*、docs/frontend-architecture.md 等),本 MR 没有包含这些文件,只提交后端修复、cmd/geek shutdown 处理和 docs/backend-overview.md 的相关更新。
Fix backend concurrency, context propagation, error handling, and deterministic output issues found during the Go code review.

Add focused tests for websocket writing, event bus replay, ID fallback, trace/global manager races, filesystem context cancellation, registry ordering, and invalid JSON handling.
ph merged commit 0ca1f9dc9d into master 2026-06-17 03:28:13 +00:00
ph deleted branch backend-go-hardening 2026-06-17 03:28:13 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ph/agentic!93
No description provided.