[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71FA1DMY4RWG5PJ34RV05SK":3,"skill-same:01M71FA1DMY4RWG5PJ34RV05SK":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":54,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M71FA1DMY4RWG5PJ34RV05SK","openspec-apply-parallel",null,"Implement an OpenSpec change in parallel using multiple subagents (one per disjoint task group inside the same slice). Use when the slice's tasks.md has ≥2 task groups with disjoint write-paths AND >30 min of parallelisable work. For sequential implementation use openspec-apply-change instead.","Wizarck\u002Fai-playbook","Wizarck","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F23051550?v=4","01M71B3AAVR67GRWFV5ZXXZP31","arturo6ramirez","01M71F5FHXDSX3G2F52R1YS77J",6,"MIT","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fopenspec-apply-parallel\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"parallel","openspec","openspec apply","apply","openspec apply parallel","implement","one","use","slice","for","subagents","concepts","paths","playbook","write","release","change","work","tasks","when","2026-11-10 10:12:30",false,"---\nname: openspec-apply-parallel\ndescription: Implement an OpenSpec change in parallel using multiple subagents (one per disjoint task group inside the same slice). Use when the slice's tasks.md has ≥2 task groups with disjoint write-paths AND >30 min of parallelisable work. For sequential implementation use openspec-apply-change instead.\nlicense: MIT\nmetadata:\n  author: ai-playbook\n  version: \"1.0\"\n  spec: docs\u002Fconcepts\u002Frelease-management.md §6.6\n---\n\nImplement a multi-group OpenSpec change with parallel subagents.\n\n**Input**: Required: a change name. Optional: `--dry-run` to print the planned spawn matrix without actually spawning.\n\n## When to use this skill (gating questions)\n\nYou MUST answer YES to all four before invoking this skill. If any is NO, fall back to `\u002Fopsx:apply` (sequential):\n\n1. **Multi-group**: does `tasks.md` declare ≥2 task groups with explicit `**Owns:**` write-paths in their headers?\n2. **Disjoint**: are those write-paths non-overlapping? (no two groups touch the same directory subtree)\n3. **>30 min**: is the parallelisable work substantial? Rule of thumb: each group has ≥10 tasks, OR cumulative parallel work is ≥30 min wall-clock. Below that, recombination overhead (~10-15 min) wipes the saving.\n4. **Pre-allocated migration numbers**: if the slice creates DB migrations, are sequence numbers reserved per group in `tasks.md` (NOT chosen by subagents)?\n\nIf you can't answer YES to all four, the slice is mis-sliced for parallel execution. Either re-slice, OR run sequentially via `\u002Fopsx:apply`.\n\n## Steps\n\n### 1. Select the change\n\nIf a name is provided, use it. Otherwise:\n- Infer from conversation context if the user mentioned a change.\n- Auto-select if only one active change exists.\n- If ambiguous, run `openspec list --json` and ask the user to pick.\n\nAnnounce: \"Parallel-applying change: `\u003Cname>`. Spawn matrix below.\"\n\n### 2. Read the contract artifacts (no edits)\n\nRead in this order:\n- `openspec\u002Fchanges\u002F\u003Cchange-id>\u002Fproposal.md` — scope.\n- `openspec\u002Fchanges\u002F\u003Cchange-id>\u002Fdesign.md` — design decisions.\n- `openspec\u002Fchanges\u002F\u003Cchange-id>\u002Ftasks.md` — REQUIRED. Identify task groups + their write-path ownership headers.\n- `.ai-playbook\u002Fdocs\u002Fconcepts\u002Frelease-management.md` §6.6 — the contract you'll follow.\n\n### 3. Cross-check ownership (BEFORE spawning anything)\n\nBuild a table from the per-group `**Owns:**` declarations in `tasks.md`:\n\n| Group ID | Branch (`slice\u002F\u003Cid>--\u003Cgroup>`) | Owns paths | Reads (no edit) | Migration #s reserved |\n|---|---|---|---|---|\n| §2 IAM | `slice\u002Fmodule-1-ingredients-impl--iam` | `apps\u002Fapi\u002Fsrc\u002Fiam\u002F**`, `migrations\u002F0001-0004_*.ts` | `data-source.ts`, `app.module.ts` | 0001-0004 |\n| §3 Ingredients | `slice\u002Fmodule-1-ingredients-impl--ingredients` | `apps\u002Fapi\u002Fsrc\u002Fingredients\u002F**`, `migrations\u002F0005-0009_*.ts` | (same) | 0005-0009 |\n| ... | ... | ... | ... | ... |\n\nVerify:\n- **No two groups own the same path** (any subtree overlap → abort, fall back to sequential).\n- **Migration numbers are non-overlapping** (gaps OK; overlaps NOT OK).\n- **Shared files** (`app.module.ts`, `package.json`, `data-source.ts`, top-level `tsconfig`, `Makefile`, `pyproject.toml` runtime deps) are NOT owned by any group — flag them as \"main agent recombination work\".\n\nIf the cross-check fails, STOP and tell the user: \"tasks.md ownership is inconsistent (concrete reason). Re-slice via \u002Fopsx:propose, or sequentialize via \u002Fopsx:apply.\" Do NOT proceed.\n\n### 4. Pre-flight (per §6.5 + §6.6 pre-conditions)\n\n```bash\ngit fetch origin\ngit checkout slice\u002F\u003Cchange-id>\ngit rebase origin\u002Fmain   # abort on conflict; tell user to re-slice\n```\n\nFor each group, create the ephemeral branch (NOT pushed to origin) from `origin\u002Fmain`. Name the ref, never a shell variable from an earlier block: each Bash tool call is a fresh shell, so the variable would be empty and `git branch` would silently start from HEAD.\n\n```bash\ngit branch slice\u002F\u003Cchange-id>--\u003Cgroup-id> origin\u002Fmain\n```\n\n### 5. Print the spawn matrix (and if `--dry-run`, stop here)\n\nShow the user the table from step 3 + the planned subagent count. Confirm: \"Spawning N subagents. Continue?\" If they say no, stop. If `--dry-run`, stop after printing.\n\n### 6. Spawn subagents in parallel (single message, multiple Agent tool calls)\n\nFor each group, invoke the `Agent` tool with `isolation: \"worktree\"` and a scoped prompt. CRITICAL: all calls go in **one message** so they run concurrently. Each prompt MUST include:\n\n- The branch to commit on: `slice\u002F\u003Cchange-id>--\u003Cgroup-id>` (DO NOT push to origin).\n- The owned paths (write-allowed).\n- The read-only paths (consult, don't edit).\n- The reserved migration numbers (if any).\n- The relevant subset of `tasks.md` (their group only).\n- Return contract: \"When done, return your branch name + the SHA range you committed (`\u003Cbase-sha>..\u003Chead-sha>`).\"\n\nTemplate prompt for each subagent:\n\n```\nYou are implementing task group \u003Cgroup-id> of OpenSpec change \u003Cchange-id>.\n\n## Owned paths (write here only)\n\u003Cpaths from tasks.md>\n\n## Read-only paths (consult, don't edit)\n\u003Cpaths from tasks.md>\n\n## Reserved migration numbers\n\u003Cmigration #s>\n\n## Tasks\n\u003Cthe task group's tasks from tasks.md>\n\n## Contract\n1. Implement every task in the list. Mark each `- [ ]` → `- [x]` in tasks.md as you complete it.\n2. Commit ONLY to branch `slice\u002F\u003Cchange-id>--\u003Cgroup-id>`. Do NOT push to origin.\n3. Do NOT edit ANY file outside the owned paths.\n4. Run the slice's local tests scoped to your group (e.g. `pytest apps\u002Fapi\u002Ftests\u002F\u003Cgroup-dir>\u002F`) before each commit.\n5. When all tasks are done, return: branch name + SHA range (`\u003Cbase>..\u003Chead>`).\n\nIf you discover a task requires editing a shared file, STOP and return: \"blocked: needs \u003Cfile> edit (out of scope for this group)\". The main agent will handle shared files in recombination.\n```\n\n### 7. Await completion + collect results\n\nEach subagent returns its branch name + commit SHA range. Build the recombination plan:\n\n```\nRecombination order (apply in dependency order — leaf groups first, shared-state last):\n  1. \u003Cgroup-A> commits: \u003Csha>..\u003Csha>\n  2. \u003Cgroup-B> commits: \u003Csha>..\u003Csha>\n  ...\n  N. Main agent: shared file updates (app.module.ts, package.json, data-source.ts)\n```\n\nIf ANY subagent returned `blocked: ...`, stop. Show the user which group blocked + on what file. They decide: split the slice, or sequentialize.\n\n### 8. Recombine onto `slice\u002F\u003Cchange-id>` (sequential, main agent only)\n\n```bash\ngit checkout slice\u002F\u003Cchange-id>\n# Abort point for step 9, recorded before any cherry-pick. A ref, not a shell\n# variable: step 9 runs in a later Bash call (a fresh shell), and a ref also\n# survives context compaction. Run this block once: a second run would move\n# the abort point onto the half-recombined HEAD.\ngit branch -f slice\u002F\u003Cchange-id>--pre-recombine HEAD\nfor group in \u003Cordered groups>; do\n  git cherry-pick \u003Cgroup's-sha-range>\ndone\n# Now update shared files (the parts no subagent owned).\n# Examples: register modules in app.module.ts, aggregate deps in package.json,\n#           wire migrations into data-source.ts.\n```\n\n### 9. Run the FULL test suite (NOT scoped to a group)\n\n```bash\n# Slice-wide. Fails here = recombination conflict or untracked shared file.\npytest apps\u002Fapi\u002Ftests\u002F   # (or the equivalent for your stack)\n```\n\nIf the test fails:\n- **Conflict in shared files** → fix the shared-file edit (commit it on `slice\u002F\u003Cchange-id>`) and re-run the suite above. Do NOT re-run step 8's block: its cherry-picks are already applied, and its `git branch -f` would move the abort point onto this half-recombined HEAD.\n- **Two groups had implicit cross-dependency not caught in step 3** → ABORT recombination + fall back to sequential `\u002Fopsx:apply`. File a slicing-too-coarse retro for next time.\n  Aborting discards the recombined commits, so confirm with the user first, then return `slice\u002F\u003Cid>` to the `slice\u002F\u003Cid>--pre-recombine` ref recorded in step 8 — never to `origin\u002Fmain`, which would also drop every slice commit made before this parallel run:\n  ```bash\n  git cherry-pick --abort 2>\u002Fdev\u002Fnull || true\n  git reset --hard slice\u002F\u003Cchange-id>--pre-recombine\n  ```\n  The per-group branches `slice\u002F\u003Cid>--\u003Cgroup>` still hold the subagents' work. If the ref is missing, `git reflog slice\u002F\u003Cchange-id>` lists the branch's earlier tips; ask the user which one to return to.\n\n### 10. Push the slice branch + open PR\n\n```bash\ngit push -u origin slice\u002F\u003Cchange-id>\n```\n\nThen follow the standard `\u002Fopsx:apply` post-implementation flow: open PR, populate §4.5 AI-reviewer signoff, await reviews, gate F, archive.\n\n### 11. Clean up ephemeral branches\n\n```bash\nfor group in \u003Cgroups>; do\n  git branch -D slice\u002F\u003Cchange-id>--\u003Cgroup-id>   # local only; never were on origin\ndone\ngit branch -D slice\u002F\u003Cchange-id>--pre-recombine   # the step 8 abort point\n```\n\n## Anti-patterns (each is a goal_drift per agentic-failures.md §X)\n\n- **Subagent edits a file outside owned paths** → caught by main agent during cross-check at recombination time. If it slipped through, ABORT + fall back to sequential.\n- **Subagent pushes to a public branch** (`origin\u002Fslice\u002F...` or `origin\u002Ffeat\u002F...`) → reject the work. Branches MUST stay local until the main agent pushes the bundled `slice\u002F\u003Cchange-id>`.\n- **Main agent skips the cross-check step 3 and spawns with overlapping ownership** → race conditions in cherry-pick. Cross-check is non-negotiable.\n- **Migration numbers chosen by subagents instead of pre-allocated in step 3** → migration sequence collisions on recombination. Numbers come from the spec, not from subagent inference.\n\n## Hard limit\n\nThis pattern caps at the number of disjoint bounded contexts the slice covers. Most slices have 1–2 (use `\u002Fopsx:apply`); modules-as-foundation slices have 3–5; nothing in the playbook spawns >6 subagents inside one slice (above that, the slice is mis-sliced — see [runbook-bmad-openspec.md](..\u002F..\u002Fdocs\u002Fconcepts\u002Frunbook-bmad-openspec.md) §2.2).\n\n## When this skill is the wrong tool\n\nFall back to `\u002Fopsx:apply` (sequential) when:\n- The slice has 1 task group, OR\n- Task groups are TDD-tight (interface → impl → consumer cannot be parallelised), OR\n- Each group is \u003C10 tasks (overhead exceeds saving), OR\n- Cross-checks in step 3 reveal overlapping ownership.\n\n## References\n\n- `docs\u002Fconcepts\u002Frelease-management.md` §6.6 — the contract this skill implements.\n- `docs\u002Fconcepts\u002Frunbook-bmad-openspec.md` §3.8 — pointer to §6.6.\n- `skills\u002Fopenspec-apply-change\u002FSKILL.md` — the sequential cousin.\n","Implement a multi-group OpenSpec change with parallel subagents.\n\n**Input**: Required: a change name. Optional: `--dry-run` to print the planned spawn matrix without actually spawning.\n\n## When to use this skill (gating questions)\n\nYou MUST answer YES to all four before invoking this skill. If any is NO, fall back to `\u002Fopsx:apply` (sequential):\n\n1. **Multi-group**: does `tasks.md` declare ≥2 task groups with explicit `**Owns:**` write-paths in their headers?\n2. **Disjoint**: are those write-paths non-overlapping? (no two groups touch the same directory subtree)\n3. **>30 min**: is the parallelisable work substantial? Rule of thumb: each group has ≥10 tasks, OR cumulative parallel work is ≥30 min wall-clock. Below that, recombination overhead (~10-15 min) wipes the saving.\n4. **Pre-allocated migration numbers**: if the slice creates DB migrations, are sequence numbers reserved per group in `tasks.md` (NOT chosen by subagents)?\n\nIf you can't answer YES to all four, the slice is mis-sliced for parallel execution. Either re-slice, OR run sequentially via `\u002Fopsx:apply`.\n\n## Steps\n\n### 1. Select the change\n\nIf a name is provided, use it. Otherwise:\n- Infer from conversation context if the user mentioned a change.\n- Auto-select if only one active change exists.\n- If ambiguous, run `openspec list --json` and ask the user to pick.\n\nAnnounce: \"Parallel-applying change: `\u003Cname>`. Spawn matrix below.\"\n\n### 2. Read the contract artifacts (no edits)\n\nRead in this order:\n- `openspec\u002Fchanges\u002F\u003Cchange-id>\u002Fproposal.md` — scope.\n- `openspec\u002Fchanges\u002F\u003Cchange-id>\u002Fdesign.md` — design decisions.\n- `openspec\u002Fchanges\u002F\u003Cchange-id>\u002Ftasks.md` — REQUIRED. Identify task groups + their write-path ownership headers.\n- `.ai-playbook\u002Fdocs\u002Fconcepts\u002Frelease-management.md` §6.6 — the contract you'll follow.\n\n### 3. Cross-check ownership (BEFORE spawning anything)\n\nBuild a table from the per-group `**Owns:**` declarations in `tasks.md`:\n\n| Group ID | Branch (`slice\u002F\u003Cid>--\u003Cgroup>`) | Owns paths | Reads (no edit) | Migration #s reserved |\n|---|---|---|---|---|\n| §2 IAM | `slice\u002Fmodule-1-ingredients-impl--iam` | `apps\u002Fapi\u002Fsrc\u002Fiam\u002F**`, `migrations\u002F0001-0004_*.ts` | `data-source.ts`, `app.module.ts` | 0001-0004 |\n| §3 Ingredients | `slice\u002Fmodule-1-ingredients-impl--ingredients` | `apps\u002Fapi\u002Fsrc\u002Fingredients\u002F**`, `migrations\u002F0005-0009_*.ts` | (same) | 0005-0009 |\n| ... | ... | ... | ... | ... |\n\nVerify:\n- **No two groups own the same path** (any subtree overlap → abort, fall back to sequential).\n- **Migration numbers are non-overlapping** (gaps OK; overlaps NOT OK).\n- **Shared files** (`app.module.ts`, `package.json`, `data-source.ts`, top-level `tsconfig`, `Makefile`, `pyproject.toml` runtime deps) are NOT owned by any group — flag them as \"main agent recombination work\".\n\nIf the cross-check fails, STOP and tell the user: \"tasks.md ownership is inconsistent (concrete reason). Re-slice via \u002Fopsx:propose, or sequentialize via \u002Fopsx:apply.\" Do NOT proceed.\n\n### 4. Pre-flight (per §6.5 + §6.6 pre-conditions)\n\n```bash\ngit fetch origin\ngit checkout slice\u002F\u003Cchange-id>\ngit rebase origin\u002Fmain   # abort on conflict; tell user to re-slice\n```\n\nFor each group, create the ephemeral branch (NOT pushed to origin) from `origin\u002Fmain`. Name the ref, never a shell variable from an earlier block: each Bash tool call is a fresh shell, so the variable would be empty and `git branch` would silently start from HEAD.\n\n```bash\ngit branch slice\u002F\u003Cchange-id>--\u003Cgroup-id> origin\u002Fmain\n```\n\n### 5. Print the spawn matrix (and if `--dry-run`, stop here)\n\nShow the user the table from step 3 + the planned subagent count. Confirm: \"Spawning N subagents. Continue?\" If they say no, stop. If `--dry-run`, stop after printing.\n\n### 6. Spawn subagents in parallel (single message, multiple Agent tool calls)\n\nFor each group, invoke the `Agent` tool with `isolation: \"worktree\"` and a scoped prompt. CRITICAL: all calls go in **one message** so they run concurrently. Each prompt MUST include:\n\n- The branch to commit on: `slice\u002F\u003Cchange-id>--\u003Cgroup-id>` (DO NOT push to origin).\n- The owned paths (write-allowed).\n- The read-only paths (consult, don't edit).\n- The reserved migration numbers (if any).\n- The relevant subset of `tasks.md` (their group only).\n- Return contract: \"When done, return your branch name + the SHA range you committed (`\u003Cbase-sha>..\u003Chead-sha>`).\"\n\nTemplate prompt for each subagent:\n\n```\nYou are implementing task group \u003Cgroup-id> of OpenSpec change \u003Cchange-id>.\n\n## Owned paths (write here only)\n\u003Cpaths from tasks.md>\n\n## Read-only paths (consult, don't edit)\n\u003Cpaths from tasks.md>\n\n## Reserved migration numbers\n\u003Cmigration #s>\n\n## Tasks\n\u003Cthe task group's tasks from tasks.md>\n\n## Contract\n1. Implement every task in the list. Mark each `- [ ]` → `- [x]` in tasks.md as you complete it.\n2. Commit ONLY to branch `slice\u002F\u003Cchange-id>--\u003Cgroup-id>`. Do NOT push to origin.\n3. Do NOT edit ANY file outside the owned paths.\n4. Run the slice's local tests scoped to your group (e.g. `pytest apps\u002Fapi\u002Ftests\u002F\u003Cgroup-dir>\u002F`) before each commit.\n5. When all tasks are done, return: branch name + SHA range (`\u003Cbase>..\u003Chead>`).\n\nIf you discover a task requires editing a shared file, STOP and return: \"blocked: needs \u003Cfile> edit (out of scope for this group)\". The main agent will handle shared files in recombination.\n```\n\n### 7. Await completion + collect results\n\nEach subagent returns its branch name + commit SHA range. Build the recombination plan:\n\n```\nRecombination order (apply in dependency order — leaf groups first, shared-state last):\n  1. \u003Cgroup-A> commits: \u003Csha>..\u003Csha>\n  2. \u003Cgroup-B> commits: \u003Csha>..\u003Csha>\n  ...\n  N. Main agent: shared file updates (app.module.ts, package.json, data-source.ts)\n```\n\nIf ANY subagent returned `blocked: ...`, stop. Show the user which group blocked + on what file. They decide: split the slice, or sequentialize.\n\n### 8. Recombine onto `slice\u002F\u003Cchange-id>` (sequential, main agent only)\n\n```bash\ngit checkout slice\u002F\u003Cchange-id>\n# Abort point for step 9, recorded before any cherry-pick. A ref, not a shell\n# variable: step 9 runs in a later Bash call (a fresh shell), and a ref also\n# survives context compaction. Run this block once: a second run would move\n# the abort point onto the half-recombined HEAD.\ngit branch -f slice\u002F\u003Cchange-id>--pre-recombine HEAD\nfor group in \u003Cordered groups>; do\n  git cherry-pick \u003Cgroup's-sha-range>\ndone\n# Now update shared files (the parts no subagent owned).\n# Examples: register modules in app.module.ts, aggregate deps in package.json,\n#           wire migrations into data-source.ts.\n```\n\n### 9. Run the FULL test suite (NOT scoped to a group)\n\n```bash\n# Slice-wide. Fails here = recombination conflict or untracked shared file.\npytest apps\u002Fapi\u002Ftests\u002F   # (or the equivalent for your stack)\n```\n\nIf the test fails:\n- **Conflict in shared files** → fix the shared-file edit (commit it on `slice\u002F\u003Cchange-id>`) and re-run the suite above. Do NOT re-run step 8's block: its cherry-picks are already applied, and its `git branch -f` would move the abort point onto this half-recombined HEAD.\n- **Two groups had implicit cross-dependency not caught in step 3** → ABORT recombination + fall back to sequential `\u002Fopsx:apply`. File a slicing-too-coarse retro for next time.\n  Aborting discards the recombined commits, so confirm with the user first, then return `slice\u002F\u003Cid>` to the `slice\u002F\u003Cid>--pre-recombine` ref recorded in step 8 — never to `origin\u002Fmain`, which would also drop every slice commit made before this parallel run:\n  ```bash\n  git cherry-pick --abort 2>\u002Fdev\u002Fnull || true\n  git reset --hard slice\u002F\u003Cchange-id>--pre-recombine\n  ```\n  The per-group branches `slice\u002F\u003Cid>--\u003Cgroup>` still hold the subagents' work. If the ref is missing, `git reflog slice\u002F\u003Cchange-id>` lists the branch's earlier tips; ask the user which one to return to.\n\n### 10. Push the slice branch + open PR\n\n```bash\ngit push -u origin slice\u002F\u003Cchange-id>\n```\n\nThen follow the standard `\u002Fopsx:apply` post-implementation flow: open PR, populate §4.5 AI-reviewer signoff, await reviews, gate F, archive.\n\n### 11. Clean up ephemeral branches\n\n```bash\nfor group in \u003Cgroups>; do\n  git branch -D slice\u002F\u003Cchange-id>--\u003Cgroup-id>   # local only; never were on origin\ndone\ngit branch -D slice\u002F\u003Cchange-id>--pre-recombine   # the step 8 abort point\n```\n\n## Anti-patterns (each is a goal_drift per agentic-failures.md §X)\n\n- **Subagent edits a file outside owned paths** → caught by main agent during cross-check at recombination time. If it slipped through, ABORT + fall back to sequential.\n- **Subagent pushes to a public branch** (`origin\u002Fslice\u002F...` or `origin\u002Ffeat\u002F...`) → reject the work. Branches MUST stay local until the main agent pushes the bundled `slice\u002F\u003Cchange-id>`.\n- **Main agent skips the cross-check step 3 and spawns with overlapping ownership** → race conditions in cherry-pick. Cross-check is non-negotiable.\n- **Migration numbers chosen by subagents instead of pre-allocated in step 3** → migration sequence collisions on recombination. Numbers come from the spec, not from subagent inference.\n\n## Hard limit\n\nThis pattern caps at the number of disjoint bounded contexts the slice covers. Most slices have 1–2 (use `\u002Fopsx:apply`); modules-as-foundation slices have 3–5; nothing in the playbook spawns >6 subagents inside one slice (above that, the slice is mis-sliced — see [runbook-bmad-openspec.md](..\u002F..\u002Fdocs\u002Fconcepts\u002Frunbook-bmad-openspec.md) §2.2).\n\n## When this skill is the wrong tool\n\nFall back to `\u002Fopsx:apply` (sequential) when:\n- The slice has 1 task group, OR\n- Task groups are TDD-tight (interface → impl → consumer cannot be parallelised), OR\n- Each group is \u003C10 tasks (overhead exceeds saving), OR\n- Cross-checks in step 3 reveal overlapping ownership.\n\n## References\n\n- `docs\u002Fconcepts\u002Frelease-management.md` §6.6 — the contract this skill implements.\n- `docs\u002Fconcepts\u002Frunbook-bmad-openspec.md` §3.8 — pointer to §6.6.\n- `skills\u002Fopenspec-apply-change\u002FSKILL.md` — the sequential cousin.\n",{"name":5,"license":15,"metadata":44,"description":7},{"spec":45,"author":46,"version":47},"docs\u002Fconcepts\u002Frelease-management.md §6.6","ai-playbook","1.0","main","08fe7aa0f06bc1a3f592ec82360e46b854846968","skills\u002Fopenspec-apply-parallel",1,"https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook","https:\u002F\u002Fgithub.com\u002FWizarck","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Framirezarturo\u002F","Geek by birth, with not much to say but plenty to talk about.","2026-11-09 19:34:21",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add Wizarck\u002Fai-playbook --skill openspec-apply-parallel",{"tool":63,"command":64},"bunx","bunx skills add Wizarck\u002Fai-playbook --skill openspec-apply-parallel",{"tool":66,"command":67},"pnpm","pnpm dlx skills add Wizarck\u002Fai-playbook --skill openspec-apply-parallel","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fopenspec-apply-parallel\u002FSKILL.md",true,[],[72,95,114,137,156,169],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":39},"01M71FATTWS9W3BME3S94SA1QR","sweep","Use when the user wants to find code that has quietly stopped being used — types \u002Fsweep, asks for a \"dead code sweep\", \"repo entropy\", \"what can we delete\", \"orphan files\", \"unused code\", or asks to review a sweep ledger. Adjudicates candidates a deterministic scanner already produced; it never deletes anything and never re-derives findings from raw source. Pairs with ponytail, which gates what gets written rather than what rots.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fsweep\u002FSKILL.md",[],[74,79,80,81,82,83,28,84,85,86,87,88,89,26,38,90,91,92,93,94],"deterministic","which","never","entropy","types","repo","re","ponytail","orphan","files","unused","code","can","gates","review","candidates",{"skillNo":96,"name":86,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":39},"01M71FAQKVDA209G7G5NMY9H1E","Use when the user wants the laziest solution that actually works — types \u002Fponytail, says \"be lazy\", \"lazy mode\", \"simplest solution\", \"minimal solution\", \"yagni\", \"do less\", or \"shortest path\", or complains about over-engineering, bloat, boilerplate, or unnecessary dependencies. Supports intensity levels lite, full, ultra (default). Pairs with caveman, which compresses prose, not code.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fponytail\u002FSKILL.md",[],[86,101,102,80,103,83,104,105,106,107,26,38,90,108,109,110,111,112,32,113],"notice","do","lazy","mode","default","minimal","intensity","with","yagni","about","dependencies","2026","boilerplate",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":125,"publishedAt":39},"01M71FAMS250NKNF1PET9KNBBV","ponytail-review","Use when the user wants a code review focused exclusively on over-engineering — says \"review for over-engineering\", \"what can we delete\", \"is this over-engineered\", \"simplify review\", or invokes \u002Fponytail-review. Complements correctness\u002Fsecurity review; this one only hunts complexity in the current diff. Gated by the ponytail review_ponytail component.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fponytail-review\u002FSKILL.md",[120],{"categoryNo":121,"categoryName":122,"taxonomyType":123,"taxonomyTypeDesc":124},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",[126,86,93,127,128,28,129,130,26,38,131,132,90,25,91,133,134,135,136,32],"ponytail review","complexity","diff","code review","only","simplify","correctness","delete","component","security review","gated",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":39},"01M71FAG53ZPCSWE272P6S9JFN","ponytail-debt","Use when the user wants to harvest every `ponytail:` comment in the codebase into a tracked debt ledger — says \"ponytail debt\", \"\u002Fponytail-debt\", \"what did ponytail defer\", \"list the shortcuts\", \"ponytail ledger\", or \"what did we mark to do later\". One-shot report, changes nothing. Gated by the ponytail debt_ponytail component.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fponytail-debt\u002FSKILL.md",[],[144,86,145,146,102,147,148,134,149,150,136,151,152,32,153,154,26,38,155,25],"ponytail debt","debt","shortcuts","mark","to do","changes","later","report","codebase","harvest","list","ledger",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":39},"01M71FACJW88WCS2JGX3MQ3KV9","ponytail-audit","Use when the user wants a whole-repo audit for over-engineering — says \"audit this codebase\", \"audit for over-engineering\", \"what can I delete from this repo\", \"find bloat\", or invokes \u002Fponytail-audit. Like ponytail-review but scans the entire tree, not a diff. One-shot report, applies no fixes. Gated by the ponytail audit_ponytail component.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fponytail-audit\u002FSKILL.md",[],[163,86,164,165,128,166,28,84,26,38,167,25,91,93,133,134,136,168,151,152],"ponytail audit","audit","tree","fixes","entire","find",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":39},"01M71FA9THHXDX79PQTJ9CZX9E","openspec-propose","Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to build and get a complete proposal with design, specs, and tasks ready for implementation.","https:\u002F\u002Fgithub.com\u002FWizarck\u002Fai-playbook\u002Fblob\u002Fmain\u002Fskills\u002Fopenspec-propose\u002FSKILL.md",[],[20,176,108,177,178,35,179,180,181,28,182,183,184,185,186,187,26,38,188,37],"openspec propose","ready","proposal","cli","get","build","complete","design","new","implementation","generated","describe","artifacts"]