测试反馈:需求释放审计问题汇总#40
原有 internal/acp/server_test.go 主要直接调用 server.dispatch() 或内部方法,缺少通过真实 HTTP handler 的接口测试,无法覆盖 /healthz、/rpc、/events、/gateway/health、/gateway/rpc 的 method、错误 envelope、鉴权、版本头和 SSE 缺失 session 行为。
本地 dev 工作区已补,尚未提交/推送/发布。
internal/acp/server.go:抽出 Server.Handler(),供 httptest 覆盖真实路由。internal/acp/server_test.go:新增 HTTP 层接口测试。docs/acp-http-contract.md:新增完整接口契约文档。README.md:补 ACP HTTP Contract 摘要和 smoke 命令。go test ./... 通过go build ./cmd/auto-harness 通过/healthz、/rpc session/listModels、/rpc worker.health、/gateway/health、/gateway/rpc worker.health、/events?sid=<missing> 通过gateway start 成功后,后续新 CLI 进程执行 gateway status --execution <id>、gateway logs --execution <id>、gateway result --execution <id>、gateway executions --execution <id> 查询失败或返回空。
根因是 Gateway 的 executionTargets / instanceTargets 只存在内存中。CLI 每次调用都会新建 Gateway Service,虽然 worker file store 中有 instance/result/event,但 Gateway 没有从持久化 store 恢复索引。
--worker-store 持久化后仍无法通过 executionId 列出历史执行,违背用户对持久化查询的预期。STORE=/tmp/auto-harness-worker-store.json
EXEC=gw-cli-audit-$(date +%s)
./auto-harness gateway start -f examples/codex-worker.yaml --worker codex-code-worker --execution "$EXEC" --task "$EXEC" --task-type code --cwd "$PWD" --worker-store "$STORE"
./auto-harness gateway status -f examples/codex-worker.yaml --execution "$EXEC" --worker-store "$STORE"
./auto-harness gateway executions -f examples/codex-worker.yaml --execution "$EXEC" --worker-store "$STORE"
本地 dev 工作区已补,尚未提交/推送/发布。
internal/gateway/service.go:当内存索引缺失时,通过 backend status 探测恢复 target;ListExecutions 合并可枚举 backend 中的持久化 instances。internal/gateway/local.go:为 local backend 增加 Instances() 枚举能力。internal/gateway/service_test.go:新增 Gateway Service 重建后通过同一 worker file store 查询 status/result/events/executions 的测试。修复后跨进程 CLI 链路结果:
gateway start => succeededgateway status => succeededgateway logs => 6 条事件gateway result => succeededgateway executions => 1 条记录全量验证:go test ./...、go build ./cmd/auto-harness 均通过。
ci: enable CNB AI review for pull requests#12 原始验收标准写的是:
.cnb.yml 的 pull_request 流水线包含 cnbcool/code-review:latest 评审阶段。comment=true、max_comments=10、fail_on_critical=false。当前仓库实际配置为:
image: cnbcool/ai-review:latestsettings.type: code-reviewsettings.model: glm-5settings.pr_comment: truesettings.max_comments: 10后续 specs/issue-12-ai-review.md 使用的是 cnbcool/ai-review:latest / pr_comment: true,说明需求口径发生过调整,但关闭 Issue 的原始验收项没有同步说明差异,也没有测试或验证记录证明当前配置等价覆盖 fail_on_critical=false 这一验收意图。
cnbcool/ai-review:latest + pr_comment: true 为准,还是恢复原验收字段。.cnb.yml 结构检查脚本或测试,至少验证 PR pipeline 包含 AI Review 阶段、模型、评论开关和非发布约束。未完全覆盖测试;需要补需求确认或配置测试。
#20 原始范围包含:
codex runner 类型。codex --version。codex exec。plan / progress / final / error。ConversationSink 将事件转为 AgentForge ACP SSE 对话更新。当前实现的主线是“配置驱动 command runner”:internal/runner/runner.go 按 runner 的 command.argv 执行命令并注入 AUTO_HARNESS_PROMPT。示例里的 codex runner 命令是 printf,不是内置 codex exec 适配器。NPC 路径中存在 codex exec 调用,但那是 auto-harness npc 专用路径,不等同于 Worker runner 的 Codex 集成。
已有测试覆盖了:runner 选择、探针、凭证注入、脱敏、worker/gateway 生命周期。但没有覆盖:
codex 时必须执行 codex --version / codex exec。plan/progress/final/error。关闭 Issue #20 时,从需求角度看容易误以为“Codex CLI runner 已完整集成”,但当前更准确的状态是“支持配置一个 codex 类型的 command runner,并在 NPC 路径使用 Codex CLI”。
codex CLI、事件 JSON 解析、SSE sink、checkpoint 文件。未完整覆盖原始需求;当前测试覆盖的是 MVP command runner,不覆盖 #20 原始深度集成范围。
让 Codex NPC 开箱可用并预装 CNB/Superpowers skills#24 验收要求包括:
.codex/config.toml 存在。codex exec --help 可用。cnb issues get/list-comments 和 cnb pulls list-files 可用。当前仓库有 Dockerfile、.cnb/settings.yml、internal/npc/* 和 README 使用说明;但没有 internal/npc 单元测试,也没有 CI 中的容器运行级测试去验证 codex exec --help、skills 安装和 cnb CLI 子命令可用性。.cnb.yml 的 PR/main/dev 流水线会 build 镜像,但没有运行容器内验收命令。
LoadEnv 必填项、BuildPrompt Issue/PR 上下文、fallback comment 命令构造、Git credential 配置脱敏边界。auto-harness hello、codex --version 或 codex exec --help、cnb --help、检查 /root/.codex/skills/cnb-api/SKILL.md 和 /root/.codex/skills/using-superpowers/SKILL.md。功能路径存在,但 #24 的容器内验收和 NPC 行为没有被自动化测试完整覆盖。
建立外部系统统一对接 API 文档与接口规范#28 要求输出标准 API 文档,建议路径为 docs/integration-api.md,覆盖:
当前本地工作区新增的是 docs/acp-http-contract.md,覆盖 /healthz、/rpc、/events、/gateway/* 的 HTTP/JSON-RPC contract,但还不是 #28 要求的完整外部系统集成 API 文档。
外部系统仍无法只靠当前文档完成完整对接,特别是任务创建模型、commit/PR/评论回传、callback、幂等和端到端流程说明还不足。
docs/integration-api.md,以 #28 的字段和流程为验收清单。docs/acp-http-contract.md 作为底层 HTTP contract 引用。部分覆盖:底层 ACP/Gateway HTTP contract 已补;#28 的完整 integration API 文档与验收示例尚未完成。
需求:新增 Coordinator 模块并以 Worker 方式管理执行配置#30 是一个大范围需求,包含 Coordinator、Worker、标准 Worker API、执行记录、多轮执行、等待输入、代码审查、工作流程快照、平台适配、并发幂等、结果回写等大量条目。
当前代码已经实现并测试了主干能力:
但 #30 中仍有不少条目未完整实现或未完整测试:
如果把 #30 当作“全部完成”的需求,会高估当前释放范围。当前状态更准确应表述为:Coordinator/Worker/Gateway 主干闭环已实现并有测试,但 #30 的完整企业级需求仍未全部释放。
部分实现、部分测试覆盖;不是全部覆盖。
支持动态拉起 Codex、CodeBuddy、DoAgent 运行环境#16 后续需求口径已经从原始“三类 runner 全量交付”收敛为首期 codex + doagent,CodeBuddy 保留可插拔扩展位。因此按首期 MVP 看,已有较多覆盖;但按 Issue 原始目标和评论中的完整需求看,还不能判定为测试全覆盖。
runners、defaultRunner、legacy runner 兼容、runner 按 id/type/taskType/default 选择。cnb_api_token metadata、credentialRefs 注入、必填校验、host env 隔离、stdout/resultFiles 脱敏。RunProbe / command runner 可收集 stdout、stderr、exit code、resultFiles。examples/codex-worker.yaml 可执行 validate、probe --runner codex、probe --runner remote。CodeBuddy 没有示例配置和 CLI smoke,仅保留可插拔槽位与少量单测场景,属于延期范围。codex / doagent command 仍是 printf smoke,不是实际 codex exec 或 doagent 真实任务执行链路。serve 模式下 session/new、chat/sendMessage 通过 runner/taskType/model 路由的 HTTP 自动化测试不足。render 产物是否完整包含 runner 相关 compose/workspace 配置,缺少自动化断言。persistence、resourcePolicy、schedule runnerRef / mode 当前主要是配置合同,行为级测试不足。session/new / chat/sendMessage runner、taskType、model 路由测试。codex / fake doagent 可执行文件的端到端命令测试,验证 prompt 投递、日志、结果文件、脱敏。部分实现、部分测试覆盖;按首期 MVP 基本可用,但不能视为 #16 原始需求全量测全。
已补充并推送 #16 Dynamic Runners 相关自动化测试。
0629bb150041b984c2a56d6757931b000a514a81 test: cover dynamic runner api routingdevsession/new + chat/sendMessage 通过 taskType=remote 路由到 doagent runner。chat/sendMessage 指定未知 runner 时返回错误。AUTO_HARNESS_RUNNER_ID / AUTO_HARNESS_RUNNER_TYPE。runnerRef / mode 配置校验。AUTO_HARNESS_DEFAULT_RUNNER 和 AgentForge manifest。go test ./... 通过。origin/dev,远端分支包含该 commit。真实 codex exec 和真实 doagent runtime/provision 仍需要线上环境或 fake CLI 更高保真集成测试,不能放入普通单元测试中硬编码凭证。
本轮按“真实生产可跑任务”目标继续补测并修复,已推送到 dev。
ad31927b03e5f794f944736d0e559e94931e1fea fix: persist and query worker executionsChat session 事件只能实时 SSE,不能回看
session/update 事件,新增 session/get 读取已有 session 和历史事件。直接 Worker API 缺少执行记录列表
worker.executions,返回 execution view,并在已有 result 时一并返回结果。Gateway 跨进程查询 execution 依赖内存索引
gateway start 后新 CLI 进程查询 status/logs/result/executions 可能失败或为空。ListExecutions 合并 backend 中的持久化记录。生产 serve 缺少 Worker store 参数
auto-harness serve 新增 --worker-store,可持久化执行记录。外部系统 API 文档不足
docs/integration-api.md,补充 session、worker、gateway、持久化、runner 配置和 curl 示例;更新 ACP contract 和 README。session/new + chat/sendMessage 复用已有 session,并通过 session/get 回看两个 turn 的历史事件。worker.start/status/result/executions 直接 Worker API 闭环。gateway/rpc worker.executions 映射到 gateway.executions。ListExecutions 返回 result。go test ./... 通过。go build ./cmd/auto-harness 通过。start/status/result/executions 均返回同一 execution 且 status=succeeded。start/status/result/executions 均返回同一 execution 且 status=succeeded。origin/dev,远端分支包含该 commit。当前已经能通过 API/CLI 完成 session、任务派发、执行记录、执行结果查询闭环。但真实 Codex/DoAgent 的生产任务质量仍取决于 runner command.argv 是否配置为真实 codex exec / DoAgent 调用,以及线上环境是否注入对应凭证和安装 CLI。下一轮应专门做真实 runner 配置和线上端到端任务验收。
@aiedulab/auto-harness(codex) 请你开启目标导向执行任务模式,开始拉bug-fix分支来改bug,最后合并进来。所有bug修复必须有事实的可验证的修复证据并回复到issues
codex
@aiedulab/auto-harness(codex)
帷幄庸者,已按目标导向执行模式处理本轮 bug-fix 并合并回 dev。
ae67abcfd464006d在合并后的 dev 分支执行:
GOROOT=/usr/lib/go-1.24 go test ./internal/npc
=> ok agentforge.local/auto-harness/internal/npc 0.004s
GOROOT=/usr/lib/go-1.24 go test ./...
=> 全部包通过,无失败包
GOROOT=/usr/lib/go-1.24 go build ./cmd/auto-harness
=> exit 0
额外静态验证:仓库内容中未再检出原硬编码 token 字符串;CNB_GIT_TOKEN 只保留为运行时变量引用。
当前容器没有 docker 命令,因此新增的容器级 NPC smoke 没有在本地容器内直接执行;它已经进入 PR 流水线,会在具备 docker 服务的 CNB PR 环境中执行。
DeepSeek-TUI-pro
@wwyz(帷幄庸者) 审计完毕,逐条报告如下。
各 bug 来源均为本 Issue 下的评论。以下逐条交叉验证当前仓库提交记录与实际代码。
ad31927(fix: persist and query worker executions)在 internal/acp/server.go 新增了 Server.Handler() 方法(暴露真实 HTTP handler 供 httptest 使用),在 internal/acp/server_test.go 新增 HTTP 层接口测试,并新增 docs/acp-http-contract.md 接口契约文档。ad31927 包含相关文件变更。ad31927 修改了 internal/gateway/service.go(ListExecutions 合并 backend 持久化记录 + 内存缺失时通过 backend status 恢复 target)、internal/gateway/local.go(local backend 新增 Instances 枚举能力)、internal/gateway/service_test.go(新增重建后跨命令查询测试)。.cnb.yml 中 cnbcool/ai-review:latest 使用 pr_comment: true,但原始验收标准要求的 fail_on_critical=false 没有被等价验证或记录口径变更理由。.cnb.yml 结构检查脚本。0629bb1(test: cover dynamic runner api routing)覆盖了 runner API 路由的单元测试。codex exec 和真实 DoAgent runtime/provision 的端到端验证仍需线上环境或更高保真集成测试。评论中也明确写了「不能放入普通单元测试中硬编码凭证」。commit ad31927 一次性修复了 5 个子项:
session/get 方法。worker.executions。serve 缺少 --worker-store 参数:已补充。docs/integration-api.md。全部 5 个子项有对应代码变更和 go test ./... 通过记录。
ae67abc(fix: harden codex npc pipeline smoke)将 .cnb.yml 中 CNB_GIT_TOKEN: 0133cEmE2xSBynMZaMuz1lgcv9D 改为 CNB_GIT_TOKEN: ${CNB_GIT_TOKEN},不再硬编码敏感凭证;同时 /.codex/ 加入 .gitignore,新增 internal/npc/cnb_pipeline_test.go 和 internal/npc/env_prompt_test.go 防护测试。git show ae67abc:.cnb.yml 确认 token 已替换为变量引用;.gitignore 确认 /.codex/ 已列入。| Bug | 描述 | 状态 | 说明 |
|---|---|---|---|
| Bug 1 | ACP HTTP 测试覆盖 | ✅ 已修复 | commit ad31927 |
| Bug 2 | Gateway 跨进程查询 | ✅ 已修复 | commit ad31927 |
| Bug 3 | AI Review 验收口径 | ❌ 未修复 | 无测试/确认记录 |
| Bug 4 | Codex runner 深度集成 | ⚠️ 部分 | 需线上验证 |
| Bug 5 | 生产任务闭环 | ✅ 已修复 | commit ad31927 |
| Bug 6 | NPC 硬编码 token | ✅ 已修复 | commit ae67abc |
总体:还有 1 条完全未修(Bug 3)和 1 条部分完成(Bug 4),不建议关闭本 Issue。
codex
DeepSeek-TUI-pro
DeepSeek-TUI-pro
@wwyz(帷幄庸者) 剩余问题全部修复完成,报告如下。
本轮修复覆盖上轮审计中标记为「未修复」和「部分完成」的全部 3 个项目:
问题回顾:原始 #12 验收标准要求 ,当前 实际使用 + ,口径不一致且无测试保护。
修复内容:
问题回顾:缺少 codex/doagent 多 runner 探针与路由的自动化测试,DoAgent runtime/provision 端到端验证依赖线上环境。
修复内容 — 新增 4 个测试:
问题回顾: 中 NPC 流水线硬编码 (上一轮审计前已修复但未传播到当前 HEAD)。
修复内容:
| 文件 | 变更 |
|---|---|
| CNB_GIT_TOKEN 脱敏 | |
| 新增 | |
| 补充口径决策 + 自动化验证说明 | |
| 新增 | |
| 新增 4 个 runner 集成测试 |
codex
@aiedulab/auto-harness(codex)
Codex NPC 执行失败。
stdout:
{"type":"thread.started","thread_id":"019e3374-fdb9-7f01-9961-44641566e077"}
{"type":"turn.started"}
{"type":"error","message":"Reconnecting... 1/5 (unexpected status 401 Unauthorized: {\"code\":\"INVALID_API_KEY\",\"message\":\"Invalid API key\"}, url: https://token.aiedulab.cn/responses, request id: bccc2f0a-3cac-49e1-8e30-fb33d866063c)"}
{"type":"error","message":"Reconnecting... 2/5 (unexpected status 401 Unauthorized: {\"code\":\"INVALID_API_KEY\",\"message\":\"Invalid API key\"}, url: https://token.aiedulab.cn/responses, request id: a1d70128-506d-4feb-9abb-d22f60c38317)"}
{"type":"error","message":"Reconnecting... 3/5 (unexpected status 401 Unauthorized: {\"code\":\"INVALID_API_KEY\",\"message\":\"Invalid API key\"}, url: https://token.aiedulab.cn/responses, request id: 255ca8eb-fabf-43eb-bd74-052ac88e82ae)"}
{"type":"error","message":"Reconnecting... 4/5 (unexpected status 401 Unauthorized: {\"code\":\"INVALID_API_KEY\",\"message\":\"Invalid API key\"}, url: https://token.aiedulab.cn/responses, request id: c2cfac9a-942f-4755-b553-c6517620ff06)"}
{"type":"error","message":"Reconnecting... 5/5 (unexpected status 401 Unauthorized: {\"code\":\"INVALID_API_KEY\",\"message\":\"Invalid API key\"}, url: https://token.aiedulab.cn/responses, request id: 7d208174-ce09-4351-b637-86ae72921e96)"}
{"type":"error","message":"unexpected status 401 Unauthorized: {\"code\":\"INVALID_API_KEY\",\"message\":\"Invalid API key\"}, url: https://token.aiedulab.cn/responses, request id: b520c199-5b2c-4c57-bb84-251817575fe9"}
{"type":"turn.failed","error":{"message":"unexpected status 401 Unauthorized: {\"code\":\"INVALID_API_KEY\",\"message\":\"Invalid API key\"}, url: https://token.aiedulab.cn/responses, request id: b520c199-5b2c-4c57-bb84-251817575fe9"}}
测试反馈:需求释放审计问题汇总
本 Issue 用作 auto-harness 需求释放审计期间发现问题的集中反馈入口。
记录规则
本轮审计背景
审计范围:接口文档、接口测试、CLI 用户路径、Gateway/Worker/Coordinator/K8s/CNB 流水线需求释放状态、线上 smoke。
当前已知:本地 dev 工作区已补部分缺口,但尚未提交、推送和发布到线上 latest。