feat(round2+round3): 完整实现 A/B/C/D 主线 + round3-F/H 修复

Round2 主线:
- A: 事件落库地基 (RuntimeApp EventStore 单例 + 14 repo wiring)
- B: 执行体对齐 (read-before-edit, verification-before-completion)
- C: 界面对齐 (@opentui/solid, 删除 runtime 依赖)
- D: 经验闭环 (ExperienceMiner, DebuggerRole, CompactorRole)

Round2 补充修复:
- fail-on-missing 反作弊门禁
- projection-store-apply.test.ts 补写
- 3个空壳测试转行为 (evidence-store, recovery-impl, knowledge-store)
- ask 项目根支持 AIRCODING_PROJECT_ROOT
- Worker 事件契约修复 (task.attempt.started → checkpoint)

Round3-F: cpp 工具切换
- 删除 BuiltInToolRegistrar cpp.* 闭包
- 接入 toolchain-cpp 真实 CppToolRegistrar
- canonical envelope {status/output/metadata}
- ExecutorRole system prompt 对齐新工具名

Round3-H: Doctor 5 类报告
- toolchain (cmake/ninja/cppcheck/clangd/g++)
- display (X11/Wayland + ImageMagick)
- network (internet connectivity)
- provider (api_key/base_url/model/connectivity)

Secret 脱敏:
- 状态交接.md: sk- → \${OPENAI_API_KEY}
- .gitignore: 添加 .air/ .claude/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
AirCoding
2026-06-09 16:13:16 +08:00
parent e383d5f6a7
commit 5e282a39b4
44 changed files with 2905 additions and 1343 deletions

View File

@@ -1,230 +1,181 @@
# AirCoding 集成修复第一轮 - 状态交接
# AirCoding 全量上下文导出 — 回话恢复用
> 用于在另一台设备继续。包含上下文、真实问题、修复方案、验证结果、剩余事项和复现命令。
## 1. 项目与远端
- 仓库根:`/home/airlongdian/DataDevices/AirWorkSpace/AirCoding`
- 仓库地址:`http://admin:L753865h@39.106.174.106/admin/AirCoding.git`
- 当前分支:`GLM5-Achieve`
- 推送目标:`origin/GLM5-Achieve`
- 仓库不在 Git 根级 `package.json` 下,子包为 monorepo用 Bun 运行命令。
## 2. 本轮目标与边界
用户要求:架构与设计冻结、需求已明确;不允许回退或降级;汇总多轮四视角审查报告的真实问题并修复;修复后跑真实 UAT 演示。
**架构与设计冻结点(不要修改)**
- 7 个 monorepo 包:`contracts / cli / tui / runtime / llm / toolchain-cpp / workers`
- 5 个 Domain InvariantsINV-1~INV-5
- 工具契约 `ToolResultEnvelope { status, output, error, artifact_ids, evidence_ref_ids, metadata }``packages/contracts/src/tool.ts`
- Worker/Scheduler IPC 协议
- 状态机:`MainAgent` 15 态、`Scheduler` 13 态
**真实阻断问题来源MiniMax-M3 / Deepseek / GLM5.1 / Gpt5.5 四份审查报告)**
- 工具结果 `content``output` 契约不一致
- `shell.run` AsyncGenerator 无法被普通 `call()` 消费
- Scheduler 在 `!has_running()` 时把所有 running task 标 completed
- Worker 无结果退出后状态丢失
- MainAgent 回答未接入 ContextAssembler
- `run.ts` 危险操作 confirmation y/n 路由断裂
- ExecutorRole DONE 判定宽松、code block 全局反转义破坏源码
- E2E/release gates 不覆盖真实成功场景
- 报告 `集成测试阶段GLM5.1审查结果.md` / `集成测试阶段Gpt5.5审查结果.md` 在仓库根目录
## 3. 已完成的源码修复
### 3.1 工具契约与 shell.run
- `packages/runtime/src/tools/BuiltInToolRegistrar.ts``create_real_executor()` 中 18 个工具成功返回从 `{ type, content }` 改为 canonical `{ status: 'ok', output, metadata }`
- `packages/runtime/src/tools/ToolRegistry.ts``ToolExecutor` 支持 `Promise | AsyncIterable` 返回;`execute_branch` 通过 `execute_executor_final` 消费 streaming final envelope`call_streaming` 透传 chunks 并保证 final 出现。
- `packages/runtime/src/tools/shell/index.ts`streaming executor 立即 yield `command.started`stdout/stderr chunk 收集后 yieldfinal envelope 包含 `metadata.is_final = true``output.{exit_code, stdout, stderr, timed_out}`
### 3.2 Worker/Scheduler 结果闭环
- `packages/runtime/src/workers/WorkerProcess.ts`:新增 `on_exit` 回调,触发退出时把信息分发给 WorkerManager。
- `packages/runtime/src/workers/WorkerManager.ts`
- `WorkerHandle.state` 增加 `failed``worker.result` 按 payload.status 决定 handle state保留 wrapped result。
- `wrap_worker_result``changes[].file → changed_files`、verification object → `verification[]`、role status `fixed/pass → completed`、others → `failed`
- `handle_worker_exit` 在 worker 退出但无 result 时构造 `failed/cancelled` result。
- 暴露 `get_result_for_task` / `get_handle_for_task`
- 给 ToolRegistry 调用上下文传 `project_root` + `agent_type: 'executor'`,不再用 `cwd` 伪字段。
- `packages/runtime/src/scheduler/Scheduler.ts``MONITORING` 改为按 `WorkerResult.status` 消费 `task.completed` / `task.blocked` / `task.cancelled` / `task.failed` durable events删除"`!has_running()` 直接 completed"逻辑。
### 3.3 MainAgent 上下文、确认门、ArchitectureDesigner
- `packages/runtime/src/context/ContextAssembler.ts`
- 修复 L6 `evidence_store.list_for_entity` 调用签名。
- 修复 L8 兼容 `role: 'tool' / 'tool_result' / 'tool_use'`
- 新增 L3 `project_files` 快照层(实现 `build_project_files_snapshot`)。
- 移除 additional_layers 重复追加。
- `packages/runtime/src/app/RuntimeApp.ts``start()` 中实例化 `CapabilityRegistry`、绑定 ToolRegistry、注入 DoctorService创建 `MessageRepository` / `EvidenceRepository``context_assembler.set_data_sources`
- `packages/runtime/src/app/ServiceRegistry.ts`:同步接入 `CapabilityRegistry`、把 WorkerManager/Scheduler 走同一个 tool registry。
- `packages/runtime/src/agents/main/MainAgent.ts`
- 新增 `context_assembler / architecture_designer / project_root / agent_id / task_id` 字段。
- `chat_with_llm()` 使用 `ContextAssembler.assemble` 生成 L0-L9 消息再追加 user message。
- `classify_via_llm` 改用 `complete_text``ProviderManager` 既有 API 对齐。
- 危险操作正则覆盖中文:`删除|删掉|清除|移除|销毁`
- 委托前调用 `ArchitectureDesigner.assess_impact``reject_or_escalate/requires_replan``ARCHITECTURE_DESIGNING``requires_user_confirmation``CONFIRMING`
- 新增 `infer_changed_files` 推断受影响组件。
- `packages/cli/src/commands/run.ts`
- MainAgent 构造时传入 `context_assembler``project_root`
- 把调度逻辑抽取为 `dispatchTask`,避免重复代码。
- `pendingConfirmation` 状态机:进入 CONFIRMING 时只展示提示并保存原始任务;`y``handle_confirmation(true)``dispatchTask``n``handle_confirmation(false)` 提示取消,不创建任务。
- `/results` 优先使用 `WorkerResult.changed_files`,过滤 `.air` 内部文件。
- `packages/cli/src/commands/ask.ts`MainAgent 接入 `context_assembler`/`project_root``execute_task``ctx` 改为 canonical ToolExecutionContext。
### 3.4 ExecutorRole
- `packages/workers/src/roles/ExecutorRole.ts`
- 引入 `is_done_signal(text)` 严格判定(仅当整行等于 `DONE``TASK_COMPLETE`)。
- 工具失败且 LLM 输出 DONE 时不返回 `completed`,而是让 LLM 修复。
- 移除 code block 内容的全局 `\\n/\\t/\\\\/\\"` 反转义,保留原文。
### 3.5 Permission 与 TUI
- `packages/runtime/src/tools/ToolRegistry.ts``ask_user`/`deny` 分支保留 `call.call_id`
- `packages/cli/src/commands/release.ts`:增加 `findRepoRoot` / `findBun`,将 release gates 改为运行 `air e2e`、runtime regression、depcruisetimeout 600s并输出失败尾部。
## 4. 新增门禁与测试
- `packages/runtime/test/regression/release-critical-gates.test.ts`(已接入 e2e P0-REL
1. `built-in tool success envelopes use output, not content`
2. `shell.run returns a final envelope through call and streaming APIs`
3. `scheduler does not mark running tasks completed without a worker result`
4. `MainAgent answer mode uses assembled project context`
5. `destructive requests enter confirmation and rejection returns to idle`
- `packages/cli/test/run-command-regression.test.ts`(已接入 e2e P0-REL
- 锁定 `run.ts` 使用 WorkerResult.changed_files、过滤 `.air`、维护 pendingConfirmation。
- `packages/runtime/test/regression/worker-result-envelope.test.ts` 更新断言为新 `wrap_worker_result` 实现。
- `packages/runtime/test/regression/tool-registry-permission.test.ts` 新增 ask_user/deny 保留 call_id 断言。
- `packages/cli/src/commands/e2e.ts` 新增 `P0: Release-critical functional gates`
## 5. 验证结果
```
$ /home/airlongdian/.bun/bin/bun run packages/cli/src/index.ts e2e
14/14 gates passed
- P0: Monorepo structure
- P0: depcruise dependency boundary (INV-4)
- P0: tsc strict typecheck (0 errors)
- P0: Release-critical functional gates
- P1: Storage/Events
- P2: Tools/Permission
- P3: Provider/Context
- P4: Worker IPC
- P5: C++ Toolchain
- P6: Projection/TUI
- P7: Agents
- P8: Full regression suite
- SEC: Command injection regression
- CAP: Capability trust regression
$ /home/airlongdian/.bun/bin/bun run packages/cli/src/index.ts release --dry-run
3/3 gates passed - Release READY
```
## 6. 真实 UAT 演示(临时目录 `/tmp/air-uat.Y2H5dz`
- LLM 配置:`OPENAI_API_KEY=sk-...``OPENAI_BASE_URL=http://newapi.airlongdian.fun`注意env 中 `AIRCODING_*` 会被适配器再次加 `/v1`,应直接用 `OPENAI_*`)、`AIRCODING_MODEL=glm-5.1`
- 场景结果:
1. `air ask "创建一个 hello.txt内容是 HelloWorld"` → 真实写入 `HelloWorld` 磁盘。
2. `air ask "我的项目里有哪些文件?"` → 回答引用项目文件快照(`hello.txt`),无幻觉。
3. `air run` 输入 `请删除 hello.txt``n` → 提示 "Cancelled. No task was created.",文件保留。
4. `air run` 输入 `请删除 hello.txt``y` → 调度 `shell.run rm`,文件被删除。
- UAT 临时发现并修复MainAgent 原危险正则不匹配中文,补充 `删除|删掉|清除|移除|销毁`
## 7. 复现命令(在新设备上验证)
```bash
REPO=/home/airlongdian/DataDevices/AirWorkSpace/AirCoding
cd "$REPO"
# 1) Type check
/home/airlongdian/.bun/bin/bun run node_modules/.bin/tsc --noEmit -p tsconfig.check.json
# 2) E2E
/home/airlongdian/.bun/bin/bun run packages/cli/src/index.ts e2e
# 3) Release dry-run
/home/airlongdian/.bun/bin/bun run packages/cli/src/index.ts release --dry-run
# 4) 临时目录演示
TMP=$(mktemp -d /tmp/air-uat.XXXXXX)
cd "$TMP"
/home/airlongdian/.bun/bin/bun run "$REPO/packages/cli/src/index.ts" init .
OPENAI_API_KEY=<your_key> \
OPENAI_BASE_URL=http://newapi.airlongdian.fun \
AIRCODING_MODEL=glm-5.1 \
AIRCODING_REPO_ROOT="$REPO" \
/home/airlongdian/.bun/bin/bun run "$REPO/packages/cli/src/index.ts" ask "创建一个 hello.txt内容是 HelloWorld"
cat hello.txt
```
## 8. 关键文件清单
修改:
- `packages/cli/src/commands/ask.ts`
- `packages/cli/src/commands/e2e.ts`
- `packages/cli/src/commands/release.ts`
- `packages/cli/src/commands/run.ts`
- `packages/runtime/src/agents/main/MainAgent.ts`
- `packages/runtime/src/app/RuntimeApp.ts`
- `packages/runtime/src/app/ServiceRegistry.ts`
- `packages/runtime/src/context/ContextAssembler.ts`
- `packages/runtime/src/scheduler/Scheduler.ts`
- `packages/runtime/src/tools/BuiltInToolRegistrar.ts`
- `packages/runtime/src/tools/ToolRegistry.ts`
- `packages/runtime/src/tools/shell/index.ts`
- `packages/runtime/src/workers/WorkerManager.ts`
- `packages/runtime/src/workers/WorkerProcess.ts`
- `packages/runtime/test/regression/tool-registry-permission.test.ts`
- `packages/runtime/test/regression/worker-result-envelope.test.ts`
- `packages/workers/src/roles/ExecutorRole.ts`
新增:
- `packages/runtime/test/regression/release-critical-gates.test.ts`
- `packages/cli/test/run-command-regression.test.ts`
报告(在仓库根目录):
- `集成测试阶段Deepseek审查结果.md`
- `集成测试阶段GLM5.1审查结果.md`
- `集成测试阶段Gpt5.5审查结果.md`
- `集成测试阶段MiniMax-M3审查结果.md`
- `集成测试阶段GLM5.1审查结果.md`
- `状态交接.md`(本文件)
## 9. 提交策略
本轮一次性提交commit message
```
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
- 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
```
## 10. 已知与待办
- TUI 完整输入/快捷键统一收口仍是可改进点UAT 已在非 TTY 走通 readline建议后续在 TUI 内增加任务输入框。
- Projection 事实源收口已做(`/results` 走 WorkerResultProjectionClient 接收 ProjectionStore 推送),但 TUI 渲染仍以手工 snapshot 为初值;下一步可以由 EventStore/ProjectionStore 完全驱动。
- 新增 `集成测试阶段Gpt5.5审查结果.md` 等报告应作为证据纳入未来 release notes。
> 导出时间2026-06-08
> 用途在新会话中还原本轮全部状态决策、plan、问题根因、参考复用映射、执行框架
> 使用方法:新会话中 `Read /home/airlongdian/DataDevices/AirWorkSpace/AirCoding/状态交接.md` 即可恢复全部上下文。
---
**会话记录**(从对话恢复继续的关键节点):
1. 四份审计报告汇总去重 → 真实问题清单。
2. Phase 1: 工具契约 + shell.run 修复ToolRegistry 消费 AsyncIterable、shell final envelope
3. Phase 2: WorkerProcess exit handler → WorkerManager → Scheduler MONITORING 改按 WorkerResult 状态入事件。
4. Phase 3: MainAgent 接入 ContextAssemblerCONFIRMING y/n 路由ArchitectureDesigner 主路径CapabilityRegistry 接入Permission call_id 保留。
5. Phase 4: ExecutorRole 严格 DONE、保留 code block 原文、失败不 completed。
6. Phase 5: 新增 release-critical-gates / CLI run regressionair e2e 14/14。
7. Phase 6: run.ts `/results` 走 WorkerResultrelease.ts 找 repo root。
8. 真实 UATair ask 创建/追问air run 中文删除拒绝/确认;运行中 UAT 触发并修复中文确认门正则。
9. 准备状态交接与一次性 git 提交推送。
## 1. 仓库与分支
会话总耗时较长,过程已通过自动化避免重复。回到本机可直接按 §7 复现并继续。
- 仓库根:`/home/airlongdian/DataDevices/AirWorkSpace/AirCoding`(软链 `/run/media/airlongdian/EasyU/AirCoding` 指向同一目录)
- 远端:`<remote-url-credentials-stored-locally>`
- 第一轮修复分支:`GLM5-Achieve`已推送commit ddefcbb
- bun 路径:`/home/airlongdian/.bun/bin/bun`
- LLM 配置(真实端点,用 OPENAI_ 前缀,不要用 AIRCODING_API_URL 否则适配器重复加 /v1
- `OPENAI_API_KEY=${OPENAI_API_KEY}`
- `OPENAI_BASE_URL=http://newapi.airlongdian.fun`
- `AIRCODING_MODEL=glm-5.1`
- `AIRCODING_REPO_ROOT=/home/airlongdian/DataDevices/AirWorkSpace/AirCoding`
## 2. 本轮之前做了什么第一轮集成修复commit ddefcbb
真实修复(已验证):
- 工具契约 output/content 统一BuiltInToolRegistrar
- shell.run AsyncGenerator 消费ToolRegistry.execute_executor_final
- Scheduler 删除"!has_running() 全标 completed"假完成逻辑,改为按 WorkerResult.status 终结
- WorkerProcess on_exit → WorkerManager handle_worker_exit无结果退出生成 failed result
- MainAgent 接入 ContextAssemblerL0-L9 + project_files 快照)
- run.ts 确认门 y/n 路由pendingConfirmation 状态机)+ 中英文危险词正则
- ExecutorRole 严格 DONEis_done_signal 整行匹配、code block 原文保留
- CapabilityRegistry 接入 RuntimeApp/DoctorService/ServiceRegistry
- ArchitectureDesigner 接入 MainAgent 主路径impact gate
- Permission ask_user/deny 保留 call_id
- release.ts findRepoRoot/findBun + 真实 gates
- /results 优先 WorkerResult.changed_files过滤 .air
- 新增 release-critical-gates.test.ts5 条真实行为 gate+ CLI run-command-regression.test.ts
未修复(第一轮遗留):
- EventStore.setRepositories 运行路径从不调用 → domain 表恒空
- task.created 从不发出
- TUI 是手写 ANSI非 OpenTUI
- air ask 旁路 Scheduler/Worker 架构(自带内联循环)
- ProjectionStore 运行时不被事件驱动run.ts 手工假 snapshot
门禁air e2e 14/14release --dry-run 3/3。但绿灯和可用性正交。
## 3. opus 四视角交叉审查结论2026-06-08四 opus 子代理并行)
四视角综合判定:**可内测演示(限 air ask不可对外 Alpha 发布**。
新发现的核心问题:
- **P0-1** EventStore.setRepositories 运行路径从不调用 → INV-1/FR-004 运行时整体失效
- **P0-2** Scheduler.create_tasks 不发 task.created注释谎称发出
- **P0-3** TUI 非 OpenTUI/Solid手写 ANSI@opentui 零依赖
- **P0-4** air ask 旁路整个调度/Worker 架构
- **P0-5** failed 任务被调度机当成 COMPLETED
- **P0-6** Worker exit/result 竞态('exit' vs 'close'
- **P0-7** fs.edit 参数名不匹配old_str/new_str vs find/replaceAgent 调用恒失败
- Worker 心跳不刷新,>5min 任务被误判 lost
审计报告文件(仓库根):
- `集成测试阶段MiniMax-M3审查结果.md`
- `集成测试阶段Deepseek审查结果.md`
- `集成测试阶段GLM5.1审查结果.md`
- `集成测试阶段Gpt5.5审查结果.md`
- `集成测试阶段opus审查结果.md`(本轮新增)
## 4. 用户核心要求(本轮拍板,优先级明确)
1. **无工作量优先级,三条主线全部实现**(事件地基 + 执行体 + UI
2. **界面对齐 opencode**(复用它现成的 @opentui/solid TUI不要自己写简陋版
3. **执行体对齐 claude code cli**read-before-edit / verification-before-completion / 结构化工具调用 → 代码层强制,不只是 prompt 文字)
4. **复用 reference/ 全部项目**,不是"参考模式重写"——能直接移植就移植,冗余依赖可接受,最终产品编译质量不受影响即可
5. **需求 > 架构冻结**:当原始需求与冻结的 UML/contracts 冲突时,改 UML 服从需求,记录但不停等批准
6. **廉价模型执行 + 主模型复审**:每个主线由廉价模型做机械执行,主模型每阶段复审(读 diff、查 DB、跑验收不信自报
7. **经验学习闭环不要漏**hermes 的 debug 经验总结、curator、skill 系统)
## 5. 根因分析(为什么"约束很详细还是做歪了"
三个逃生舱:
1. **unknown? 逃生舱**contracts 用 `tools?: unknown[]` 占位 → 实现合法不做tsc 不报错
2. **源码字符串断言冒充验收**28 测试 18 个是 `readFileSync(src).toContain('词')` → 空壳能过
3. **completed 由"写了代码"触发**,不由"达成意图"触发:#158 TUI 标 completed 实为手写 ANSI
事件链路割裂(主线 A 修复的根因):
- `EventStore.ts:942` 导出模块单例 `eventStore = new EventStore({})`(空 DB handle
- `EventIngestor.getEventStore()` 用这个单例
- Scheduler 通过 `import { eventIngestor }` 发事件 → 全部流向这个空单例
- RuntimeApp 另建 `new EventStore({db})` 赋给 `this.event_store`,只对它 setTransactionManager
- 两个实例割裂domain 表恒空
## 6. 参考项目复用映射关键reference/ 就是 AirCoding 的设计血统)
| 参考项目 | 对应 AirCoding | FR |
|---|---|---|
| opencode-1.15.5 | TUI 结构 + @opentui/solid 用法 | FR-016 |
| claude-code-cli | 执行原语、Tool 契约、ToolUse/Result block、FileEditTool readFileState | FR-009 |
| openai-codex | 工具广度、shell/patch/test loop | FR-009/010 |
| hermes-agent-2026.5.16 | 经验学习闭环(curator/memory/skill/error_classifier/context_compressor) | FR-008/014 |
| claude-hud-0.0.12 | HUD 显示context/tools/agents/todo | FR-016 |
| anthropic-skills | SKILL.md 标准 + Agent Skills spec | FR-012 |
| air-suite-20260518 | **AirCoding 插件原型**airarc/aireng/airdo/airdbg/airxdb/airndb/airsdb | FR-006/007/008/017 |
| atuin-18.16.1 | shell 历史(辅助) | — |
| asciinema-3.2.0 | 终端录制(辅助 evidence | FR-015 |
复用核心来源(取证确认):
- claude-code-cli `tools/FileEditTool/FileEditTool.ts:275-290``readFileState.get(path)` 检查 → 未读报错 "File has not been read yet"
- claude-code-cli `Tool.ts:1-6``import { ToolResultBlockParam, ToolUseBlockParam } from '@anthropic-ai/sdk'`
- opencode `footer.prompt.tsx`OpenTUI textarea 输入框 + keymap
- opencode opentui 版本0.3.0`package.json:41-43`
- hermes `agent/curator.py``memory_manager.py``error_classifier.py`
## 7. 第二轮规划文件(全部在 `/home/airlongdian/.claude/plans/`
| 文件 | 内容 |
|---|---|
| `round2-MASTER.md` | 总纲:根因 + 永久纪律 N1-N5 + 需求§6 锚定 + 三主线总览 |
| `round2-REUSE-MAP.md` | 参考项目→AirCoding 复用映射表(每个 reference 项目对应的模块/文件) |
| `round2-A-events.md` | 主线A事件落库地基统一 EventStore 单例 + task.created 发出 + 验收DB 真有数据) |
| `round2-B-execution.md` | 主线B执行体对齐 claude codecontent block 类型 + read-before-edit 强 + verification + 结构化 tool_use |
| `round2-C-ui.md` | 主线C界面对齐 opencode@opentui/solid 直接移植优先 + 冗余依赖可接受) |
| `round2-D-experience.md` | 主线D经验学习闭环hermes curator/error_classifier/skill 移植到 ExperienceMiner/Debugger/Compactor |
| `round2-E-gates.md` | 主线E反作弊门禁需求§6 13条行为化 + NFR-006 + fail-on-missing |
| `round2-EXECUTOR-PROMPT.md` | **可直接复制给廉价模型的启动指令** |
### 执行顺序A → B → (C ∥ D) → E
- A 是 C/D 的前提(事件落库才能有真实投影供 TUI 消费)
- B 与 A 无强依赖,建议顺序做(改动交叉)
- C 和 D 可并行(都依赖 A
- E 贯穿收口
### 每主线验收硬线
- Asession.db 的 tasks 表 count > 0不达成不准进 C/D
- Bread-before-edit 代码强制(未读先改被拒)+ 结构化 tool_use + executor-role 功能测试
- CTUI 无手写 ANSI、可输入、状态来自真实投影、不依赖 runtime
- DExperienceMiner/Compactor 非空壳、CapabilityRegistry 加载 skill
- E需求 §6 13 条各有行为 gate 且绿
## 8. 永久纪律 N1-N5各 plan 文件中重申)
- N1 消灭 unknown? 逃生舱(本轮触及的契约字段补具体类型去可选)
- N2 验收必须执行被测代码(禁止用 grep 源码字符串当 gate
- N3 completed 由验收命令通过触发(不是"我写完了"
- N4 改不动或与描述不符就停下报告,不自由发挥
- N5 每阶段贴真实输出TSC 退出码、测试 pass/fail、DB 行数——原样贴)
## 9. 五份审计报告(仓库根,已 git 跟踪)
1. `集成测试阶段MiniMax-M3审查结果.md`
2. `集成测试阶段Deepseek审查结果.md`
3. `集成测试阶段GLM5.1审查结果.md`
4. `集成测试阶段Gpt5.5审查结果.md`
5. `集成测试阶段opus审查结果.md`(本轮新增)
## 10. 回话恢复操作(新会话中执行)
1. 确认仓库存在:`cd /home/airlongdian/DataDevices/AirWorkSpace/AirCoding && ls`
2. 确认分支:`git log --oneline -3`(应在 GLM5-Achieve最新 ddefcbb
3. 读本文件恢复上下文:`Read /home/airlongdian/DataDevices/AirWorkSpace/AirCoding/状态交接.md`
4. 读总纲:`Read /home/airlongdian/.claude/plans/round2-MASTER.md`
5. 定位上次进度如果主线A尚未完成`round2-A-events.md` 继续如果A已完成检查 session.db 的 tasks 表确认后发主线B
6. 给廉价模型的指令模板:读 `round2-EXECUTOR-PROMPT.md`,复制「===」之间的内容给廉价模型
7. 复审流程:执行模型贴回验收输出 → 主模型读 diff / 查 DB / 跑验收 → 通过放行下一主线
## 11. 当前剩余核心决策点(可选在新会话中确认)
- TUIC0 如果 @opentui/solid 0.3.0 在当前 Bun 版本装不上,是降版本还是换方案?当前用户已确认「冗余依赖可接受、直接移植优先」
- air ask 旁路架构:是否要删掉内联循环统一到 Scheduler→Worker不在本轮A-E留后续
- 第二轮修复的 git 分支:是继续 GLM5-Achieve 还是新开分支
## 12. 用户核心价值取向(从会话中提取,新会话中如遇决策歧义以此为锚)
- 不接受架构降级,但需求 > 冻结(需求冲突时改 UML 服从需求)
- 不接受空壳实现prompt 文字冒充代码强制不可接受)
- 复用成熟实现 > 自己写(手写简陋版是之前反复出问题的根源)
- 质量 > 速度;真实验收 > 绿灯数字
- "小步快走"但每一步交付物真实可验证,不靠标记自报
---
*如需在新设备继续git pull GLM5-Achieve 后按 §10 操作即可。*