aps-agent/docs/round-66-solver-isolation-p...

135 lines
6.8 KiB
Markdown
Raw Permalink 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.

# Round 66 多智能体并行实施计划
日期:2026-08-03
## 1. 执行策略
采用三条互斥写边界并行,主 agent 负责 GitNexus 门禁、协议集成、全量测试、真实运行和最终审计。共享 dirty 工作区是权威基线;worker 不提交、不清理、不触碰现场数据。
## 2. 依赖图
```text
W66-PROTOCOL(新协议/runner/worker) ─┐
├─ 主 agent 接线与集成
W66-RUNTIME(probe/sidecar/env/lock) ─┤
└─ W66-VERIFY(测试资产)
```
W66-VERIFY 只新增测试/fixture,不修改业务文件;可在协议接口稳定后通过 agent 通信对齐。
## 3. Worker 边界
### W66-PROTOCOL:solver 子进程协议与执行器
独占写:
- `server/engines/solver_process.py`(新增)
- `server/engines/solver_worker.py`(新增)
- 可新增 `shared/schemas/solver-subprocess.schema.json` 与对应生成/契约测试;若新增 schema,必须同步 `server/contracts.py` 和 `apps/web/src/api/types.ts`,否则不新增跨层 schema。
验收:正常、非零退出、fatal marker、timeout、非法响应、协议 mismatch;父进程不死;结构化错误;进程树回收。
验证:`python -m pytest tests/golden/test_solver_subprocess.py -q`(测试文件由 W66-VERIFY 提供时可先用自检脚本)。
### W66-ENGINE:CP/HYBRID 接线与父进程物化
独占写:
- `server/engines/cp_engine.py`
- 必要时 `server/engines/base.py`(仅错误元数据契约,避免改工厂)
测试独占:
- `tests/golden/test_cp_engine.py`
- `tests/golden/test_cp_cumulative.py`
- 可新增 `tests/golden/test_solver_engine_isolation.py`
验收:仅优化在 child;父进程 materialize;健康结果等价;所有失败 world 不变;CP/HYBRID 不伪装成功。
### W66-RUNTIME:Sidecar、探针与环境身份
独占写:
- `server/sidecar.py`
- `scripts/check_solver_runtime.py`
- `apps/desktop/sidecar.cjs`
- `packaging/requirements-runtime.lock`(新增;只锁定,不修改本地环境)
- `tests/golden/test_solver_runtime_probe.py`
- `apps/desktop/test/sidecar.test.cjs` 或对应现有 sidecar 测试文件
验收:probe 内部 timeout;来源/版本/Conda/user-site 报告;fatal+exit0 拒绝;PATH 清理;普通/冻结 solver-child 入口。
### W66-VERIFY:故障注入与存活验收
独占写:
- `tests/golden/test_solver_subprocess.py`(新增)
- `tests/golden/test_solver_failure_world_atomic.py`(新增)
- `tests/e2e/round66_solver_isolation_server.py`(如需)
- `apps/web/e2e/solver-isolation.spec.ts`(如 UI/API 能观察失败)
不得修改业务源码。验收覆盖恶意 child、timeout、协议截断、父进程继续健康、现场 world 不变。
## 4. 主 agent 集成职责
- 对每个现有符号编辑前运行 GitNexus impact;HIGH/CRITICAL 先告警。
- 用 Serena 检查符号体和引用;不修改 `get_engine()`。
- 协调 W66-PROTOCOL 与 W66-ENGINE 的 request/response 契约。
- 运行 focused -> 受影响 -> full golden -> Node/Web -> runtime probes -> browser/API 存活验证。
- 运行 `detect_changes(compare main)`,区分共享基线和本轮切片。
- 回写 `plan.md`、完成矩阵、CHANGELOG、算法/运行时文档和 Round 66 状态。
- 派独立只读 audit agent;blocking finding 修复后再收口。
## 5. 禁止项
- 不修改 `get_engine()`,不在 workflow 单点包裹后声称全入口安全。
- 不让 child 写 parent world、DB、审批、文件或外部系统。
- 不把 fatal 当 `RuntimeError` 后静默 RULE 成功。
- 不重建 `.venv`、不安装/升级依赖、不打包/签名/发布,除非用户另行授权。
- 不使用默认 PATH `python` 作为发布通过证据;它只作为故障探针。
- 不提交、不推送、不合并、不清理用户变更。
## 6. 集成顺序
1. 协议和 worker 自检。
2. CP/HYBRID 接线与健康等价测试。
3. runtime identity、sidecar child 和 PATH 清理。
4. 故障注入、world 原子性和 8003 存活。
5. 全量门禁、文档、独立审计。
## 7. 回传格式
每个 worker 报告 impact、修改文件、测试命令/结果、验收逐项、边界检查、残余风险、未提交/未触碰现场数据声明。
## 8. Pre-target-merge
最终只形成未提交的 pre-target-merge 报告;用户未授权时保留主工作区和所有证据,不执行 target advance、push、merge、release 或 cleanup。
## 9. Worker 执行回传
| Worker | 写入边界 | 结果 | 验收摘要 |
|---|---|---|---|
| W66-PROTOCOL | `solver_process.py`、`solver_worker.py`、协议测试 | Done | 协议 v1、digest/requestId、fatal/exit/timeout/非法响应/mismatch、进程树回收 |
| W66-ENGINE | `cp_engine.py`、引擎隔离测试 | Done | CP/HYBRID child 优化、父物化;失败 `UNAVAILABLE`、0 PO/WO、无 RULE 静默降级 |
| W66-RUNTIME | Sidecar、runtime probe、desktop env、runtime lock | Done (source) | Anaconda 稳定拒绝;两个 venv 各 5 次通过;源码 `--solver-child -I` trusted root bootstrap 后真实通过 |
| W66-VERIFY / 主 agent | focused/full/Node/Web、故障注入、服务与浏览器 | Done (local) | focused 80;full golden 1029/2 warnings;Node 60、Web/质量门禁与真实运行通过 |
| W66-DOCS | 本轮指定的 8 个 docs 文件 | Done | 同步真实运行、数据边界、构建后验收与下一 P0;不改代码/测试/数据 |
### 集成事实
- 正向复制 `world.json`:CP/HYBRID 均 `OPTIMAL`,1 PO / 10 WO / 10 operationSlots,协议 v1,`runtimeSafe=true`。
- 源码 Sidecar `--solver-child -I` 初次真实冒烟暴露 import root 问题;GitNexus LOW impact 修复后 CP 同样 `OPTIMAL`、1/10/10。
- MOM 复制数据:CP/HYBRID 求解 `OPTIMAL`,但现有主数据阻断导致 0 PO/WO、1 slot/1 conflict,不作为现场完整主数据证明。
- fatal/timeout 均失败关闭;timeout 15.633 秒并回收 grandchild;父进程和 8003 存活,业务世界原子。
- 8003 PID `21576`、5173 PID `9808` healthy;浏览器 title/root 正常、无 warning/error。
### Pre-target-merge 状态
- 现有冻结 Sidecar EXE 仅旧 `--probe-child` 通过;新 `--solver-child` 尚未随冻结产物重建验证。
- 全量黄金最终为 1029 passed / 2 warnings;首轮审计假绿阻断已修复,最终独立复审 `AUDIT: PASS`。
- 没有 commit、push、merge、release、cleanup 或现场业务数据写入。
### 审计补强
- 首轮审计发现成功响应摘要与条目业务语义未验证;已补父进程摘要重算、完整排列/字段守恒、status/pipeline 和可行槽位一致性门禁。
- 源码冻结自举已接通;旧冻结 EXE 未重建,保留构建后验收。
- 最终复审补强:临时文件 stdin 消除 Windows 管道背压;operationSlots 严格索引域与订单/产品绑定;补 pipeline/status 负向测试。