Files
Agent-System/.doc/test-reports/2026-09-28-pi-runner-env-mismatch-test-report.md
T
weichen 3eac19cf44 docs(test): 将验收日志摘录改为可跟踪的 txt
*.log 被 gitignore,sidecar 与 data_dir 核对摘录需随报告入库。
2026-09-28 03:45:30 +00:00

6.7 KiB
Raw Blame History

PI runner 环境错配(MISSING_TARGET)测试报告

一、 测试背景 (Background)

test 环境用户发送「1」确认推进后,对话返回 INTERNAL_ERROR / fatal,upstream 为 step step_03_regulatory failed: MISSING_TARGET(requestId req_1790558986255320703,session sess-p5-u32)。

已证实根因:test 服务器进程的 PI_AGENT_RUNNER_URL 来自根 .env 的 dev sidecar http://127.0.0.1:18865,压过 configs/.env.test 的端口约定 18866。dev sidecar 的 resolveWorkspace 把 data/test/workspaces/... 重写到 data/dev/workspaces/... 影子目录。影子目录没有 context/、template.md、blackboard.json,模型无法写出 output.md,runner 报 MISSING_TARGET,步骤按 permanent-missing 不再重试。

二、 测试目标 (Test Objectives)

  • test 进程连到本环境 sidecar 18866,不再使用根 .env 泄漏的 18865。
  • 发往 runner 之前,工作区必须位于该 runner data_dir 之下;不一致时 fail-fast,错误码 RUNNER_MISMATCH。
  • 与故障同构的确认「1」推进 V0.5 时,bd_research(含原先失败的 step_03_regulatory)在 data/test/workspaces 本地执行并成功,且不在 data/dev/workspaces 生成影子目录。

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

  • OS:Linux;test 后端 bin/agent-server-test pid 1222963,ENV=test,DATA_DIR=/home/weichen/projects/Agent-System/data/test。
  • 启动:worktree 内 env -u PI_AGENT_RUNNER_URL ./scripts/launch-single.sh test。sidecar 18866 已健康,脚本未重启 sidecar。
  • 层级:go test 覆盖 agent/stream/errcode;产品验收为 test 环境真实 PI runner(MiniMax-M2.7-highspeed),对话 sess-p5-u32 发送「1」,命中 ADVANCE_STAGE / EXPECTATION_HIT,目标阶段 V0.5_feasibility。
  • 验收会话为一次性 auth_sessions 行(user 32),验收后已 revoked_at。令牌未写入本报告。

四、 预期结果 (Expected Results)

  • 进程环境 PI_AGENT_RUNNER_URL=http://127.0.0.1:18866;18866 的 data_dir 为 data/test/workspaces。
  • 首次 /v1/run 前日志出现 pi runner data_dir check passed。
  • bd_research 七步 completed,step_03_regulatory/output.md 非空,且路径在 test 工作区。
  • 不出现 MISSING_TARGET / RUNNER_MISMATCH。
  • 单测:data_dir 不一致时不调用 /v1/run;一致时透传;分类码为 RUNNER_MISMATCH 且不泄漏路径。

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

用例 1:进程指向与健康检查

  • 输入:重启后读 /proc/1222963/environ,GET /health,GET 两个 sidecar /health。
  • 输出:PI_AGENT_RUNNER_URL=http://127.0.0.1:18866;DATA_DIR=.../data/test;应用 health schema_version=78、agent_backend=pi-agent;18866 data_dir=.../data/test/workspaces;18865 仍为 .../data/dev/workspaces。见 assets/2026-09-28-pi-runner-env-mismatch/unit-and-runtime.txt。
  • 判定:PASS。
  • 说明:新二进制首次启动把 test 库 schema 从 77 升到 78(00078 只新增 error_events,加法迁移)。这是基线已有迁移随本次二进制生效,不是 runner 修复本身。

用例 2:真实对话推进(与故障同构)

  • 输入:POST /api/v1/chat/stream,session_id=sess-p5-u32,project_id=5,message=1,client_turn_id=e2e-pi-runner-20260928。
  • 输出:
    • HTTP 200,X-Request-Id: req_1790565623110640277。
    • 意图 ADVANCE_STAGE,分支 EXPECTATION_HIT,目标 V0.5_feasibility。
    • 服务器日志三次 pi runner data_dir check passed(并行前三步)。
    • sidecar 工作区全部位于 data/test/workspaces/bizdev/stage_V0.5_feasibility_1790565623120057798/...。
    • bd_research 七步均为 completed;tasks/03_regulatory/output.md 19851 字节;工作区含 context/knowledge/hits.md。
    • 同名目录在 data/dev/workspaces 不存在。
    • SSE done.status=completed,duration_ms=1046800。对话流中无 MISSING_TARGET、INTERNAL_ERROR、RUNNER_MISMATCH。
    • chat_turns.id=32 状态 completed。
  • 判定:PASS(本次缺陷:错配导致的 MISSING_TARGET 未再现,原先失败步骤在 test 工作区成功)。
  • 耗时:整段 SSE 1046.8s(03:20:23Z–03:37:49Z)。step_03_regulatory 阶段事件耗时 151081ms。

摘录:assets/2026-09-28-pi-runner-env-mismatch/sse-phases.txt、server-data-dir-check.txt、sidecar-workspace-lines.txt。

用例 3:阶段链在质量门禁处停止(非本次缺陷)

  • 实际:bd_research 质量门禁 100/100 后,bd_feasibility_dev 两步执行完成,门禁 85/100,原因「缺少必填章节: 输入摘要」。classifyStageTaskHalt 按既有规则停止阶段链,后续 bd_feasibility_reg、bd_user_requirements、bd_prelim_design 未启动。
  • 对话文案仍写「已为您成功推进并完成了【V0.5…】」。协调器在 ExecuteStage 返回 err=nil 时不读取 Success=false(internal/coordinator/engine_stage.go)。数据库 projects.id=5 的 current_stage 仍为 V0.1_triage。
  • 判定:不计入本次修复 FAIL。这是质量门禁停链与成功文案不一致,超出本任务范围(不改 resolveWorkspace、不改 phase 归类、不改质量门禁)。

数据质量警示

2026-09-28 01:40 与 01:56(UTC)两次在错配 runner 下生成的 V0.5 产物未读 test 侧 context/。本任务不清洗、不自动重跑,由业务 owner 决定是否作废重做。

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

在 worktree fix/pi-runner-env-mismatch-2026-09-28 执行:

  • go test ./internal/agent/ ./internal/stream/ ./internal/errcode/ -count=1:三包 ok。
  • go test -run TestPiAgentRemoteRunner_DataRoot 与 TestClassifyError_RunnerDataRootMismatch:PASS。完整输出见 assets/2026-09-28-pi-runner-env-mismatch/unit-and-runtime.txt。

未跑全仓 go test。产品链路以第五节真实 PI 为准,不用 stub。

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

本次授权范围内的缺陷已关闭:test 进程连接 18866,工作区与 runner data_dir 一致,bd_research 全步骤(含原 MISSING_TARGET 的法规初筛)在 test 工作区成功。

残留(不在本任务实施):

  • 质量门禁未通过时阶段链停止,但协调器文案仍宣称阶段完成;项目阶段列未更新。
  • 错配期间已生成的文档需要业务 owner 决定是否重跑。

五态(收口时填写):review_state=accepted;integration_state 以合入结果为准;deployment=test 环境已用本 worktree 二进制重启(schema 78);cleanup=pending;remote_sync=not_requested。