Files
AirCoding/集成测试阶段Gpt5.5审查结果.md
AirCoding ddefcbb2b1 fix: integrate audit findings round 1 - tools, worker, scheduler, main agent
- 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>
2026-06-05 18:39:10 +08:00

26 KiB
Executable File
Raw Blame History

集成测试阶段 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 渲染等骨架能力,但核心产品闭环仍不可信:

  1. 任务失败可能被标记为完成Scheduler 仍可能在 worker 停止后直接把 running task 标为 completed。
  2. shell.run 不可靠shell executor 是 AsyncGenerator但 ToolRegistry.call 直接 await executor普通工具调用路径无法得到最终 ToolResultEnvelope。
  3. 工具结果契约不统一BuiltInToolRegistrar 多个工具返回 contentcontracts 要求 output
  4. MainAgent answer 无项目上下文chat_with_llm() 未接入 ContextAssembler。
  5. 危险操作确认门失效air run 直接调度 delegate用户 y/n 不会进入 handle_confirmation()
  6. 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 手工 snapshotProjectionStore 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 会异常或 fallbackLLM 分类实际未上线

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 工程修复优先级

  1. 统一工具执行合同:普通 executor 与 streaming executor 明确分离,shell.run 必须可通过 call_streaming() 产出 final envelope。
  2. 重做 WorkerManager/Scheduler 结果闭环:监听 exit、worker.result、heartbeat、event并按 WorkerResult.status 发 durable task events。
  3. 修复 CLI confirmation确认态只显示提示并等待 y/n拒绝不创建任务。
  4. 对齐 WorkerResult/ExecutorResult envelope。
  5. MainAgent 和 context.assemble 统一接入 ContextAssembler。
  6. 修复 classify_via_llm Provider API。
  7. 修复 ExecutorRole DONE 判定、失败处理、acceptance criteria 验证。
  8. 替换假 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/workspacesproject.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.cppCMakeLists.txt,但没有生成 build/helloCLI 仍报告 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.jsonrules.md 等系统文件当任务产物。
TUI 是否可输入任务 FAIL TUI 和 readline 共享 stdin输入 h1 被当成自然语言任务。
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 用户最痛问题

  1. 危险操作确认门不可用:用户拒绝 n 不会取消,破坏性操作不能发布。
  2. 完成状态不可信C++ 没有实际 build/run 产物仍显示 COMPLETED。
  3. 追问项目文件不走工具:典型项目查询被普通 LLM 问答处理。
  4. TUI 与命令行输入冲突:快捷键看似存在,实际被 readline 吃掉。
  5. 结果列表污染.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 initair run/help/tools、简单创建 hello.txt
  • 不可发布不能演示危险操作、C++ 编译闭环、TUI 快捷键、复杂追问。

4. QA / 发布门禁审查

4.1 QA 总结

  • TypeScript typecheckPASS。
  • air e2e13/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

  1. gate:tool-envelope-shape:遍历所有注册工具,断言成功结果必须符合 ToolResultEnvelope{status, output, metadata}
  2. gate:shell-run-functional:通过 ToolRegistry 调用 shell.run("printf ok"),断言 exit_code/stdout。
  3. gate:answer-context:追问项目文件/上一步结果必须引用真实上下文。
  4. gate:simple-file-create:真实执行创建文件任务,断言磁盘内容和 task result。
  5. gate:complex-cpp:生成 C++ + CMake断言多文件、非 stub、可 build/run 或明确失败。
  6. gate:worker-ipc-roundtrip:真实 spawn worker覆盖 worker.ready → agent.start → llm.request → tool.call → tool.result → worker.result
  7. gate:confirmation:破坏性请求必须停在确认态,拒绝后不得执行。
  8. 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

本轮新增/强化结论:

  1. shell.run 不只是 AsyncGenerator 未解包streaming 路径也缺 final envelope 约定。
  2. WorkerResult/ExecutorResult 字段映射错误会导致 changed_files、verification、evidence 丢失。
  3. Worker checkpoint/heartbeat/event 未完整处理,会影响长任务状态判断。
  4. UAT 实测确认 TUI 快捷键会被 readline 当成自然语言任务。
  5. QA 确认 P4 worker lifecycle gate 仍是 mock不是真实发布级 round-trip。

6. 发布建议与最小阻断修复清单

6.1 发布建议

不发布 V1.0.0 Alpha。

当前可对外表述只能是:

基础 monorepo、contracts、工具注册、Worker IPC、TUI 渲染骨架已存在;尚未达到 baseline 所要求的完整 Alpha 产品闭环。

6.2 最小阻断修复清单

  1. 修复 ToolResultEnvelope 统一性:所有工具必须返回 status/output/error/metadata,消除非契约 content shape。
  2. 修复 shell.run:普通调用和 streaming 调用都必须产出可消费的最终结果ToolRegistry 不得返回裸 AsyncGenerator。
  3. Scheduler 必须基于 WorkerResult.status 产生 durable task.completed/task.failed/task.blocked/task.cancelled events不允许 has_running()==false 直接完成任务。
  4. WorkerResult/ExecutorResult 必须对齐 contracts保留 changed_files、verification、evidence_refs。
  5. MainAgent/Executor/Reviewer/Debugger 必须使用 ContextAssembleranswer 分支必须携带项目/会话/工具历史上下文。
  6. ArchitectureDesigner 必须进入 MainAgent DELEGATING 前的 architecture impact gate。
  7. RuntimeApp 必须实例化并接入 CapabilityRegistry统一 toolchain-cpp 与 BuiltInToolRegistrar 的 C++ 工具路径。
  8. TUI 输入与 CLI readline 必须合并为单一交互通道,或明确将 TUI 降级标识为非交互 HUD但这会违背原始需求不建议
  9. PermissionEngine ask_user 必须有 permission.prompt.requested/resolved 事件与 CLI/TUI 交互闭环。
  10. Release gates 必须新增真实用户成功场景:
    • air init 初始化目录布局校验;
    • 简单文件创建并验证内容;
    • shell.run("echo ok")
    • project.scan / cpp.detect output 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。