fix: Windows兼容性修复 + P1-24弱模型优化 + 3.2.9b禁止降级方案 + AirRvr三层审查放行标准

- lock.py: 跨平台进程锁(Unix fcntl / Windows msvcrt / O_CREAT|O_EXCL降级)
- eng_mode.py/eng_orchestrator.py: hasattr(os, "getloadavg") Windows防护
- arc_mode.py: 路径分隔符 replace("\\", "/") Windows兼容
- deploy_runtime.py: 修复语法错误(清理 import tempfile 残留)
- P1-24(3.2.18): AMBIGUOUS_VERBS歧义词检测 + SAFE_VERBS安全动词 + validate_task_description()
- TaskNode.keep_constraints 保留约束字段 + JSON序列化
- _build_graph_from_todo 返回歧义警告 + Arc自检集成
- 3.2.9b: FORBIDDEN_DEGRADATION_PATTERNS + check_forbidden_degradation()
- AirRvr三层审查放行标准: ReviewVerdict + evaluate_review_pass() + is_forbidden_pass_reason()
- commands/arc.md: 弱模型安全重写(操作类型拆分+保留约束+自检)
- commands/do.md/eng.md/rvr.md: 禁止降级方案 + 三层审查标准
- 测试: 7个新测试 + 74全量通过

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
AirPlan
2026-06-15 09:58:29 +08:00
parent 6130478c96
commit a60d1a0c04
13 changed files with 486 additions and 42 deletions

View File

@@ -56,14 +56,35 @@ ArcPhaseGate 控制 execution-plan.json 写入权限。phase 默认 `discussing`
**推进方式**:用户说"确认"/"可以"/"同意"后,`ArcPhaseGate.confirm_architecture()` 自动推进。不丢失(已修复)。
## 弱模型安全INV-16
## 弱模型安全INV-16+ 任务描述弱模型优化P1-24 / 3.2.18
Do Worker 可能是廉价模型/本地小模型,字面理解任务无推断能力。产出每个任务时必须:
Do Worker 可能是廉价模型/本地小模型,字面理解任务无推断能力。真实案例中"清理旧产品实现"被弱模型理解为"删除整个 src/"。产出每个任务时必须:
1. **禁止歧义词** — 不用"清理"、"重构"、"优化"等宽泛动词,指明具体改什么
2. **否定约束显式化** — 写明**不做什么**(如"不删除 src/ 下现有模块"
3. **文件范围精确化**`files_dirs` 精确到文件级,不写 `src/` 目录级
4. **完成标准可验证**`done_when` 能用 `grep`/`diff`/`cmake --build` 客观验证
### 操作类型拆分(按动词分类)
**禁止歧义词**:不使用"清理"、"优化"、"整理"、"更新"等宽泛动词。必须用具体动词:
- `重构` — 修改实现但保持外部接口不变
- `新增` — 添加新功能,不修改现有代码
- `删除` — 移除指定文件或函数(必须列出具体目标)
- `修改` — 修改指定文件的具体部分(必须指明改什么)
- `保留` — 明确标记为不可修改的文件/目录
### 保留约束机制
每个任务必须包含:
1. **操作指令**: 用具体动词描述要做什么(重构/新增/删除/修改)
2. **保留约束**: 明确列出不可修改的文件、目录或函数
3. **变更边界**: 精确到文件级别,每个文件标注"新建|修改|删除|保留"
4. **完成标准**: 可验证的条件,避免主观判断
### 禁止的写法
- "清理旧实现" → 改为 "重构 CMakeLists.txt 去掉 sipclient 依赖,保留 src/ 下所有现有模块"
- "优化模块结构" → 改为 "将 auth/login.py 中的 validate() 函数提取到 auth/validator.py"
### Arc 自检
生成任务后执行 `validate_task_description()` 自检。发现歧义词时自动拆分任务或补充保留约束,不将歧义任务传递给 Eng。
## Logging Standard

View File

@@ -13,6 +13,11 @@ AirDo 是任务执行器。运行单个任务,强制执行全专家插件路
1. **UI Task Handling (P1-20)** — 当任务涉及 UI/前端/界面时,检测并确保 frontend-design Skill 可用。不可用时阻止执行
2. **Evidence Gate (INV-4)** — GUI 任务需截图,网络任务需抓包,代码任务需静态分析/测试
3. **全专家插件强制路由** — finish 时按任务类型和状态强制路由到对应专家插件,不可跳过
4. **禁止降级实现 (3.2.9b)** — 必须严格遵循 AirArc 设计方案,禁止以下行为和语言模式:
- 禁止使用"兜底方案"、"先这样做"、"以后再补"、"临时方案"等降级语言
- 禁止自行发明替代方案绕过设计约束
- 禁止以"能跑就行"为标准降低实现质量
- 设计方案无法执行时:报 blocked 并说明原因,等待 Eng 协调
## 子命令

View File

@@ -21,6 +21,7 @@ AirEng 是调度引擎,不是执行器。它派发隔离 Worker、监控、合
- 验证失败但非关键 → 记录问题继续下一任务
- 波次间衔接 → 自行启动下一波次
7. **仅以下情况才询问用户**:修复预算耗尽且任务仍 blocked需求歧义无法继续系统资源耗尽用户显式暂停。
8. **禁止降级方案 (3.2.9b)** — 派发任务时不得建议 Worker 使用降级方案。任务 blocked 时分析根因并协调解决,不得让 Worker "先这样跑通"。禁止使用"兜底方案"、"先这样做"、"以后再改"、"临时方案"、"quick fix"等降级语言。必须遵循 AirArc 产出方案,无法推进时报 blocked 等待重规划,不自行发明替代方案。
## 子命令

View File

@@ -12,8 +12,15 @@ AirRvr 是需求审查器。基于原始需求文档对已完成任务进行独
1. **code-to-design 对照** — 每次审查必须逐行对照代码实现与设计文档ADR、C4、需求
2. **高风险审计** — 终审必须包含 lifecycle/nullPointer/danglingPointer/exceptionSafety/concurrency 五项检查
3. **verdict 控制合并** — fail 阻止合并conditional-pass 记录遗留项pass 正常合并
4. **deliveryVerdict = block-release** — eng dispatch 阻止所有后续派发
3. **审查放行标准(三层,不可降级)**
- **第一层(最高优先级)**: Code-to-Design 逐行对照 — codeToDesignTable 中不得有 status=divergent 或 status=missing 的条目,任何 divergent/missing 必须修复后才能放行
- **第二层(必选)**: 静态分析通过 — AirSDB 报告无 critical/high severity finding生命周期/空指针/悬垂指针/异常安全专项审计通过
- **第三层(必选)**: 测试通过 — 单元测试全部通过接口测试全部通过GUI 任务需 AirXDB 截图证据与设计稿一致
- 三层全部通过 → verdict=pass第一层有 divergent/missing → verdict=fail即使测试全绿第一层通过但第二/三层有问题 → verdict=conditional-pass
4. **禁止表面理由判定 pass** — 以下理由不得单独作为 pass 依据:"测试 pass"/"测试全绿"、"实现存在"/"函数存在"、"编译通过"/"无报错"、"能跑通"/"功能可用"。以上仅为必要不充分条件。
5. **verdict 控制合并** — fail 阻止合并conditional-pass 记录遗留项pass 正常合并
6. **deliveryVerdict = block-release** — eng dispatch 阻止所有后续派发
7. **降级语言检测 (3.2.9b)** — 在 code-to-design 审查中检测 Worker 是否使用了降级语言("兜底方案"、"先这样做"、"临时方案"等),检测到则 verdict 直接判定 fail要求按原始设计重新实现
## 审查模式