Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions docs/migrations/plan-issue-cli-skill-mapping.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Plan-Issue CLI Skill Mapping

This matrix maps the legacy `plan-issue-delivery-loop.sh` command surface to Rust CLI entrypoints.

| Legacy Command | New Command | Scope |
| --- | --- | --- |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh start-plan` | `plan-issue start-plan` | Live GitHub-backed plan bootstrap (`1 plan = 1 issue`). |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh start-sprint` | `plan-issue start-sprint` | Live sprint kickoff and task-row sync. |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh ready-sprint` | `plan-issue ready-sprint` | Live sprint-ready review request comment. |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh accept-sprint` | `plan-issue accept-sprint` | Live sprint acceptance gate (merged PR check + `Status=done` sync). |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh ready-plan` | `plan-issue ready-plan` | Live final plan review handoff. |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh close-plan` | `plan-issue close-plan` | Live final close gate + worktree cleanup enforcement. |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh status-plan` | `plan-issue status-plan` | Live plan issue status snapshot. |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh status-sprint` | `plan-issue status-plan` | Legacy alias removal: use `status-plan` in Rust CLI. |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh build-task-spec` | `plan-issue build-task-spec` | Build sprint-scoped task-spec TSV from plan. |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh build-plan-task-spec` | `plan-issue build-plan-task-spec` | Build plan-scoped task-spec TSV (all sprints). |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh cleanup-worktrees` | `plan-issue cleanup-worktrees` | Enforce cleanup of issue-assigned task worktrees. |
| `$AGENT_HOME/skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh multi-sprint-guide` | `plan-issue multi-sprint-guide` | Print repeated multi-sprint orchestration flow. |

`plan-issue-local` supports the same subcommands as `plan-issue` for local-first rehearsal (typically with `--dry-run`).

## Inventory

### Directly Impacted Skills/Docs

- `skills/automation/plan-issue-delivery-loop/SKILL.md`
- `skills/automation/issue-delivery-loop/SKILL.md`
- `skills/workflows/issue/issue-subagent-pr/SKILL.md`
- `skills/workflows/issue/issue-pr-review/SKILL.md`
- `docs/runbooks/skills/TOOLING_INDEX_V2.md`

### Transitive Dependencies Relevant To This Migration

- `skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh` (legacy wrapper being replaced by Rust binaries).
- `skills/automation/issue-delivery-loop/scripts/manage_issue_delivery_loop.sh` (status/review/close orchestration contract wrapped by plan-level commands).
- `skills/workflows/issue/issue-subagent-pr/scripts/manage_issue_subagent_pr.sh` (subagent worktree/PR execution path used by sprint orchestration).
- `skills/workflows/issue/issue-pr-review/scripts/manage_issue_pr_review.sh` (main-agent review/merge decisions used before accept/close gates).
- PATH tooling used by impacted skills: `plan-tooling`, `gh`.
10 changes: 5 additions & 5 deletions docs/plans/duck-issue-loop-test-plan.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Plan: Duck plan for plan issue delivery loop

## Overview
This plan creates disposable test deliverables under `tests/issues/duck-loop/` to validate `plan-issue-delivery-loop` orchestration using three distinct execution profiles. The three sprints intentionally cover both supported grouping styles and avoid ambiguous naming between task summaries and grouping behavior.
This plan creates disposable test deliverables under `tests/issues/duck-loop/` to validate `plan-issue` / `plan-issue-local` orchestration using three distinct execution profiles. The three sprints intentionally cover both supported grouping styles and avoid ambiguous naming between task summaries and grouping behavior.

## Scope
- In scope:
Expand All @@ -18,7 +18,7 @@ This plan creates disposable test deliverables under `tests/issues/duck-loop/` t

## Assumptions
1. `plan-tooling` and `python3` are available on `PATH`.
2. `skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh` is executable in this repo.
2. `plan-issue` and `plan-issue-local` are available on `PATH` in this repo.
3. GitHub approval/merge gates are validated when the orchestration workflow runs, not in this planning step.

## Success criteria
Expand All @@ -34,7 +34,7 @@ This plan creates disposable test deliverables under `tests/issues/duck-loop/` t
**Demo/Validation**:
- Command(s):
- `plan-tooling validate --file docs/plans/duck-issue-loop-test-plan.md`
- `skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh build-task-spec --plan docs/plans/duck-issue-loop-test-plan.md --sprint 1 --pr-grouping per-sprint --task-spec-out "$AGENT_HOME/out/plan-issue-delivery-loop/duck-s1-per-sprint.tsv"`
- `plan-issue-local build-task-spec --plan docs/plans/duck-issue-loop-test-plan.md --sprint 1 --pr-grouping per-sprint --task-spec-out "$AGENT_HOME/out/plan-issue-delivery-loop/duck-s1-per-sprint.tsv" --dry-run`
- `python3 - <<'PY'\nimport csv\nfrom pathlib import Path\nrows=list(csv.reader(Path("$AGENT_HOME/out/plan-issue-delivery-loop/duck-s1-per-sprint.tsv").open(), delimiter="\t"))\ndata=[r for r in rows if r and not r[0].startswith("#")]\ngroups={r[6] for r in data}\nassert len(groups)==1, groups\nprint("ok")\nPY`
- Verify:
- Sprint 1 task-spec file exists under `$AGENT_HOME/out/plan-issue-delivery-loop/`.
Expand Down Expand Up @@ -90,7 +90,7 @@ This plan creates disposable test deliverables under `tests/issues/duck-loop/` t
**Goal**: Validate `group` mode with one isolated task plus one shared two-task group.
**Demo/Validation**:
- Command(s):
- `skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh build-task-spec --plan docs/plans/duck-issue-loop-test-plan.md --sprint 2 --pr-grouping group --pr-group S2T1=s2-isolated --pr-group S2T2=s2-shared --pr-group S2T3=s2-shared --task-spec-out "$AGENT_HOME/out/plan-issue-delivery-loop/duck-s2-group-shared.tsv"`
- `plan-issue-local build-task-spec --plan docs/plans/duck-issue-loop-test-plan.md --sprint 2 --pr-grouping group --pr-group S2T1=s2-isolated --pr-group S2T2=s2-shared --pr-group S2T3=s2-shared --task-spec-out "$AGENT_HOME/out/plan-issue-delivery-loop/duck-s2-group-shared.tsv" --dry-run`
- `python3 - <<'PY'\nimport csv\nfrom pathlib import Path\nrows=list(csv.reader(Path("$AGENT_HOME/out/plan-issue-delivery-loop/duck-s2-group-shared.tsv").open(), delimiter="\t"))\ndata=[r for r in rows if r and not r[0].startswith("#")]\ngroups=[r[6] for r in data]\nassert groups.count("s2-shared")==2, groups\nassert groups.count("s2-isolated")==1, groups\nprint("ok")\nPY`
- Verify:
- Sprint 2 group output has one isolated group (`s2-isolated`) and one shared pair (`s2-shared`).
Expand Down Expand Up @@ -142,7 +142,7 @@ This plan creates disposable test deliverables under `tests/issues/duck-loop/` t
**Goal**: Validate `group` mode where every task is explicitly isolated (no shared pair), and finalize cleanup manifest indexing.
**Demo/Validation**:
- Command(s):
- `skills/automation/plan-issue-delivery-loop/scripts/plan-issue-delivery-loop.sh build-task-spec --plan docs/plans/duck-issue-loop-test-plan.md --sprint 3 --pr-grouping group --pr-group S3T1=s3-a --pr-group S3T2=s3-b --pr-group S3T3=s3-c --task-spec-out "$AGENT_HOME/out/plan-issue-delivery-loop/duck-s3-group-isolated.tsv"`
- `plan-issue-local build-task-spec --plan docs/plans/duck-issue-loop-test-plan.md --sprint 3 --pr-grouping group --pr-group S3T1=s3-a --pr-group S3T2=s3-b --pr-group S3T3=s3-c --task-spec-out "$AGENT_HOME/out/plan-issue-delivery-loop/duck-s3-group-isolated.tsv" --dry-run`
- `python3 - <<'PY'\nimport csv\nfrom pathlib import Path\nrows=list(csv.reader(Path("$AGENT_HOME/out/plan-issue-delivery-loop/duck-s3-group-isolated.tsv").open(), delimiter="\t"))\ndata=[r for r in rows if r and not r[0].startswith("#")]\ngroups=[r[6] for r in data]\nassert len(set(groups))==3, groups\nprint("ok")\nPY`
- Verify:
- Sprint 3 group output has three unique groups (`s3-a`, `s3-b`, `s3-c`).
Expand Down
Loading
Loading