Files
Agent-System/.doc/test-reports/2026-09-18-wave0-p0-bug-fixes-test-report.md
T

5.6 KiB
Raw Blame History

Wave 0 P0 Bug 修复测试报告

一、 测试背景 (Background)

系统体检(2026-09-17)确认 SSE 聊天/任务流被全局 WriteTimeout=120s 强杀、run/stream 畸形 body 误启任务与 Flush 后失败、前端会话窗口缓存 key 不一致、IndexedDB 恢复覆盖新增交付物。本波次按整改方案 Wave 0 实施 B-1~B-6。

二、 测试目标 (Test Objectives)

  • B-1/B-2:handleChatStream / handleRunTaskStream 心跳 + extendSSEWriteDeadline,长静默不因 WriteTimeout 断流
  • B-3:畸形 JSON → HTTP 400,不开 SSE
  • B-4:CreateAndStart/Subscribe 在 Flush 前;失败为普通 JSON 错误
  • B-5:saveSessionWindowCache 一律带 userId;LRU 驱逐完整 cache key
  • B-6:applyRestoredFileRaw 函数式合并,不丢 mount 后新增 deliverable
  • 质量门禁:go vet / go test -short / npm test / npm run build 全绿;dev rebuild + health/ready

三、 测试方案与环境 (Test Plan & Environment)

  • OS:Linux;Go 模块全量 -short;前端 tsx --test + vitest
  • 后端 Stub 单测 + 真实 dev 容器(pi-agent + MiniMax-M2.7-highspeed)
  • 分支:fix/wave0-p0-sse-chat-cache-bugs → 合入本地 dev@810fb96(后随 docs 再合)
  • 资产:.doc/test-reports/assets/2026-09-18-wave0-p0-bug-fixes/

四、 预期结果 (Expected Results)

用例 预期
畸形 run/stream body 400,非 text/event-stream
CreateAndStart 注入失败 非 SSE Content-Type,正文含 start failure
短 WriteTimeout + 心跳 流时长 > WriteTimeout 仍可读到 done
缓存写路径 全部调用含 userId;超 LRU 驱逐带前缀 key
restore 合并 prev 新增条目保留,仅补丁 fileRaw
真实 PI 聊天 静默生成期出现 : heartbeat,最终 event: done

五、 实际测试结果与判定 (Actual Results & Evaluation)

5.1 后端单测(internal/server/sse_wave0_test.go)

测试输入:go test -short -count=1 ./internal/server/ -run 'TestRunTaskStream_InvalidJSON|TestRunTaskStream_CreateAndStartFails|TestSSEHeartbeat_Helpers|TestRunTaskStream_ValidBody' -v

实际输出(摘要):

--- PASS: TestRunTaskStream_InvalidJSON_Returns400 (0.14s)
--- PASS: TestRunTaskStream_CreateAndStartFails_BeforeSSEFlush (0.12s)
--- PASS: TestSSEHeartbeat_HelpersSurviveShortWriteTimeout (0.70s)
--- PASS: TestRunTaskStream_ValidBody_OpensSSEWithHeartbeatPath (0.17s)
PASS

评价判定:PASS
性能与耗时:约 1.1s 包级

5.2 前端单测

测试输入:

npx tsx --test src/hooks/useChatWindow.cacheKey.test.ts \
  src/data/storage.windowCache.test.ts src/data/fileStore.test.ts

实际输出:

✔ applyRestoredFileRaw: 以 prev 为权威… 
✔ applyRestoredFileRaw: 无可用 fileRaw 时返回同一引用
✔ window cache LRU: 驱逐带 userId 前缀的完整 cache key…
✔ window cache: 读写同一 userId 前缀,跨用户不串读
✔ useChatWindow: 所有 saveSessionWindowCache 调用必须传入 userId
ℹ tests 5 / pass 5

评价判定:PASS

5.3 全量回归

命令 结果
go vet ./... PASS
go test -short -count=1 ./... 全包 ok(含 server)
cd web && npm test 397 + 32 vitest PASS
cd web && npm run build PASS(含 precompress)

5.4 dev 容器冒烟

测试输入:./scripts/env-service.sh dev rebuild;curl -sf http://127.0.0.1:8080/health 与 /ready

实际输出:

{"status":"ok","env":"dev","agent_backend":"pi-agent","schema_version":52,"schema_ready":true,...}

评价判定:PASS

5.5 真实 PI 聊天 SSE(心跳接线证据)

测试输入:admin 登录后 POST /api/v1/chat/stream,长合规分析提示词;资产见 assets/2026-09-18-wave0-p0-bug-fixes/chat-stream-long.sse.txt

实际输出(关键片段):

event: phase
...
: heartbeat 1789663534
: heartbeat 1789663549
: heartbeat 1789663564
: heartbeat 1789663579
event: delta
...
event: done
data: {...,"done":{"duration_ms":70164,"status":"completed",...}}

评价判定:PASS(真 PI 回合约 70s;静默生成期 4 次心跳,流完整收尾)。
说明:绝对墙钟 >120s 的真 PI 未再压测(二次加长提示触发 SECURITY_FORBIDDEN 快速返回);WriteTimeout 跨越由 TestSSEHeartbeat_HelpersSurviveShortWriteTimeout(WriteTimeout=200ms,流 700ms)覆盖,与线上心跳机制同源。

六、 自动化测试套件汇总 (Test Suite Execution)

  • Go:go vet ./... + go test -short -count=1 ./... → 全绿
  • Web:npm test(397 node:test + 32 vitest)+ npm run build → 全绿
  • 新增:sse_wave0_test.go、useChatWindow.cacheKey.test.ts、storage.windowCache.test.ts、fileStore.test.ts

七、 测试结论与后续优化建议 (Conclusion & Next Steps)

  • Wave 0(B-1~B-6)达到合入与冒烟标准,可关闭 short-term 任务。
  • 后续:Wave 1(E-1 main ENV)仍待决策;可选补一次刻意 >120s 的受控长任务(例如阻塞 executor 的 task run events)作为额外证据。
  • 红线未触碰:FAV / MULTI_INTENT_PLAN_TIER / SEMANTIC_SUMMARY_REPLACE / 项目 143。

相关链接