dispatch-resolve-wave
Dispatch file-disjoint issue_resolver worktrees for the next resolve wave.
Skill by sazlin
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/sazlin-dispatch-resolve-wave
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/dispatch-resolve-wave
What's inside
- Skill name
dispatch-resolve-wave- Description
- Dispatch file-disjoint issue_resolver worktrees for the next resolve wave. Use when review_orchestrator is in the Review resolve loop, or when the user says /dispatch_resolve_wave. Do not implement fixes.
- License
- MIT
- Metadata
- loadout.sha: 49eb9bd · loadout.source: skills/dispatch-resolve-wave/SKILL.md · loadout.managed: true
- Instructions
- 121 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (3)
- SKILL.md
- partition_waves.py · scripts/
- prepare_wave_worktrees.py · scripts/
SKILL.md (first lines)
# Dispatch resolve wave
Launch one `issue_resolver` per file-disjoint open task in the next wave,
**in one turn, in parallel**. Do not implement fixes. Worktree git (add,
cherry-pick, prune) is owned by `dispatch-resolve-wave` via
`prepare_wave_worktrees.py`. The orchestrator keeps mark-done,
log-progress, and is the only `git push` of `origin/<pr-head>`.
## When to use
- `review_orchestrator` is in the Review resolve loop
- The user asks for `/dispatch_resolve_wave`
**Do not use** to implement fixes, mark tasks done, or merge.
## Steps
1. Run `python3 .claude/skills/dispatch-resolve-wave/scripts/partition_waves.py <tasks_path>`.
If `.claude/` is missing, use
`skills/dispatch-resolve-wave/scripts/partition_waves.py`. The CLI prints
`{"wave": ["TASK-001", ...]}`. Wave cap 4 comes from the script. Never
exceed the script's wave.
2. Create one worktree and task branch per wave task from current PR HEAD.
Do not `git checkout` the task branch in the PR worktree.
Run `python3 .claude/skills/dispatch-resolve-wave/scripts/prepare_wave_worktrees.py add --pr-head <ref> <wave-json>`
(or `skills/dispatch-resolve-wave/scripts/prepare_wave_worktrees.py` if
`.claude/` is missing). Pass the PR head and wave JSON as argv to that
helper only — never interpolate PR head, task ids, or SHAs into a shell
git command. The helper validates the ref with `git check-ref-format
--normalize`, validates each id with `^TASK-[0-9]+$`, maps `/` in the
branch name to a single `.worktrees/` path segment, and calls
`git worktree add` / `git branch` via `subprocess.run` list argv (no
`shell=True`). It reuses leftover dirs (`git reset --hard` to PR HEAD),
falls back to `/tmp/pr-resolve-<TASK-ID>`, and creates the task branch
without moving PR HEAD when both add sites fail. Use the JSON
`worktree` / `branch` fields; do not assemble those paths yourself.
Helper `add` JSON `isolated: true` means the checkout exists; it does not copy
`tasks_path` — the caller must copy it. After each successful
`git worktree add` (including the `/tmp` fallback) and after
reuse/reset, copy the frozen gitignored
`tasks_path` from the PR worktree into that worktree (same filename)
so `test -f <worktree>/<tasks_path>` is true and the bytes match the
PR-worktree manifest. A resolver restricted to the worktree must read
the assigned task without consulting the PR worktree. If copy is
skipped, pass an absolute PR-worktree `tasks_path` and say so in the
brief.
3. If any wave task still has no isolated dir after reuse/reset and both
add sites, do not stop the whole wave. Dispatch `issue_resolver` with
`resolve-next-task` for every task whose worktree succeeded. Leave ids
with no isolated dir `[open]` (undispatched). Sequential one-task mode
is not used solely because of leftovers.
4. Otherwise — only when every wave task has an isolated checkout —
dispatch **all wave resolvers in one turn**, in parallel (same protocol
as panel). Issue the calls in a **single** response. One call per
response is a protocol failure.
5. Each brief: `issue_resolver`, `resolve-next-task`, `tasks_path`,
`task_id`, worktree path, task branch, PR head branch name. Git cwd is
the worktree; `tasks_path` is the copied file in that worktree or the
absolute PR-worktree manifest path named in this brief. "Do not push PR
head. Do not edit the tasks file or REVIEW_HISTORY.md."
6. After all return: in TASK id order, run
`python3 .../prepare_wave_worktrees.py cherry-pick --task-branch <branch> [--] <sha>`
for each resolver (the helper `git fetch`es the task branch, then
`git cherry-pick` with the SHA after `--`). Success per task id is
resolver `status=ok` plus a commit SHA that applies cleanly.
Missing SHA, blocked resolver, or status other than `ok`: skip
cherry-pick (no placeholder SHA); leave that id `[open]`. On any
non-zero cherry-pick (conflict, bad or missing object) the helper runs
`git cherry-pick --abort`; leave that id `[open]`, continue with the
next wave task. HEAD must not remain in a cherry-pick or merge state.
Do not push PR head. Undispatched fallback tasks stay `[open]`. Never
hand-build `git cherry-pick` / `git fetch` lines from PR head or SHA
strings.
7. After cherry-picks (success, conflict abort, or missing sha) and after
every wave (success, conflict, or dispatch failure), always run
`python3 .../prepare_wave_worktrees.py prune --pr-head <ref> <wave-json>`.
The helper runs `git worktree remove --force` on the wave paths,
`git worktree prune`, deletes local `<pr-head>-<TASK-ID>` branches, and
removes leftover `/tmp/pr-resolve-<TASK-ID>` dirs that are not
registered worktrees. Recreate them on the next attempt. On
abort-if-merged and on resolve-loop exit, prune any remaining
`.worktrees/<pr-head>-*` paths and matching `/tmp` fallbacks
(worktree/branch/tmp cleanup, not only child cancel/archive) before
emitting JSON. Never hand-build those git lines from PR head strings.
8. After cherry-picks, stop. Never push `origin/<pr-head>` in this skill.
Worktree git (add, cherry-pick, prune) is owned by `dispatch-resolve-wave`
via `prepare_wave_worktrees.py`. The orchestrator keeps mark-done,
log-progress, and is the only `git push` of `origin/<pr-head>` — marks
`[done]` only the ids whose cherry-pick landed cleanly (not the whole wave),
follows `log-progress`, and is the only `git push` of `origin/<pr-head>` —
and only after at least one clean pick and only if HEAD is not in a
cherry-pick or merge state.
## Resolve-wave retry cap
A wave with no successful cherry-pick, or a task that conflicted / returned
`blocked` / produced no sha, is one failed attempt for those task ids.
Cap retries at **3** (short backoff), same as other failure classes.
Conflicted or blocked ids are not immediately eligible for another
identical parallel wave in the same run beyond this cap. After the cap,
leave those tasks `[open]` and stop this skill; the orchestrator exits the
resolve loop with `open_task_ids` and continues panel/verify/risk. Do not
dispatch a fourth identical parallel wave for the same ids in this run.
## Harness
- Cursor: one `Task` call per wave task in a single message (`issue_resolver`).
- Claude Code: one Agent call per wave task using `issue_resolver`.
## Guardrails
- Never push `origin/<pr-head>` (orchestrator pushes after successful picks)
- Never rebase
- Never force-push
- Never open a second PR
- Never exceed the script's wave
- Never implement fixes
- Never interpolate PR head refs or commit SHAs into a shell git command;
run `prepare_wave_worktrees.py` insteadFrom sazlin/loadout, MIT.
More from sazlin/loadout
- 0.570score
anti-sleep
sazlin
Use when running long local tasks on a Mac or MacBook, waiting on CI, polling other systems, or when the user says /anti-sleep; also when idle sleep, lid…
SkillAFreshness: AClaude Code +9 - 0.570score
dedupe-and-write-tasks
sazlin
Dedupe panel or verifier issues and rewrite the hashed tasks file with 1-3 similar issues per task.
SkillAFreshness: AClaude Code +9 - 0.570score
generating-readme
sazlin
Use when generating, rewriting, or refreshing README.md for this loadout repository; when the Available loadouts catalog may be stale after loadout YAML…
SkillAFreshness: AClaude Code +9 - 0.570score
log-progress
sazlin
Append one entry to REVIEW_HISTORY.md.
SkillAFreshness: AClaude Code +9 - 0.565score
dispatch-verifiers
sazlin
Run project VERIFIERS.md claims sequentially as true/false checks via the verifier agent.
SkillAFreshness: AClaude Code +9 - 0.565score
dispatch-panel-review
sazlin
Dispatch the four dimensional PR reviewers in parallel.
SkillAFreshness: AClaude Code +9 - 0.565score
create-implementation-plan
sazlin
Use when implementation_orchestrator starts planning, or when an autonomous factory needs a fresh implementation_planner to write IMPLEMENTATION_PLAN.md from…
SkillAFreshness: AClaude Code +9 - 0.565score
build-implementation-plan
sazlin
Use when implementation_orchestrator starts building, or when an autonomous factory needs a fresh implementation_builder to implement IMPLEMENTATION_PLAN.md.
SkillAFreshness: AClaude Code +9 - 0.565score
decisions
sazlin
Use when the user says /decisions, asks to list, enumerate, or recap decisions made this session, or wants a chronological grok-list of agent choices.
SkillAFreshness: AClaude Code +9 - 0.565score
learn
sazlin
Use only when the user says /learn or asks to capture this session's agent mistakes as project learnings in AGENTS.md.
SkillAFreshness: AClaude Code +9 - 0.565score
github-upload-media-to-pr
sazlin
Use when the user explicitly asked to attach screenshots, images, recordings, or videos to a GitHub pull request — for example "put the screenshot in the PR"…
SkillAFreshness: AClaude Code +9 - 0.544score
make-readme
sazlin
Use when the user asks to write, generate, improve, rewrite, review, fix, or score a README; when a repo has no README or a weak one; or when they invoke…
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 1
- Open issues
- 0
- Last commit (this folder)
- Oct 2, 2026 (25 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/sazlin/loadout
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from sazlin
- 0.570score
anti-sleep
sazlin
Use when running long local tasks on a Mac or MacBook, waiting on CI, polling other systems, or when the user says /anti-sleep; also when idle sleep, lid…
SkillAFreshness: AClaude Code +9 - 0.570score
dedupe-and-write-tasks
sazlin
Dedupe panel or verifier issues and rewrite the hashed tasks file with 1-3 similar issues per task.
SkillAFreshness: AClaude Code +9 - 0.570score
generating-readme
sazlin
Use when generating, rewriting, or refreshing README.md for this loadout repository; when the Available loadouts catalog may be stale after loadout YAML…
SkillAFreshness: AClaude Code +9 - 0.570score
log-progress
sazlin
Append one entry to REVIEW_HISTORY.md.
SkillAFreshness: AClaude Code +9 - 0.565score
build-implementation-plan
sazlin
Use when implementation_orchestrator starts building, or when an autonomous factory needs a fresh implementation_builder to implement IMPLEMENTATION_PLAN.md.
SkillAFreshness: AClaude Code +9 - 0.565score
decisions
sazlin
Use when the user says /decisions, asks to list, enumerate, or recap decisions made this session, or wants a chronological grok-list of agent choices.
SkillAFreshness: AClaude Code +9
Cite this page
dispatch-resolve-wave skill. Agent Mart. https://agentmart.dev/skills/sazlin-dispatch-resolve-wave (last updated 2026-10-24)