Files
AirCoding/状态交接.md
AirCoding 5e282a39b4 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>
2026-06-09 16:13:16 +08:00

182 lines
11 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AirCoding 全量上下文导出 — 回话恢复用
> 导出时间2026-06-08
> 用途在新会话中还原本轮全部状态决策、plan、问题根因、参考复用映射、执行框架
> 使用方法:新会话中 `Read /home/airlongdian/DataDevices/AirWorkSpace/AirCoding/状态交接.md` 即可恢复全部上下文。
---
## 1. 仓库与分支
- 仓库根:`/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 操作即可。*