ワンクリックで
issue-pipeline
Autonomous end-to-end issue processing — triage, plan, review, implement, review, fix, PR
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Autonomous end-to-end issue processing — triage, plan, review, implement, review, fix, PR
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Use when reviewing PRs for architecture contract compliance in Ansible Jane. Checks layer discipline, interface contracts, module boundaries, state management, DI patterns, and naming conventions against docs/architecture/service-contracts.md. Auto-loads relevant Kotlin/Android skills based on changed files.
Use this skill to integrate the Jetpack Compose Styles API into an Android project. This skill guides you through upgrading dependencies, setting up component themes, making custom components styleable, and migrating existing layout properties to use unified styles. Migrate custom design system components, replace hard coded parameters with Style attributes, and use Modifier.styleable for interaction states.
Compose and Compose Multiplatform expert for UI development across Android, Desktop, iOS, and Web. Use whenever the user mentions Compose APIs (@Composable, remember, LaunchedEffect, NavHost, MaterialTheme, LazyColumn, Modifier, recomposition), Compose Multiplatform (commonMain, expect/actual, Res.*, ComposeUIViewController, UIKitView, ComposeViewport), Android TV (tv-material, D-pad, focus, Carousel), Material 3 motion, atomic design systems, design-to-code workflows, Paging 3, or navigation. Activates Review Mode on GitHub PR URLs and review phrases ("review this PR", "what's wrong with this"). Auto-detects Compose projects on session_start. Backed by actual androidx/androidx and JetBrains/compose-multiplatform-core source receipts. See "## When this skill applies" in SKILL.md for the full trigger surface.
Platform abstraction decision-making for Amethyst KMP project. Guides when to abstract vs keep platform-specific, source set placement (commonMain, jvmAndroid, platform-specific), expect/actual patterns. Covers primary targets (Android, JVM/Desktop, iOS — all mature) with web/wasm as possible future targets. Integrates with gradle-expert for dependency issues. Triggers on: abstraction decisions ("should I share this?"), source set placement questions, expect/actual creation, build.gradle.kts work, incorrect placement detection, KMP dependency suggestions.
Use when writing or reviewing Jetpack Compose motion: visibility enter/exit, animating one property toward a target, color or size transitions, multiple properties from one state, switching composable content, or choosing between AnimatedVisibility, animate*AsState, rememberTransition, AnimatedContent, and Crossfade.
Use when writing or reviewing Jetpack Compose code with LaunchedEffect, DisposableEffect, SideEffect, rememberCoroutineScope, rememberUpdatedState, snapshotFlow, snackbar, navigation, focus requests, analytics, or event Flow collection.
| name | issue-pipeline |
| description | Autonomous end-to-end issue processing — triage, plan, review, implement, review, fix, PR |
Autonomous issue execution skill. Takes GitHub issue numbers, processes each end-to-end: assess, plan, plan review, implement, implementation review, fix, PR. The only human checkpoint is merge approval.
/issue-pipeline #NNN #NNN .../issue-pipeline #372 #369 #365
/issue-pipeline 372 369 365
Input: one or more GitHub issue numbers (with or without # prefix).
Output per issue: an open PR ready for merge (or a skipped/failed issue with an explanatory comment).
Output at completion: a pipeline run summary listing all PRs, merge order, skips, and failures.
No implementation without triage, plan, and plan review first.
Every issue passes through all phases in order. No skipping phases. No "this one is simple enough to just code." The pipeline exists because humans underestimate complexity — the phases catch what intuition misses.
pipeline/in-progress labelPhase 0 runs once. Phases 1-9 run per issue. Phases 10-11 run once after all PRs are created.
Runs once at pipeline start. Produces an execution plan that governs the rest of the run.
Discover and load project context dynamically. Do NOT hardcode any file paths — each step checks if the source exists before reading.
Always-load sources (read each if it exists):
CLAUDE.md in the project root~/.claude/CLAUDE.md (non-project-specific sections: git workflow, attribution, temp files, PR rules)find . -path "*/architecture/*" -name "*.md" -not -path "*/node_modules/*" — read each file found.github/workflows/*.yml, .gitlab-ci.yml, Jenkinsfile, .circleci/config.yml. Read whichever exists.gradle/libs.versions.toml, build.gradle.kts (root), settings.gradle.kts, package.json, requirements.txt, Cargo.toml, go.mod, pyproject.toml. Read whichever exist.gradle.properties, .env.example, Makefile. Read whichever exist.scripts/test*, test-related entries in Makefile or package.json scripts. Record discovered test commands..ruff.toml, .eslintrc*, detekt.yml, .editorconfig, ktlint in CI, biome.json. Record discovered lint commands.find . -path "*/skills/*/SKILL.md" -not -path "*/node_modules/*" — read first 10 lines of each to build a skill index (name, description, when-to-use).MEMORY.md exists (in project root or ~/.claude/projects/*/memory/), read the index.git branch --show-currentgit log --oneline -10gh pr list --state open (or equivalent GitHub MCP call)find . -name "src" -type d -not -path "*/node_modules/*" -not -path "*/.gradle/*" | head -20 — map modules and source sets.Store all loaded context as the foundation context object. This is passed to every subagent in subsequent phases.
For each issue number in the input list:
gh issue view <N> --json title,body,labels,state,number or GitHub MCP issue_read.Scan each issue body for dependency references using these patterns:
Hard dependencies (creates a DAG edge):
depends on #(\d+)blocked by #(\d+)after #(\d+)prerequisite.*#(\d+)must land.*#(\d+)Structural references (creates a DAG edge):
spun out from #(\d+)part of #(\d+)sub-issue of #(\d+)Supersedes (informational, no edge):
replaces #(\d+)supersedes #(\d+)Parent tracking (informational, no edge):
tracks #(\d+)All pattern matching is case-insensitive.
For each detected reference:
| Classification | Condition | Effect |
|---|---|---|
| Internal dep | Both issues are in the input list | Creates a DAG edge (referenced issue must complete first) |
| External blocker | Referenced issue is NOT in the input list AND is still OPEN | Marks current issue as externally blocked |
| Resolved | Referenced issue is CLOSED | No constraint |
To check if a referenced issue is open/closed: gh issue view <N> --json state or GitHub MCP.
For each issue, check:
gh pr list --search "closes #N" (or equivalent). Filter results to PRs whose head branch contains -pipeline-issue-. Only pipeline-created PRs trigger a skip. Non-pipeline PRs (from manual work) are ignored.closed, skip.pipeline/awaiting-merge label, skip (handled in a previous run).For each skip, record the reason.
From internal dependencies (Step 3), build a directed acyclic graph:
Cycle detection: run a topological sort. If a cycle is detected, report the cycle (list the issue numbers involved) and stop the pipeline. Do not process any issues.
Heuristic for which chains to execute first:
Within a priority tier, shorter chains go first.
Evaluate each chain and assign a risk level:
| Risk | Criteria |
|---|---|
| LOW | 1-2 issues, distinct files, trivial/small scope |
| MEDIUM | 3+ issues, some file overlap, or medium scope |
| HIGH | 4+ issues, significant file overlap, large scope, or tightly coupled changes |
Factors:
Produce and display the execution plan:
Execution Plan:
Foundation context: loaded (N sources, ~M tokens)
Chains:
Chain 1: [#365, #345] — base: main, risk: LOW
Chain 2: [#310, #311, #312] — base: main, risk: MEDIUM
Standalone: [#306, #293, #340, #214]
Skipped:
#372: existing pipeline PR #394
#102: externally blocked by #99 (open)
Each chain starts from main. Within a chain, each issue branches from the previous issue's branch (stacked PRs). Standalone issues branch directly from main.
For projects with many issues, dispatch Phase 0 Steps 1-8 to a triage subagent using the prompt template at triage-prompt.md. Pass it:
The main agent loads foundation context (Step 0) directly, then delegates the rest to the triage subagent.
After Phase 0 produces the execution plan, process issues in execution order:
For each issue:
TaskCreate with subject Pipeline: #NNN — <issue title>.in_progress.completed.completed.completed.The task list is the pipeline's state tracker. At any point, the task list shows which issues are done, in progress, or pending.
main (or the project's default branch).main.Runs at the start of each issue. Verifies the issue is still actionable against the current codebase.
Read the full issue body, not just the Phase 0 summary. Identify:
For each file, class, or API mentioned in the issue body:
find or grep for it)If the issue is in a chain and branches from a previous issue's branch, verify against that branch (not main).
Classify the issue:
| Scope | Criteria |
|---|---|
| Trivial | Single file, <50 lines changed, no new tests needed |
| Small | 2-5 files, <200 lines, straightforward tests |
| Medium | 5-15 files, new module or significant refactor |
| Large | 15+ files, architectural changes, multiple test types |
Match anticipated changed file paths against the skill index built in Phase 0 (Step 0.9). For each skill in the index, check if its description or when-to-use keywords relate to the files this issue will touch.
Do NOT hardcode file-pattern-to-skill mappings. The skill index is dynamic — use the name and description from each skill's frontmatter to determine relevance.
Record all matched skills for loading in Phase 3 (planning) and Phase 5 (implementation).
Three sources of additional context:
Keyword matching:
docs/superpowers/specs/, docs/superpowers/plans/, or equivalent.File path extraction:
src/..., app/..., *.kt, *.py, backtick-quoted paths.Recently merged context:
PR #NNN, #NNN merged, landed in #NNN), read their diffs via gh pr diff <N> to understand what recently changed.Check each risk factor:
| Factor | Check |
|---|---|
| Security-sensitive code | Does this touch encryption, auth, credential storage, network config? |
| Public API surface | Does this change interfaces, exported functions, or API contracts? |
| CI/CD configuration | Does this modify build scripts, workflows, or deploy config? |
| Existing tests | Could this break existing tests? Check for tests covering modified files. |
Identify related issues referenced in the body that are NOT in the pipeline input list. Record them explicitly as out of scope to prevent implementation drift.
Examples:
These exclusions are passed to implementation subagents so they don't accidentally address related-but-separate work.
Assessment:
codebase_still_matches: true/false
scope: trivial | small | medium | large
files_to_modify: [list of file paths]
skills_needed: [list of skill names]
on_demand_context_loaded: [list of additional docs loaded]
risks: [list of identified risks]
blockers_found: [list of unexpected blockers]
out_of_scope: [list of related issue numbers explicitly excluded]
If codebase_still_matches = false and the divergence is significant (the core premise of the issue is invalid):
Minor divergences (e.g., a file was renamed but the concept is the same) do not trigger a skip — note the change and adapt.
Leaves a trail on the GitHub issue showing the pipeline assessed it.
Post a comment on the GitHub issue using the template at templates/assessment-comment.md. Fill in all {{placeholder}} fields from the assessment output.
Use gh issue comment <N> --body "<comment>" or GitHub MCP add_issue_comment.
Only if factual inaccuracies were found during assessment (e.g., a file path changed, a class was renamed). Append a note at the end of the issue body — do NOT rewrite the original content.
If nothing needs correction, skip this step.
Add the pipeline/in-progress label to the issue.
#0E8A16, description: "Issue being processed by the pipeline").gh issue edit <N> --add-label "pipeline/in-progress" or GitHub MCP.Creates a detailed implementation plan before any code is written.
Read the full content of every SKILL.md identified in Phase 1 Step 4 (skill mapping). These inform the plan's approach — the plan should follow the patterns and conventions documented in the matched skills.
If your environment has a writing-plans skill, invoke it. Otherwise, generate a plan covering all of the following areas:
File-by-file changes:
New files:
Test strategy:
Build/CI changes:
Migration/compatibility:
Write the plan to a file:
docs/superpowers/plans/YYYY-MM-DD-issue-NNN-<slug>.md<slug> is derived from the issue title (lowercase, hyphens, no special characters, max 40 chars).If the docs/superpowers/plans/ directory doesn't exist, use whatever plans directory exists in the project, or create one at a sensible location.
Cross-check the plan against the Phase 1 assessment:
files_to_modify list?
out_of_scope list? If so, remove that work from the plan.If the plan reveals the issue is Large scope (15+ files, multiple concerns, or architectural changes), decompose it into multiple sequential sub-PRs instead of one giant PR.
When to decompose:
How to decompose:
If writing-plans was used in Step 2, its scope check may have already split the plan into sub-plans (one per subsystem). Each sub-plan becomes a sub-PR.
If the plan was not already split, decompose it manually:
Effect on pipeline execution:
The decomposed tasks form an internal chain for this issue — the same chain semantics from Phase 0 apply:
pipeline-issue-NNN-task-T-<slug>Part of #NNN in the PR bodyCloses #NNNUpdate the plan file to reflect the decomposition — mark each task's boundary clearly with the files it touches and its acceptance criteria.
If the scope is Trivial, Small, or Medium: proceed as a single PR. The plan review will catch any overreach.
Reviews the implementation plan against architecture rules and project conventions before any code is written. Catching mistakes here is far cheaper than after implementation.
Dispatch a subagent using the prompt template at plan-reviewer-prompt.md. Pass it:
The reviewer produces structured findings:
Finding:
severity: critical | warning | info
plan_section: "<section heading where the issue was found>"
rule: "<rule name and source>"
description: "<what's wrong>"
suggestion: "<how to fix it>"
| Findings | Action |
|---|---|
| Critical findings > 0 | Revise the plan to address each critical finding. Re-submit for review. Max 2 revision attempts. |
| Still critical after 2 revisions | Chain failure — the issue's requirements may be incompatible with the architecture. Stop the chain. |
| Warnings only | Note them and carry forward to implementation. Phase 6 will re-check the actual code. |
| No findings | Proceed to Phase 5. |
When revising the plan:
Executes the reviewed plan in an isolated working copy.
Create an isolated workspace for this issue:
EnterWorktree with name pipeline-issue-NNN-<slug>. This creates a branch named worktree-pipeline-issue-NNN-<slug> automatically. Do not attempt to rename the branch — push it as-is.git worktree add .claude/worktrees/pipeline-issue-NNN-<slug> -b worktree-pipeline-issue-NNN-<slug> or equivalent.Branch from the appropriate base:
main (or project default branch).main.Branch naming convention: worktree-pipeline-issue-NNN-<slug> (the worktree- prefix is added automatically by EnterWorktree)
Read the full content of every SKILL.md identified in Phase 1 Step 4. Pass the skill content to implementation subagents as context.
Based on the scope estimated in Phase 1:
Trivial or Small scope:
implementer-prompt.md.Medium or Large scope:
Each subagent must follow the plan exactly — no improvisation, no scope creep. If the plan is unclear, the subagent should ask (or flag the ambiguity) rather than guess.
Execute test commands discovered in Phase 0 (Step 0.7). Do NOT hardcode test commands — use whatever the project provides.
Common patterns to look for in foundation context:
scripts/test-all.sh, make test, npm test)./gradlew test, cargo test, pytest)If the project uses Gradle in a sandbox environment, add --no-daemon to all Gradle commands.
Run the tests that cover the modified files. If test infrastructure is minimal, run the full suite.
Execute lint commands discovered in Phase 0 (Step 0.8). Do NOT hardcode lint commands.
--fix flags).If no linters were discovered in Phase 0, skip this step.
| Outcome | Action |
|---|---|
| All tests and linters pass | Proceed to Phase 6 (Implementation Review) |
| Tests or linters fail | Enter retry loop (max 2 attempts) |
Retry loop:
main.Reviews the actual code changes after implementation. Four independent review angles run in parallel, each by a separate subagent. This is distinct from Phase 4 (plan review) — here we review the code, not the plan.
Get the diff of all changes since branching:
git diff $(git merge-base HEAD <base-branch>)..HEAD
Where <base-branch> is main (for first in chain / standalone) or the previous issue's branch (for subsequent in chain).
Before dispatching reviewers, load the project's core review skills. These are skills that apply to every review regardless of which files changed.
Check the foundation context for a project-specific architecture review skill (e.g., pr-architecture-review). If it documents "always load" or "core" skills, load all of them. These typically cover foundational patterns like concurrency, state management, multiplatform abstractions, and DI — areas where violations are subtle and file-pattern matching alone won't catch them.
Pass these core skills to the architecture and skill-compliance reviewers alongside the dynamically matched skills from Phase 1.
Dispatch 4 subagents in parallel, each using the prompt template at reviewer-prompt.md with a different review_angle:
| # | Angle | What It Checks |
|---|---|---|
| 1 | architecture | Layer violations, module boundary crossings, interface contracts, state exposure, DI rules, naming, file placement, error handling contracts |
| 2 | code-quality | Bugs, logic errors, edge cases, code duplication, API misuse, missing error handling at system boundaries, file size and complexity |
| 3 | security | Hardcoded secrets, insecure storage, missing HTTPS enforcement, credential handling, injection vectors, deprecated security APIs |
| 4 | skill-compliance | Changed files checked against loaded skills — framework patterns, test patterns, state management, KMP rules |
Token budget optimization: for Trivial or Small scope issues, reduce to 2 reviewers (architecture + code-quality only). Security and skill-compliance add value mainly for Medium/Large changes.
Each subagent receives:
Each reviewer produces structured findings:
Finding:
severity: critical | warning | info
file: path/to/File.kt
line: 42
rule: "<rule name and source>"
description: "<what's wrong>"
suggestion: "<how to fix it>"
After all reviewers complete:
| Findings | Action |
|---|---|
| Critical findings > 0 | Must fix in Phase 7 |
| Warnings only | Fix each warning, or explicitly justify it as an intentional design decision in the PR description. No silent skips. |
| Info only | Non-actionable — include in PR description for reviewer awareness, no action required |
| No findings | Skip Phase 7, proceed directly to Phase 8 |
Addresses review findings and verifies fixes don't introduce regressions.
For each critical finding, in order:
For each warning, choose one:
Every warning must be resolved one way or the other. "Too hard to fix" is not a justification — if the fix is genuinely too large for this PR, create a follow-up issue and reference it.
Run the full test suite using the commands from Phase 0 discovery. Also re-run linters. This catches regressions introduced by the fixes.
Run ONLY the review angles that produced critical findings, ONLY on the files that were changed during the fix phase. This is a targeted re-check, not a full re-review.
Use the same reviewer-prompt.md template but scope the diff to just the fix commits.
| Outcome | Action |
|---|---|
| No remaining criticals | Proceed to Phase 8 |
| New criticals introduced by fixes | Retry — this counts as attempt 2 of 2 |
| Still criticals after 2nd attempt | Chain failure — stop the chain, comment on the issue with the unresolvable findings |
Phase 7 must NOT change the scope of the implementation. Fixes address specific review findings — they don't redesign the approach. If a review finding reveals that the approach is fundamentally wrong, that's a chain failure, not a redesign opportunity.
Packages the work into a reviewable PR with full documentation.
If there are uncommitted changes, commit them. Use the conventional commit format:
<type>: <imperative description> (#NNN)
<optional body explaining why, not what>
Assisted-by: <model name> <noreply@anthropic.com>
Types: feat, fix, test, chore, perf, refactor, docs.
Use the project's attribution trailer format (check project instructions). If none specified, use Assisted-by:.
git push -u origin HEAD
The PR target depends on position in chain:
main (or project default branch).main.PR title format: <type>: <description> (#NNN)
Use gh pr create or GitHub MCP create_pull_request.
Use the template at templates/pr-body.md. Fill in all {{placeholder}} fields from:
Post a comment on the PR using the template at templates/review-summary.md. This consolidates all review rounds into one comment, satisfying the rule: "Before merging any PR, ALWAYS post a review summary comment."
Use gh pr comment <N> --body "<comment>" or GitHub MCP add_issue_comment (with PR number as issue number).
Implementation PR: #<pr_number>pipeline/in-progress label with pipeline/awaiting-merge.
gh issue edit <N> --remove-label "pipeline/in-progress"gh issue edit <N> --add-label "pipeline/awaiting-merge"pipeline/awaiting-merge doesn't exist, create it (color: #1D76DB, description: "Pipeline PR created, awaiting human merge").Runs after each issue completes (or is skipped/failed), regardless of outcome.
In Claude Code: use ExitWorktree with action: "keep" for PRs, action: "remove" for skips/failures.
In other environments: git worktree remove <path> for skips/failures.
| Outcome | Label |
|---|---|
| PR created | pipeline/awaiting-merge (already set in Phase 8) |
| Skipped | pipeline/skipped (color: #E4E669, description: "Skipped by pipeline") |
| Failed | pipeline/failed (color: #D93F0B, description: "Pipeline processing failed") |
Create labels if they don't exist.
Append to the pipeline run summary (held in memory, reported at completion):
Issue #NNN: PR #XXX created (chain C, position P/T)
Issue #NNN: SKIPPED — <reason>
Issue #NNN: FAILED — <phase>, <error summary>
Check the execution plan:
main.The human checkpoint. After all per-issue phases complete and all PRs are created, the pipeline presents the full list of PRs for human review before any merging begins.
Pipeline complete. PRs ready for review:
Standalone: #410 (test: add ToolExecutor tests), #411 (chore: migrate strings), #412 (chore: Gradle lockfiles)
Merge order: #410 → #411 → #412
Review each PR, then approve sequential merge? (y/n)
For each PR:
The human either:
Downstream PRs in the same chain become invalid. The human closes them and can re-invoke the pipeline with the remaining issues as a fresh batch.
Proceed to Phase 11 (Sequential Merge) with the approved list of PRs.
Orchestrates the sequential auto-merge workflow to avoid wasted CI cycles caused by branch protection rules.
Branch protection rules ("Require branches to be up to date before merging") mean that when a PR merges into main, main's HEAD moves and all other open PRs are now "behind" — even if they touch completely different files. GitHub requires the PR branch to include the latest main commit before merging, so CI can validate the combined state.
Updating multiple PRs at once is wasteful: PR A merges → main moves → PR B (just updated) is behind again → needs another update + CI cycle. Sequential is the only way to avoid throwaway CI runs.
Use MCP GitHub tools for all merge operations — gh CLI may be unavailable in sandbox mode.
For the list of approved PRs, in merge order:
First PR:
a. Merge via MCP merge_pull_request with merge_method: "squash".
b. After merge completes, sync local state:
git checkout main && git pull
For each subsequent PR:
a. Verify the previous PR merged (MCP pull_request_read with method: "get", check state is MERGED).
b. Update the next PR's branch via MCP update_pull_request_branch. This rebases the PR onto the new main HEAD.
c. Wait for CI to pass on the updated branch (poll with MCP pull_request_read with method: "get_check_runs" every ~60 seconds until all checks succeed).
d. Merge via MCP merge_pull_request with merge_method: "squash".
e. Sync local state: git checkout main && git pull
f. Repeat for the next PR.
main.If a PR's CI doesn't pass within 30 minutes of the branch update, log a warning and skip to the next PR. The stuck PR retains pipeline/awaiting-merge for human attention.
The human can intervene at any point during the merge sequence:
pull_request_read) and skips itAfter all approved PRs are merged, clean up worktrees that were kept alive during Phase 9:
For each merged PR:
ExitWorktree with action: "remove", or git worktree remove <path>.main — the worktree is no longer needed.For PRs that were skipped during merge (CI timeout, human intervention):
When all issues are processed, output the completion report using the template at templates/completion-report.md.
The report includes:
Display the report to the user. This is the final output of the pipeline.
| Failure Type | When | Action |
|---|---|---|
| Issue not clean | Phase 1 (assess) | Skip, comment on issue, move to next |
| Codebase diverged | Phase 1 (assess) | Skip, comment on issue explaining what changed, move to next |
| Plan fails architecture review | Phase 4 (plan review) | Revise plan up to 2 times. If still failing → chain failure |
| Tests fail | Phase 5 (implement) | Retry fix 2 times. If still failing → chain failure |
| Linters fail (unfixable) | Phase 5 (implement) | Retry fix 2 times. If still failing → chain failure |
| Critical review findings unfixable | Phase 7 (fix) | Retry fix 2 times. If still failing → chain failure |
| Large scope discovered | Phase 3 (plan) | Decompose into sub-PRs via Step 5. Each task follows Phases 5-8 independently |
When a chain failure occurs:
pipeline/failed on the failed issue, pipeline/skipped on remaining chain issues.main. Chain failures do not affect other chains.In stacked PR chains, a problem in issue N affects all downstream PRs (N+1, N+2, ...). This is accepted by design. Mitigations:
| Scenario | Handling |
|---|---|
| Issue is already closed | Skip, log "already closed" |
| Issue has open PR from outside the pipeline | Proceed — only PRs with -pipeline-issue- in the branch name trigger a skip |
| Two issues modify the same file | If they reference each other, DAG detection catches it. If not, the second issue sees the first's changes (stacked branch) and adapts |
| Input list contains duplicate issue numbers | Deduplicate in Phase 0 Step 1 |
| Input list contains issues from different repos | Error — pipeline operates on a single repo. Report and stop |
| CI fails on the PR after creation | Human checks CI during Phase 10 review. Phase 11 waits for CI to pass after branch updates before merging |
| Cycle detected in dependency DAG | Report the cycle (list issue numbers) and stop. Do not process any issues |
| All issues in the list are skipped | Report "No actionable issues found" and exit with the completion report listing all skips |
A full pipeline run for many issues may exceed a single session's context window. The skill is re-invocable — invoke it again with the same issue list and it picks up where it left off.
When invoked, Phase 0 always runs fresh. The cleanness check (Step 4) detects prior state:
gh pr list --search "closes #N" finds a PR with -pipeline-issue- in the head branch → skip this issue.pipeline/awaiting-merge label — issue was handled in a previous run → skip.pipeline/in-progress label — a previous run started but didn't finish this issue. Remove the label and re-process from Phase 1.pipeline/failed label — a previous run failed on this issue. Remove the label and re-process (the underlying cause may have been fixed).pipeline/skipped label — a previous run skipped this issue. Re-evaluate skip conditions — if the skip condition is resolved, process the issue; otherwise skip again.This means: the user can safely re-invoke /issue-pipeline #100 #101 #102 #103 #104 after a partial first run. Issues that already have PRs are skipped. Issues that failed or were interrupted are re-processed.
Phase 6 (4 parallel review agents) is the most token-intensive step. For Trivial or Small scope issues, reduce to 2 reviewers (architecture + code-quality only) to conserve tokens.
If running in a sandboxed environment:
--no-daemon to all Gradle commands.Each active worktree consumes disk space. The pipeline creates one per issue and only cleans up skipped/failed ones. For large batches (10+ issues), monitor disk usage.
Phase 11 handles sequential merging with branch updates (update_pull_request_branch) to avoid merge conflicts. If the human bypasses Phase 11 and merges PRs out of order, remaining PRs may need manual rebasing.