wave-based-dispatch
Sequential-wave dispatch for WO chains where output of one feeds the next, shared locks, or shared files prevent fan-out. Use when planning dependent multi-WO landings.
- License 许可
- MIT
- 最近更新
- 2026-11-13
- Stars
- ★ 60
- Forks
- 6
01 前言 Front Matter
- name
- wave-based-dispatch
- model
- opus
- created
- 1777075200000
- modified
- 1791331200000
- reviewed
- 1780704000000
- description
- Sequential-wave dispatch for WO chains where output of one feeds the next, shared locks, or shared files prevent fan-out. Use when planning dependent multi-WO landings.
- allowed-tools
- Read, Glob, Grep, TodoWrite
- compatibility
- claude-code
- user-invocable
- false
02 资源文件 9
- 参考文档references/architecture_patterns.md1.3 KB
- 参考文档references/first-wave-gates.md3.7 KB
- 参考文档references/plan-review.md1.7 KB
- 参考文档references/stacked-wave-prs.md1.5 KB
- 参考文档references/system_design_workflows.md1.1 KB
- 参考文档references/tech_decision_guide.md1014 B
- 脚本scripts/architecture_diagram_generator.py1.9 KB
- 脚本scripts/dependency_analyzer.py1.9 KB
- 脚本scripts/project_architect.py1.9 KB
03 SKILL.md 正文
Wave-Based Dispatch
The agent-side dispatch discipline for sequential WO chains. Same pillars as
parallel-agent-dispatch — disjoint ownership, return contracts, shared-file
exclusion — but the gates between waves are different from the gates
inside a wave. This skill is those between-wave gates.
When to Use This Skill
| Use wave-based dispatch when… | Use parallel-agent-dispatch alone when… |
Use exclusive-lock-dispatch when… |
|---|---|---|
| A later WO needs a file, type, or API the earlier WO defines | All WOs operate on disjoint, lock-free scopes | One tool holds an exclusive lock and N agents need its outputs |
| A research probe (Ghidra decomp, spec experiment, API trace) gates downstream scope | Scope is fully known up front | Lock-holder is slow enough to amortise via pre-dump |
| Two candidate agents would both modify the same shared manifest / tracker / build file | Shared-file exclusion list is small and stable | Pre-computed artefacts can replace re-running the lock holder |
| A bug surfaced during orchestrator-apply needs the same context as the dispatched agent | Issues are recoverable inside a single wave | Lock contention is the only sequencing reason |
The three skills compose: each wave is itself a parallel-agent-dispatch,
lock-holding waves use exclusive-lock-dispatch for the pre-dump, and
this skill covers the boundary between waves.
Picking Wave-Based Over Parallel
| Trigger | Why parallel fails | Wave-based response |
|---|---|---|
| Dependency chain — WO-B imports types from WO-A | WO-B's brief is stale before WO-A lands; the agent guesses or stalls | WO-A in wave 1, WO-B in wave 2 referencing WO-A's landed paths |
| Shared lock — Ghidra project, taskwarrior bulk modify, single-writer cache | Second concurrent invocation fails with a lock error; orchestrator burns a turn diagnosing | Lock holder runs alone in its wave; downstream waves read pre-dumped artefacts |
Orchestrator-edit contention — multiple agents return verbatim patches against the same CMakeLists.txt / justfile / manifest |
Last-writer-wins silently loses the earlier edit; merge conflicts pile up at apply time | Stage edits to those files between waves so the orchestrator applies them serially |
If any trigger matches, the work belongs in waves. Inside each wave,
parallel-agent-dispatch still applies as the per-agent contract.
The Research-Before-WO Gate
When a downstream WO's scope depends on a tool run (decomp, API trace, format probe, benchmark), that probe is its own first wave. Procedure: references/first-wave-gates.md.
The Pilot-Before-Fan-Out Gate
When the same transformation will be applied to N items, wave 1 is one pilot that proves the recipe and its riskiest unknown; wave 2 mirrors it. Procedure: references/first-wave-gates.md.
Six-Gate Verification Table Between Waves
No brief for wave N+1 is written until wave N's gates pass. The gate set is fixed — drifting the gates between waves is how regressions slip in.
| # | Gate | Signal | Why it matters between waves |
|---|---|---|---|
| 1 | Build | Project compile / typecheck recipe succeeds | Wave N+1 will import wave N's symbols; broken build poisons the next brief |
| 2 | Tests | Project test recipe succeeds (with the wave's flag set when applicable) | Hidden regressions compound across waves |
| 3 | Module smoke | Module-level smoke recipes (CLI subcommand smoke, tools-plugin:cli-smoke-recipes) pass |
Catches integration breaks the unit tests miss |
| 4 | Taskwarrior status | Tasks for the wave drain to done; no orphans |
Wave N's queue must be empty before wave N+1's tasks are filed |
| 5 | Feature-tracker drain | Tracker entries touched by the wave advance from in progress to done, with evidence pointers |
Sidecar status survives the session; the next wave can cite landed work |
| 6 | Clean tree | git status --porcelain empty |
Loose ends become invisible work after the next wave lands on top |
A gate failure rolls back to fix in place, retry the gate — never to "dispatch wave N+1 and paper over it." If the wave is unrecoverable, revert it and re-brief.
Gating on a green PR vs a landed merge
When a human merges each wave and wave N+1 cannot wait for the merge, see references/stacked-wave-prs.md for how Gate 6 and stacked-PR landing change.
The ~10-Line Inline-Fix Threshold
When a wave returns and a small bug surfaces during the orchestrator's apply step, the orchestrator has a choice: fix it inline, or file a follow-up WO for the next wave. The threshold is approximate but load-bearing:
| Situation | Decision |
|---|---|
| ~10 lines of fix, orchestrator already has the symbolic context | Fix inline |
| Fix spans multiple files or needs the agent's exploration log | Follow-up WO in the next wave |
| Fix is mechanical (rename, reformat, missing import) | Fix inline |
| Fix requires a design judgement | Follow-up WO — judgement is cheaper to revisit than re-inject |
The deciding question is: "Will the orchestrator spend less time fixing
in place than re-writing a brief and re-loading the agent's context?"
Below ~10 lines, usually yes. A concrete signal that the threshold was
right: a bug that was a missing branch in --no-present mode landed as
a one-edit orchestrator fix instead of a whole re-dispatch turn.
This is not an excuse to skip waves entirely — it is a release valve for the small issues that always surface at apply time. Use it sparingly; once the inline fix exceeds ~10 lines, file the WO.
Stable Shared-File Exclusion List Across Waves
parallel-agent-dispatch § Scope Budget ("Orchestrator-only files") defines the
orchestrator-only files that no agent may touch (manifest, tracker,
top-level plan, build manifests, justfile, task store). That list is
derived once in the wave-1 brief and referenced by name in every
subsequent wave's brief. Do not re-derive it.
Re-deriving the list per wave drifts it — wave 2 forgets the
Cargo.toml entry that wave 1 had, wave 3 forgets the tracker, and on
the Nth wave a silent manifest clobber lands. The discipline is:
-
Wave 1 brief spells out the full exclusion list under
### Orchestrator-only files. -
Wave N+1 brief says, verbatim:
"Orchestrator-only files: as defined in the wave-1 brief. No additions, no removals. If you believe a new file belongs on the list, return
partialand surface it inOrchestrator action needed— do not edit it."
The same discipline applies to pre-allocated blueprint IDs, ADR
numbers, and any monotonic counters (parallel-agent-dispatch
§ Scope Budget, "Pre-allocated IDs"). Allocate up front; reference by ID in
later waves.
Composition
Each wave is a parallel-agent-dispatch; lock-holding waves use exclusive-lock-dispatch. The full layer map is in references/plan-review.md.
Quick Reference
Orchestrator Checklist
- [ ] Trigger identified (dependency chain / shared lock / orchestrator-edit contention)
- [ ] Research probe scheduled as wave 1 if any downstream scope is unknown
- [ ] Six-gate verification table applied at every wave boundary
- [ ] Shared-file exclusion list cited in wave 1, referenced by name in waves 2..N
- [ ] Return Contract referenced from
parallel-agent-dispatch, never redefined - [ ] Inline-fix threshold (~10 lines) honoured at wave-end
- [ ] No brief for wave N+1 written until wave N's gates pass
Common Mistakes
See references/plan-review.md when reviewing a wave plan.
Related
agent-patterns-plugin:parallel-agent-dispatch— intra-wave contract; the §Worktree Preflight, §Scope Budget (orchestrator-only files included), and §Return Contract sections apply unchanged inside every waveagent-patterns-plugin:exclusive-lock-dispatch— pre-dump mechanics for lock-contending waves; this skill cites it as the right shape for the research wave's briefworkflow-orchestration-plugin:workflow-wave-dispatch— workflow-side scheduling view: enumerating waves, gate-failure rollback, scheduling heuristicsgit-plugin:git-pr/git-plugin:git-conflicts— stacked-PR merge order (retarget children before deleting the base,--ontosquash cleanup) and pre-merge trial integration for landing a wave's PRsrust-plugin:cargo-worktree-builds— when the waves are Rust worktrees, share one pre-warmedCARGO_TARGET_DIRso deps compile once across all worktreestaskwarrior-plugin:task-coordinate— where wave candidates come from: surfaces the next N unblocked tasks while excluding lock-contenders.claude/rules/parallel-safe-queries.md— empty-result exit codes that bite inside automated gate checks
Evidence: porting the 158-line
wave-based-dispatchproject rule (skullcaps-native, 2026-04-24) into a reusable skill. The rule earned promotion after a six-wave dependent landing shipped in one day with zero merge conflicts, one inline fix, and zero exclusion-list drift across waves.
04 同仓库更多 Skills
kitty-show-image
Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no /dev/tty.
kitty-session-persistence
Snapshot and restore kitty terminal sessions on macOS. Use when surviving WindowServer hangs without losing tabs, configuring snapshots, or restoring after a force-reboot.
kitty-remote-control
Safe kitty remote control from an agent — read panes with kitty @ ls/get-text, notify, and never mutate the live terminal unasked. Use when running inside kitty.
docs-reference-check
Dangling doc-reference gate: flag markdown naming repo paths or relative links that no longer exist. Use when docs cite moved/deleted files, or wiring a doc-drift lint.
youtube-upload
Upload a video to YouTube via the Data API v3 and edit its title, description, tags or thumbnail afterwards. Use when publishing or retitling a YouTube video.
youtube-studio-share
Share a private YouTube video with a whole Google Workspace organization by scripting YouTube Studio in the browser. Use when a video must be org-only.