- Unify ToolResultEnvelope (output vs content) for built-in tools - Fix shell.run AsyncGenerator consumption in ToolRegistry.call/streaming - Scheduler: consume WorkerResult.status instead of marking all running tasks completed - WorkerProcess/WorkerManager: surface exit events and generate failed/cancelled result - MainAgent: integrate ContextAssembler, Chinese destructive regex, ArchitectureDesigner impact gate - run.ts: pendingConfirmation flow, dispatch extracted, .air files filtered from /results - CapabilityRegistry wired into RuntimeApp and ServiceRegistry; DoctorService uses it - release.ts: findRepoRoot/findBun, run air e2e + depcruise + runtime regression - New gates: release-critical-gates, CLI run command regression - 14/14 e2e gates pass; 3/3 release dry-run pass Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
26 KiB
Executable File
集成测试阶段 Gpt5.5 审查结果
审计日期: 2026-06-05
项目: AirCoding V1.0.0 Alpha
审计模式: 四视角交叉审计(系统架构师 / 开发工程师 / 真实用户 / QA 测试工程师)
审计范围: 原始需求、baselineV1、核心源码、既有 MiniMax-M3 / Deepseek / GLM5.1 审查报告、真实用户临时目录 UAT
0. 总体结论
不建议发布 V1.0.0 Alpha,也不建议作为完整产品对外演示。
本轮四视角结论高度一致:AirCoding 已具备 monorepo、contracts、RuntimeApp、Worker IPC、ToolRegistry、TUI 渲染等骨架能力,但核心产品闭环仍不可信:
- 任务失败可能被标记为完成:Scheduler 仍可能在 worker 停止后直接把 running task 标为 completed。
- shell.run 不可靠:shell executor 是 AsyncGenerator,但 ToolRegistry.call 直接 await executor,普通工具调用路径无法得到最终 ToolResultEnvelope。
- 工具结果契约不统一:BuiltInToolRegistrar 多个工具返回
content,contracts 要求output。 - MainAgent answer 无项目上下文:
chat_with_llm()未接入 ContextAssembler。 - 危险操作确认门失效:
air run直接调度 delegate,用户 y/n 不会进入handle_confirmation()。 - E2E gates 失真:13/13 PASS 不能证明真实用户任务成功。
当前只能称为架构骨架技术预览,不能称为满足原始需求和 baseline 的 Alpha 发布版。
1. 系统架构师审查
1.1 架构结论
AirCoding 的包结构、基础状态机、工具注册、Worker IPC、EventStore/ProjectionStore 类都存在,但关键 baseline 承诺没有在运行路径闭合:
- FR-004 事件驱动运行时未闭合:Scheduler 主路径大量修改内存 TaskGraph,而不是以 durable event 作为唯一事实源。
- FR-005 / FR-014 MainAgent 对话未接 ContextAssembler。
- FR-006 ArchitectureDesigner 仍未进入 MainAgent/Scheduler 主路径。
- FR-007 Scheduler 完成判定仍不读取 WorkerResult.status。
- FR-008 IPC 与 contracts 存在实际协议偏差。
- FR-010 / FR-017 C++ 工具链存在双实现且未形成 detect→configure→build→test→debug→fix→review 闭环。
- FR-012 CapabilityRegistry 未被 RuntimeApp 真实接入。
- FR-016 TUI 渲染存在,但
air run手工推送 snapshot,绕过 ProjectionStore/DB/EventStore 投影事实源。 - FR-020 release/e2e gates 仍偏静态检查,不能证明产品成功场景。
1.2 架构 P0/P1/P2
| 优先级 | 问题 | 影响 | 证据 |
|---|---|---|---|
| P0 | MainAgent answer 路径未接入 ContextAssembler | 追问项目状态会幻觉,FR-005/FR-014 不成立 | packages/runtime/src/agents/main/MainAgent.ts:70-73, packages/runtime/src/agents/main/MainAgent.ts:102-118, packages/runtime/src/context/ContextAssembler.ts:74-105 |
| P0 | Scheduler 直接把 running 标 completed | 失败/blocked/cancelled 可假完成 | packages/runtime/src/scheduler/Scheduler.ts:251-260, packages/runtime/src/workers/WorkerManager.ts:237-243 |
| P0 | durable task events 未形成主路径 | FR-004 / INV-1 被削弱,SQLite 不是真正调度事实源 | packages/runtime/src/scheduler/Scheduler.ts:65-78, packages/runtime/src/scheduler/Scheduler.ts:251-260, packages/runtime/src/events/EventStore.ts:622-705 |
| P0 | Worker IPC 与 contracts 不一致,事件/心跳未完整进入父进程事件流 | 恢复、投影、审计不可依赖 | packages/contracts/src/ipc.ts:37-48, packages/workers/src/WorkerRuntime.ts:207-219, packages/runtime/src/workers/WorkerManager.ts:160-253 |
| P0 | C++ 完整工作流未进入主链路 | FR-017 未达成 | packages/runtime/src/tools/BuiltInToolRegistrar.ts:260-314, packages/toolchain-cpp/src/CppToolRegistrar.ts:31-95, packages/workers/src/roles/ExecutorRole.ts:51-57 |
| P0 | ToolResultEnvelope 不统一 | Worker 侧工具输出丢失 | packages/contracts/src/tool.ts:76-83, packages/runtime/src/tools/BuiltInToolRegistrar.ts:180-183, packages/runtime/src/tools/BuiltInToolRegistrar.ts:237-239, packages/runtime/src/workers/WorkerManager.ts:188-192 |
| P1 | shell.run AsyncGenerator 与 ToolRegistry.call() 不兼容 |
shell 可用性不可靠 | packages/runtime/src/tools/shell/index.ts:33-110, packages/runtime/src/tools/ToolRegistry.ts:248-255 |
| P1 | ArchitectureDesigner 是运行路径死代码 | FR-006 不成立 | packages/runtime/src/agents/main/MainAgent.ts:1-265, packages/runtime/src/agents/architecture/ArchitectureDesigner.ts:22-76 |
| P1 | CapabilityRegistry 未接入 RuntimeApp | FR-012 运行级不成立 | packages/runtime/src/app/RuntimeApp.ts:65-92, packages/runtime/src/capabilities/CapabilityRegistry.ts:29-154 |
| P1 | TUI/HUD 不符合 ProjectionStore-only 链路 | TUI 状态可与 DB/EventStore 不一致 | packages/cli/src/commands/run.ts:58-72, packages/cli/src/commands/run.ts:174-189, packages/runtime/src/app/RuntimeApp.ts:81-84 |
| P1 | TUI 与 readline 抢 stdin | TUI 是 viewer,不是完整 coding session 输入界面 | packages/tui/src/TuiApp.tsx:110-146, packages/cli/src/commands/run.ts:99-115 |
| P2 | release/e2e gates 不证明 Alpha 产品可用 | 13/13 PASS 仍可能真实失败 | packages/cli/src/commands/e2e.ts:81-141, packages/cli/src/commands/release.ts:15-27 |
| P2 | ContextAssembler 输出仍偏 string content,不是完整 canonical content blocks | FR-013/FR-014 一致性不足 | packages/runtime/src/context/ContextAssembler.ts:22-26, packages/runtime/src/context/ContextAssembler.ts:263-307 |
1.3 FR-001~FR-020 覆盖度
| FR | 判断 |
|---|---|
| FR-001 CLI Startup/Init | 部分达成。CLI/init/start 有实现,但 doctor/project layout/recovery 仍不完整。 |
| FR-002 Project-Local State | 部分达成。.air 能创建,但 layout 与 baseline 有偏差,状态事实源未完全闭合。 |
| FR-003 Session Persistence | 部分达成。DB/schema 能力存在,但主路径不完整写入 messages/tasks/tool_runs/artifacts。 |
| FR-004 Event-Driven Runtime | 未达成。EventStore 能力存在,主链路仍大量内存状态/手工 snapshot。 |
| FR-005 Main Agent Conversation | 部分达成。分类/回答存在,但无上下文、无完整 message persistence。 |
| FR-006 Architecture Designer | 未达成。类存在,未进入主运行路径。 |
| FR-007 Scheduler/TaskGraph | 部分达成。状态机骨架存在,完成判定/WorkerResult/事件持久化不足。 |
| FR-008 Independent Worker Agents | 部分达成。子进程/角色存在,但 IPC contract 与结果事件链不完整。 |
| FR-009 Execution Primitives | 部分达成偏低。ToolRegistry/PermissionEngine 有入口,但 read-before-edit、verification-before-completion 不能保证。 |
| FR-010 Built-in Tools | 部分达成。工具注册数量覆盖,但结果 shape、streaming、C++/debug/gui/network 深度不足。 |
| FR-011 Permission/Security | 部分达成。引擎存在,默认/交互闭环/备份策略不足。 |
| FR-012 Plugin/Capability Foundation | 未达成运行级。CapabilityRegistry 未接 RuntimeApp。 |
| FR-013 Provider Layer | 部分达成。Adapter 路径存在,但 canonical content blocks 未贯穿。 |
| FR-014 Context/Compaction | 部分达成。ContextAssembler/CompactionPolicy 有骨架,但 MainAgent/Worker 主路径未使用。 |
| FR-015 Artifact/Evidence | 部分达成。Store/事件类型存在,但主任务完成未强制 evidence-backed。 |
| FR-016 TUI/HUD | 部分达成。渲染可用,输入和 ProjectionStore-only 真实链路不足。 |
| FR-017 C++ Complete Workflow | 未达成。工具存在但未形成完整 detect→configure→build→test→debug→fix→review→verify。 |
| FR-018 Doctor | 部分达成。诊断存在,fix/capability/display/network/toolchain 集成不足。 |
| FR-019 Logging/Diagnostics | 部分达成。Logger/DeveloperLogEncryptor 存在,但完整日志策略未证实闭合。 |
| FR-020 Release Gate | 未达成。当前 gates 不覆盖真实 Alpha 成功条件。 |
1.4 Domain Invariants 核对
| Invariant | 判断 |
|---|---|
| INV-1 Session-DB state columns only by EventStore projection | 运行路径未满足。EventStore.project 有能力,但 Scheduler 主路径不完整使用 durable events。 |
| INV-2 Cross-DB/external writes outbox single writer | 部分满足。KnowledgeStore/ArtifactStore 有意图,但主路径 evidence/artifact 不强制闭合。 |
| INV-3 Side effects only through ToolRegistry + PermissionEngine | 部分满足。Worker 工具走 parent ToolRegistry,但 Permission ask_user 无闭环,verification/read-before-edit 不足。 |
| INV-4 Import/dependency one-way | 静态上大体满足,但 toolchain-cpp 未以 capability boundary 真实接入。 |
| INV-5 EventBus transport only, SQLite source of truth | 原则部分实现,真实运行未满足。run.ts 手工 snapshot,ProjectionStore rebuild/repos 链路不完整。 |
2. 开发工程师审查
2.1 工程结论
工程视角判定:核心执行链路存在多个发布阻断缺陷。尤其是 Worker 结果无法可靠进入 Scheduler 状态机、shell.run 流式工具接口与 ToolRegistry 不兼容、CLI 确认流失效、MainAgent 未使用真实 ContextAssembler。现有 E2E 门禁包含源码字符串检查和 mock lifecycle,不能证明端到端可运行。
2.2 工程 P0
| ID | 问题 | 证据 | 影响 | 阻断发布 |
|---|---|---|---|---|
| P0-1 | ToolRegistry.call() 不能执行 shell.run,因为 executor 是 async function* |
packages/runtime/src/tools/shell/index.ts:35, packages/runtime/src/tools/ToolRegistry.ts:254, packages/runtime/src/tools/ToolRegistry.ts:302 |
Worker 调 shell.run 时父进程会把 generator 当 result 处理 | 是 |
| P0-2 | shell.run 声称 streaming,但没有 yield stdout/stderr chunk,最终 envelope 缺 metadata.is_final |
packages/runtime/src/tools/shell/index.ts:64-76, packages/runtime/src/tools/shell/index.ts:98-109, packages/runtime/src/tools/ToolRegistry.ts:152-166 |
call_streaming() 可能返回 no_final_result |
是 |
| P0-3 | Scheduler 不检查 worker exit/result,直接 completed | packages/runtime/src/scheduler/Scheduler.ts:251-260, packages/runtime/src/workers/WorkerManager.ts:237-244, packages/workers/src/main.ts:93-96 |
Worker 失败/blocked/未上报都可显示成功 | 是 |
| P0-4 | Worker 完成结果只更新内存 handle,没有 durable task event | packages/runtime/src/workers/WorkerManager.ts:237-244, packages/runtime/src/events/EventSchemaRegistry.ts:59-61, packages/runtime/src/scheduler/Scheduler.ts:274-277 |
投影、恢复、任务状态与真实结果脱节 | 是 |
| P0-5 | WorkerResult 字段映射错误 | packages/workers/src/roles/ExecutorRole.ts:11-17, packages/workers/src/roles/ExecutorRole.ts:139-143, packages/runtime/src/workers/WorkerManager.ts:324-339, packages/contracts/src/worker-result.ts:74-88 |
changed_files 为空、verification 类型不符、证据丢失 | 是 |
| P0-6 | CLI destructive confirmation 没有 y/n 流程 | packages/runtime/src/agents/main/MainAgent.ts:77-80, packages/cli/src/commands/run.ts:118-132, packages/runtime/src/agents/main/MainAgent.ts:204-211 |
delete/remove/drop 提示确认但实际不等确认直接执行 | 是 |
| P0-7 | classify_via_llm 调 ProviderManager API 错误 |
packages/runtime/src/agents/main/MainAgent.ts:184-189, packages/contracts/src/provider.ts:179-190, packages/llm/src/ProviderManager.ts:83-92 |
启用 LLM classify 会异常或 fallback,LLM 分类实际未上线 | 是 |
2.3 工程 P1
| ID | 问题 | 证据 | 影响 |
|---|---|---|---|
| P1-1 | MainAgent chat_with_llm 未使用 ContextAssembler |
packages/runtime/src/agents/main/MainAgent.ts:102-118, packages/runtime/src/context/ContextAssembler.ts:74-105 |
主 Agent 对项目上下文失明 |
| P1-2 | context.assemble 工具是 stub |
packages/runtime/src/tools/context/index.ts:46-56, packages/runtime/src/tools/BuiltInToolRegistrar.ts:62 |
不能作为真实上下文工具 |
| P1-3 | ExecutorRole DONE false-positive | packages/workers/src/roles/ExecutorRole.ts:136-144, packages/workers/src/roles/ExecutorRole.ts:151-152 |
工具失败也可能 completed |
| P1-4 | ExecutorRole 转义顺序破坏源码 | packages/workers/src/roles/ExecutorRole.ts:222 |
字符串字面量、JSON、正则、路径可能被篡改 |
| P1-5 | 多文件协调缺少验收闭环 | packages/workers/src/roles/ExecutorRole.ts:147-153, packages/workers/src/roles/ExecutorRole.ts:162-168 |
缺文件/缺 build/缺 test 仍成功 |
| P1-6 | Worker IPC 未处理 heartbeat/event | packages/workers/src/WorkerRuntime.ts:113-135, packages/runtime/src/workers/WorkerManager.ts:160-253, packages/runtime/src/scheduler/Scheduler.ts:176-177 |
长任务会被误判 stalled/lost |
| P1-7 | send_and_wait() 不等 ACK,只 sleep 100ms |
packages/runtime/src/workers/WorkerManager.ts:367-379 |
agent.start race condition |
| P1-8 | BuiltInToolRegistrar additional tools 返回非合同 envelope | packages/runtime/src/tools/BuiltInToolRegistrar.ts:180-183, packages/runtime/src/tools/BuiltInToolRegistrar.ts:237-239, packages/contracts/src/tool.ts:76-83 |
WorkerManager 读取 output 时丢失 content |
| P1-9 | ToolRegistry ask_user/deny 返回空 call_id |
packages/runtime/src/tools/ToolRegistry.ts:270-275 |
权限错误不可关联原始 call |
| P1-10 | E2E gates 中 worker lifecycle 是 mock | packages/cli/src/commands/e2e.ts:121-123, packages/runtime/test/e2e/worker-fixture.test.ts:107-141 |
门禁通过不证明真实链路工作 |
2.4 工程修复优先级
- 统一工具执行合同:普通 executor 与 streaming executor 明确分离,
shell.run必须可通过call_streaming()产出 final envelope。 - 重做 WorkerManager/Scheduler 结果闭环:监听 exit、
worker.result、heartbeat、event,并按 WorkerResult.status 发 durable task events。 - 修复 CLI confirmation:确认态只显示提示并等待 y/n,拒绝不创建任务。
- 对齐 WorkerResult/ExecutorResult envelope。
- MainAgent 和 context.assemble 统一接入 ContextAssembler。
- 修复
classify_via_llmProvider API。 - 修复 ExecutorRole DONE 判定、失败处理、acceptance criteria 验证。
- 替换假 E2E,加入真实 worker spawn、tool.call roundtrip、shell.run、worker.result→event→projection 测试。
3. 真实用户 / UAT 审查
3.1 用户体验评分
4/10。
UAT 在临时目录 /tmp/aircoding-uat-xOnpw0 完成,未修改仓库源码。运行入口为 /home/airlongdian/.local/bin/air,指向项目源码 packages/cli/src/index.ts。
基础 CLI 能启动、初始化、创建文件、显示 slash 命令和状态;但自然语言追问、C++ 编译运行闭环、危险操作确认门、TUI 输入模型都存在明显失败或误导性成功。
3.2 UAT 测试矩阵
| 场景 | 结果 | 观察 |
|---|---|---|
air init |
PASS | 成功创建 .air/shared、.air/local、.air/sessions、.air/logs、.air/workspaces 与 project.json。 |
air run 任意目录启动 |
PARTIAL | 未初始化目录会自动 init 并启动,体验上可用。 |
创建 hello.txt |
PASS with noise | 文件成功创建,但 worker 输出 [Worker] exited with code 0 (error): Unrecoverable error occurred,随后 CLI 显示 Task complete. Scheduler: COMPLETED。 |
| 追问“我的项目有哪些文件?” | FAIL | 被分类为 [answer],没有调用 fs.list / project.scan,无法真实回答项目文件。 |
| C++ hello world 编译运行修复闭环 | FAIL | 创建 main.cpp 和 CMakeLists.txt,但没有生成 build/hello,CLI 仍报告 Scheduler: COMPLETED。 |
| 危险操作确认门 | FAIL | 输入 请删除 hello.txt / delete hello.txt 直接派发任务,输入 n 被当普通问答处理。 |
/help |
PASS | 输出清晰。 |
/status |
PARTIAL | 显示 Scheduler/workers/DB,但普通用户解释性一般。 |
/tools |
PASS | 列出 39 个工具和分类。 |
/tasks |
PARTIAL | 空任务图无“暂无任务”说明,历史感弱。 |
/results |
PARTIAL | 会把 .air/logs/air.log、.air/shared/project.json、rules.md 等系统文件当任务产物。 |
| TUI 是否可输入任务 | FAIL | TUI 和 readline 共享 stdin,输入 h、1 被当成自然语言任务。 |
| TUI 状态反馈 | PARTIAL | 能渲染状态,但 worker error 与 task completed 冲突。 |
history |
PARTIAL | 显示 session id 和 DB 大小,但没有任务摘要/时间/项目路径。 |
session list/inspect |
PARTIAL | 能列 active session 和 DB 路径,但用户不易理解。 |
doctor |
PARTIAL | 临时目录缺 package.json / tsconfig.json 报 FAIL,对“任意目录”用户可能误导。 |
3.3 用户最痛问题
- 危险操作确认门不可用:用户拒绝
n不会取消,破坏性操作不能发布。 - 完成状态不可信:C++ 没有实际 build/run 产物仍显示 COMPLETED。
- 追问项目文件不走工具:典型项目查询被普通 LLM 问答处理。
- TUI 与命令行输入冲突:快捷键看似存在,实际被 readline 吃掉。
- 结果列表污染:
.air内部日志/配置被当作 Produced files。
3.4 false-positive 风险
- fake LLM 明确返回了
shell.run("cmake -S . -B build && cmake --build build && ./build/hello"),但 AirCoding 没有产生 build 产物,说明问题在工具执行/Worker 结果处理,不是模型质量。 air doctor在任意目录将缺少package.json/tsconfig.json标为 FAIL,对任意目录启动场景会误导用户。- CLI 的
Scheduler: COMPLETED与 worker “error” 同时出现,用户无法判断真实状态。
3.5 是否可演示/可发布
- 可演示:只适合内部有限演示
air init、air run、/help、/tools、简单创建hello.txt。 - 不可发布:不能演示危险操作、C++ 编译闭环、TUI 快捷键、复杂追问。
4. QA / 发布门禁审查
4.1 QA 总结
- TypeScript typecheck:PASS。
air e2e:13/13 PASS。- 结论:现有 gates 不能作为 V1.0.0 Alpha 发布门禁。它们主要覆盖类型、依赖边界、静态源码断言和小范围单元测试,未覆盖真实用户成功完成任务。
4.2 QA 测试矩阵
| 项 | 现状 | 审计结果 |
|---|---|---|
| TypeScript typecheck | tsconfig.check.json 覆盖 7 个 package references |
PASS |
air e2e |
13/13 PASS | PASS,但门禁有效性不足 |
| P1 Storage/Events | regression/storage 类测试 | PASS,但偏单元 |
| P2 Tools/Permission | permission / command risk / tool stubs | PASS,但没有真实 output shape gate |
| P3 Provider/Context | llm tests + ContextAssembler regression | PASS,但没有 answer-mode 上下文追问 gate |
| P4 Worker IPC | worker fixture + exit/result envelope regression | PASS,但 worker fixture 是 mock,不是真 spawn round-trip |
| P5 C++ Toolchain | toolchain-cpp tests | PASS,但没有复杂 C++ 用户任务生成→构建→验证闭环 |
| P6 Projection/TUI | e2e.ts 引用 projection-store-apply.test.ts |
可疑:该文件不存在,当前 P6 实际覆盖弱化 |
| P7 Agents | direct-mode / architecture-review fixtures | PASS,但未覆盖 run.ts confirmation 交互路径 |
| P8 Full regression | runtime regression directory | PASS,但大量测试是源码字符串断言 |
| ToolResultEnvelope shape gate | 无完整 gate | FAIL/缺失 |
| shell.run functional gate | 无真实 functional gate | FAIL/缺失 |
| answer-mode context gate | 无 | FAIL/缺失 |
| simple file create gate | 不是 e2e gate 的一部分 | 缺失 |
| complex C++ generate gate | 不是 e2e gate 的一部分 | 缺失 |
| Worker IPC llm/tool round-trip | mock fixture,不是真 WorkerManager + WorkerRuntime + ToolRegistry 往返 | 缺失 |
| false-positive 成功测试 | 无 | 缺失 |
4.3 缺失发布 gates
gate:tool-envelope-shape:遍历所有注册工具,断言成功结果必须符合ToolResultEnvelope{status, output, metadata}。gate:shell-run-functional:通过 ToolRegistry 调用shell.run("printf ok"),断言 exit_code/stdout。gate:answer-context:追问项目文件/上一步结果必须引用真实上下文。gate:simple-file-create:真实执行创建文件任务,断言磁盘内容和 task result。gate:complex-cpp:生成 C++ + CMake,断言多文件、非 stub、可 build/run 或明确失败。gate:worker-ipc-roundtrip:真实 spawn worker,覆盖worker.ready → agent.start → llm.request → tool.call → tool.result → worker.result。gate:confirmation:破坏性请求必须停在确认态,拒绝后不得执行。gate:false-positive-success:工具失败时 CLI/agent 结果必须 failed/blocked,不得打印成功。
4.4 QA P0/P1/P2
| 优先级 | 问题 |
|---|---|
| P0 | e2e gates 失真,13/13 PASS 不能证明用户成功场景。 |
| P0 | ToolResultEnvelope shape 不一致未被 gate 捕获。 |
| P0 | shell.run functional gate 缺失且实现存在 AsyncGenerator 解包风险。 |
| P0 | Worker IPC tool.call / llm.request 未真实端到端验证。 |
| P0 | confirmation CLI 路由缺失。 |
| P0 | false-positive 成功缺少门禁。 |
| P1 | answer-mode context gate 缺失。 |
| P1 | complex C++ generate gate 缺失。 |
| P1 | Scheduler 完成判定偏乐观。 |
| P1 | P6 gate 引用缺失测试文件,覆盖弱化。 |
| P2 | release command 比 air e2e 更弱,只跑少量静态/回归门。 |
| P2 | e2e gate 标签 P1-P8 粒度粗,缺少用户场景诊断输出。 |
5. 与前几轮审查对比
已有报告:
集成测试阶段MiniMax-M3审查结果.md集成测试阶段Deepseek审查结果.md集成测试阶段GLM5.1审查结果.md
| 问题 | MiniMax-M3 | Deepseek | GLM5.1 | Gpt5.5 本轮 |
|---|---|---|---|---|
| MainAgent 无上下文 | 已指出 | 已指出 | 已指出 | 仍成立 |
| shell.run 不可用 / 生成器未解包 | 已指出 | 已指出 | 已指出 | 仍成立,且 streaming final envelope 也有问题 |
| BuiltInToolRegistrar content vs output | 已指出 | 已指出 | 已指出 | 仍成立 |
| Scheduler MONITORING 假完成 | 已指出 | 已指出 | 已指出 | 仍成立 |
| ArchitectureDesigner 死代码 | 已指出 | 已指出 | 已指出 | 仍成立 |
| PermissionEngine 未完整闭环 | 已指出 | 已指出 | 已指出 | 部分有 evaluate,但 ask_user/交互/事件闭环仍不足 |
| TUI 无输入 / ProjectionStore 偏离 | 已指出 | 已指出 | 已指出 | 仍成立,UAT 确认快捷键与 readline 冲突 |
| FR-017 C++ 主链路不联动 | 已指出 | 已指出 | 已指出 | 仍成立,UAT 确认未 build/run |
| E2E gates 失真 | 已指出 | 已指出 | 已指出 | 仍成立,13/13 PASS 仍不能证明可发布 |
| WorkerResult envelope 映射错误 | 部分涉及 | 部分涉及 | 部分涉及 | 本轮工程视角明确列为 P0 |
| Worker real IPC round-trip 缺失 | 部分涉及 | 部分涉及 | 部分涉及 | 本轮 QA 明确确认 P4 fixture 是 mock |
本轮新增/强化结论:
shell.run不只是 AsyncGenerator 未解包,streaming 路径也缺 final envelope 约定。- WorkerResult/ExecutorResult 字段映射错误会导致 changed_files、verification、evidence 丢失。
- Worker checkpoint/heartbeat/event 未完整处理,会影响长任务状态判断。
- UAT 实测确认 TUI 快捷键会被 readline 当成自然语言任务。
- QA 确认 P4 worker lifecycle gate 仍是 mock,不是真实发布级 round-trip。
6. 发布建议与最小阻断修复清单
6.1 发布建议
不发布 V1.0.0 Alpha。
当前可对外表述只能是:
基础 monorepo、contracts、工具注册、Worker IPC、TUI 渲染骨架已存在;尚未达到 baseline 所要求的完整 Alpha 产品闭环。
6.2 最小阻断修复清单
- 修复 ToolResultEnvelope 统一性:所有工具必须返回
status/output/error/metadata,消除非契约contentshape。 - 修复
shell.run:普通调用和 streaming 调用都必须产出可消费的最终结果,ToolRegistry 不得返回裸 AsyncGenerator。 - Scheduler 必须基于 WorkerResult.status 产生 durable
task.completed/task.failed/task.blocked/task.cancelledevents,不允许has_running()==false直接完成任务。 - WorkerResult/ExecutorResult 必须对齐 contracts,保留 changed_files、verification、evidence_refs。
- MainAgent/Executor/Reviewer/Debugger 必须使用 ContextAssembler,answer 分支必须携带项目/会话/工具历史上下文。
- ArchitectureDesigner 必须进入 MainAgent DELEGATING 前的 architecture impact gate。
- RuntimeApp 必须实例化并接入 CapabilityRegistry,统一 toolchain-cpp 与 BuiltInToolRegistrar 的 C++ 工具路径。
- TUI 输入与 CLI readline 必须合并为单一交互通道,或明确将 TUI 降级标识为非交互 HUD(但这会违背原始需求,不建议)。
- PermissionEngine
ask_user必须有 permission.prompt.requested/resolved 事件与 CLI/TUI 交互闭环。 - Release gates 必须新增真实用户成功场景:
air init初始化目录布局校验;- 简单文件创建并验证内容;
shell.run("echo ok");project.scan/cpp.detectoutput shape;- C++ fixture configure/build/test;
- 失败工具不能显示成功;
- 上下文追问能回答真实文件;
- destructive request confirmation;
- WorkerResult failed/blocked 不得被标 completed;
- ProjectionStore 从 SQLite rebuild 后 TUI snapshot 一致。
7. 最终判断
本轮 Gpt5.5 审查与 MiniMax-M3、Deepseek、GLM5.1 三轮结论一致:
- 不是测试覆盖不足的小问题,而是主链路事实源、工具契约、Worker 结果、上下文、确认门、发布门禁共同未闭合。
- 继续只跑现有
air e2e得到 13/13 PASS 没有发布意义。 - 修复必须进入源码主路径,不能通过新增旁路命令、文档说明或演示规避。
发布状态:BLOCKED。