requirement-parallel-orchestration · git:20260906.8d1c8e1 · 2026-09-06 · sha256 5d8ba46dfe954ddf

requirement-parallel-orchestration git:20260906.8d1c8e1A

Immutable. This exact content is served forever at /api/v1/blob/5d8ba46dfe954ddf.

---
name: requirement-parallel-orchestration
description: 多需求与宿主原生子 Agent 编排 Skill — 先判断工作项独立性,再以新鲜宿主能力、租约、隔离证据和根 Agent 单写者完成受控派发或自动串行回退。
---
# Requirement Parallel Orchestration Skill

## 职责

本 Skill 负责在进入源码实现、修复执行、长流程 Auto 或子会话派发前,判断多个需求/任务是否可以并行推进。它补齐的是执行前编排判定层,不替代 `intent`、`cp-gate`、`execution-contract`、`test-router`、`report` 或 `memory`。

默认原则:缺少证据时返回 `serial-required`;只有写入面、CP 状态、共享状态和汇合协议都可验证时,才允许输出 `ParallelLaunchCardV1`。LaunchCard 仍只是计划,不能证明宿主已经派发子 Agent;只有 `HostSubagentDispatchPlanV1.status=parallel-eligible`、有效 `AgentWorkLeaseV1` 和实际宿主工具结果同时存在时才可派发。

## 触发条件

| 场景 | 是否触发 |
|------|:--------:|
| 用户要求多个需求/任务“并行推进”“同时做”“开多个子任务/子 Agent” | 必须 |
| 当前会话准备同时推进 ≥2 个 requirement / bug / optimization / scenario-test | 必须 |
| Auto、长流程或控制面任务计划拆分为多个可执行 work item | 必须 |
| 只读搜索、Profile/记忆读取或互不写输出的验证并行 | N/A,按 `ConcurrencyPolicy` 执行 |
| 单一需求的普通串行实现 | N/A + skipReason |

## 输入契约

### ActiveWorkInventoryV1

| 字段 | 要求 |
|------|------|
| `activeRoot` | 当前绑定 active-root;不得跨项目混入 |
| `workItems[]` | 每个 requirement / bug / optimization / scenario-test / current task |
| `workItems[].id` | 稳定任务标识 |
| `workItems[].cpState` | CP1/CP2/CP3 confirmed/pending/stale |
| `workItems[].allowedPaths` | 当前 work item 被允许触碰的路径 |
| `workItems[].expectedWrites` | 预期写入路径、surface、writeKind、owner |
| `sourceRefs[]` | sessions、memory_status、SUMMARY、CP artifact、用户消息或报告锚点 |
| `freshness` | current / summary-only / stale / unknown |

信息不足时不得猜测独立,返回 `serial-required + insufficient-*`。

## 判定门禁

### RequirementIndependenceGate

| status | 判定条件 | 输出 |
|--------|----------|------|
| `independent` | `allowedPaths` 不重叠,未共享控制面写入,CP/记忆/report/ledger 单写者不竞争,且汇合协议完整 | `ParallelLaunchCardV1[]` |
| `weakly-coupled-lock` | 主路径独立,但共享 `skill-portfolio`、`validation-manifest`、`package-boundary`、`memory`、`report`、`ledger` 或 `host-deploy` 等单写者面 | lock map、singleWriter、checkpoint、serial merge order |
| `serial-required` | 共享同一源码文件、同一 CP/task state、同一 audit session,或无法证明写入面独立 | blocker reason、recommended order、needed evidence |

### SharedSurfaceLockMapV1

核心共享面:

- `active-root`
- `cp-state`
- `memory`
- `report`
- `ledger`
- `audit-session`
- `source-mutation`
- `package-boundary`
- `validation-manifest`
- `skill-portfolio`
- `host-deploy`

`source-mutation` 只有在路径不重叠且存在完整 merge protocol 时才可能进入 `independent`。其他共享控制面默认进入 `weakly-coupled-lock`,由主会话或指定 single writer 串行写入。

## ParallelLaunchCardV1

只有 `independent` 判定可以输出 LaunchCard。必填字段:

| 字段 | 要求 |
|------|------|
| `requirementId` | 对应 work item id |
| `displayName` | 用户可识别名称 |
| `activeRoot` | 绑定根 |
| `allowedPaths` | 非空路径数组 |
| `forbiddenSharedSurfaces` | 核心共享面数组 |
| `sessionPrompt` | 子会话可复制 prompt,必须包含 stop 条件 |
| `isolationMode` | `same-active-root-disjoint-paths` / `separate-worktree` / `separate-project-root` |
| `mergeProtocol` | `IntegrationMergeProtocolV1` |
| `validationRoute` | 至少一条验证命令或 selector |
| `stopCondition` | 触碰禁止面、dirty 外溢、验证失败或 CP stale 时停止 |

缺字段返回 `launch-card-invalid`;缺 merge protocol 返回 `integration-protocol-missing`。

## IntegrationMergeProtocolV1

| 字段 | 要求 |
|------|------|
| `mergeOrder` | 串行汇合顺序;不能“谁先完成谁合并” |
| `conflictChecks` | `git diff --name-only`、共享 manifest/portfolio/package/docs/Profile 检查 |
| `validationRoute` | changed/control-plane/profile-deploy/requirement artifacts 等 |
| `reportMemoryOwner` | 最终 report/memory 单写者 |
| `failureAction` | 冲突、缺验证或 dirty 混合归属时回 serial/CP |

## 宿主原生执行合同

### HostNativeCollaborationCapabilityV1

宿主能力必须由当前根 Agent 可观察的工具清单或直接调用结果生成,且至少绑定 `spawn`、`wait`、`interrupt` 的实际工具名、host/variant、支持模式、fanout/depth、`observedAt/expiresAt`、证据引用和 `capabilityDigest`。官方文档、AGENTS/Skill 文本、生成配置、其他宿主回执或工具名称猜测都不能作为 direct evidence。

能力缺失、过期、摘要不符或不支持所需隔离模式时,输出完整 serial fallback;不得询问用户重新确认,也不得因为“没有多 Agent”停止主任务。

### HostSubagentDispatchPlanV1

根 Agent 在派发前生成一份 immutable plan,至少绑定:

- 当前 `taskId/viewDigest/activeRoot`、`sourceHead/dirtyDigest`;
- work items、`RequirementIndependenceDecisionV1`、`SharedSurfaceLockMapV1` 与固定 merge order;
- 当前宿主 capability identity 与实际 operation bindings;
- fanout≤4、depth=1、time/cost gate;
- `serialFallback` 的同一 work graph、根单写者和 reason codes;
- `planDigest`。

只有预计串行耗时至少 120 秒、预计节省至少 60 秒、协调成本不超过总量 25%,且所有工作项和宿主证据满足条件时,plan 才能是 `parallel-eligible`。默认 fanout=3,实际值取 work item 数、宿主上限与 4 的最小值。

### AgentWorkLeaseV1

每个 child 必须有独立 lease,绑定 `planDigest/workItemId/attempt/mode/baseHead/dirtyDigest/activeRoot/isolationRoot/allowedRealpaths/forbiddenSharedSurfaces/issuedAt/expiresAt/cancelFence/leaseDigest`。`isolated-worktree-patch` 的 plan 只冻结相对 allowed paths;宿主创建独立 worktree 后,根 Agent 必须用其真实 `isolationRoot` 重新计算 lease 的绝对 allowed realpaths。缺 isolation root、与 root checkout 相同或路径逃逸时不签发 lease并自动串行。允许的模式只有:

| mode | 允许范围 |
|---|---|
| `read-only` | 只读分析,不得产生源码或正式产物写入 |
| `isolated-validation` | 只写该 operationId 独占的 `.tmp`,返回验证证据并精确清理 |
| `isolated-worktree-patch` | 仅宿主明确支持 separate worktree 时,在隔离 worktree 的 allowed realpaths 内形成 patch;不得直接写 root checkout |

lease 过期、attempt/plan/source/dirty 不符、cancel fence 改变或 root 已进入串行回退后,结果一律视为 late/quarantined;禁止恢复旧 lease。

### ChildAgentEvidenceV1 与 RootAgentIntegrationReceiptV1

child 返回的只是候选证据,至少绑定 host child identity、plan/lease/attempt、base/dirty、实际 changed realpaths、patch digest(如有)、validation receipts、完成时间和 owned resource cleanup。根 Agent 必须验证:

1. work item id 必须唯一;调用方与 child 提供的 realpath 必须原生为绝对路径,且全部落在 lease 允许根内,没有触碰禁止共享面;
2. read-only/isolated-validation 没有源码写入;worktree patch 有摘要和独立验证;
3. lease 未过期、cancel fence 未变化、root 尚未接管串行;
4. child 启动的 temp/worktree/service 已清理,无 owned residue;
5. 结果按冻结 merge order 串行复证、应用和 root retest。

任一项不成立时输出 `ChildAgentEvidenceValidationV1.classification=quarantined`,把该 work item 放入 `RootAgentIntegrationReceiptV1.serialTakeoverWorkItemIds`。`childCompletionIsTaskCompletion=false` 与 `RootAgentIntegrationReceiptV1.taskCompletion=false` 是强制不变量;最终 CP、memory、report、ledger、audit、package、manifest、portfolio、Profile 和 ECR 仍由根 Agent 写入。

### 取消、超时与清理

根 Agent 仅对本 plan 的 child 使用宿主 interrupt,并形成 `HostSubagentCancelFenceV1`。bounded wait 超时或派发失败后先改变 cancel fence,再将未接受 work items 交给根 Agent 串行;随后到达的旧结果不得应用。只清理本 plan 创建的 child、operation temp、worktree 和服务,禁止终止用户既有进程或删除其他任务产物。

## 执行步骤

1. 绑定唯一 active-root 和源码根;确认不是跨项目混读。
2. 有界读取 active work:任务目录、CP 状态、近期 memory/report 摘要、预期写入面。
3. 构建 `ActiveWorkInventoryV1`,记录 `sourceRefs` 和 `freshness`。
4. 执行 `SharedSurfaceLockMapV1` 和 `RequirementIndependenceGate`。
5. 对 `independent` 输出 `ParallelLaunchCardV1`;对 `weakly-coupled-lock` 输出锁、single writer 和检查点;对 `serial-required` 输出 blocker 与推荐顺序。
6. 读取当前宿主 collaboration tool inventory,形成并校验 `HostNativeCollaborationCapabilityV1`;不能直接观察则自动串行。
7. 生成 `HostSubagentDispatchPlanV1`;未达到 capability/isolation/time/cost gate 时按其中 `serialFallback` 执行同一 work graph。
8. 对 parallel-eligible 项生成 `AgentWorkLeaseV1`,由根 Agent 调用宿主 spawn/wait/interrupt;Hook、MCP、脚本和 child 不得代替根 Agent 调用这些模型工具。
9. 汇合时验证 `ChildAgentEvidenceV1`,形成 `RootAgentIntegrationReceiptV1`,再由根 Agent串行应用、重测、写 report/memory 并执行 ECR。

## 探针

| Probe | 场景 | 期望 |
|-------|------|------|
| PRB-01 | 两个需求只写各自 requirement 子目录 | `independent` + LaunchCard valid |
| PRB-02 | 需求目录独立但共享 portfolio/manifest | `weakly-coupled-lock` |
| PRB-03 | 两个任务修改同一 source file | `serial-required` |
| PRB-04 | LaunchCard 缺 required fields | `launch-card-invalid` |
| PRB-05 | 缺 merge protocol | `integration-protocol-missing` |
| PRB-06 | 出现 `allowParallelMutations` 或默认并行源码写入开关 | `policy-violation` |
| PRB-07 | capability absent/stale/docs-only 或缺 operation | plan=`serial-fallback`,work graph 保留 |
| PRB-08 | 低于 120s/60s/25% 收益门 | plan=`serial-fallback` |
| PRB-09 | source mutation 无 separate worktree | 串行,不退化为共享 checkout |
| PRB-10 | lease expiry、timeout、cancel 或 late result | `quarantined` + root serial takeover |
| PRB-11 | changed realpath、dirty、patch/test identity 漂移 | `quarantined`,不应用 |
| PRB-12 | child 全部完成 | 仍需 root merge/retest/ECR,不得直接完成任务 |

生产入口:`npm run test:requirement-parallel-orchestration`。

## 与其他 Skill 的关系

- `dev-default` / `fix-default`:实现前出现多任务、并行、子 Agent 或 worktree 信号时触发本 Skill。
- `execution-contract`:把 LaunchCard、dispatch plan、work lease、allowed paths、blocked scope、merge protocol 和 single-writer 约束纳入合同。
- `test-router`:以 `requirementParallelOrchestration` 领域绑定选择 `static + unit-integration`;控制面实现叠加 `profile-deploy`。
- `report` / `memory`:记录判定摘要和 LaunchCard 锚点;最终 report/memory 仍由主会话单写者写入。
- `source-consumer-sync`:消费者、validation manifest、portfolio、Profile、README/website 和部署副本同步由 Concept Sync Map 约束。

## 禁止

- 禁止把只读准备并行扩展为同 active-root 并行 source mutation。
- 禁止新增 `allowParallelMutations`、`mode=parallel` 或绕过 C07 单写者的配置。
- 禁止没有 `allowedPaths`、`forbiddenSharedSurfaces`、`mergeProtocol` 或 `validationRoute` 就启动子会话。
- 禁止子会话直接写共享 CP、memory、report、ledger、audit session、portfolio、validation manifest 或部署副本。
- 禁止把子会话完成等同于需求完成;必须串行汇合、验证和 ECR。
- 禁止把官方文档、Skill/AGENTS 文本、工具名猜测或其他宿主证据写成 current-host direct collaboration PASS。
- 禁止 capability/dispatch/timeout 失败后请求用户重复确认;必须自动执行 plan 中相同 work graph 的串行回退。
- 禁止 child 递归 spawn;首版 depth 固定为 1,fanout 不得超过 4。