@openplaybooks/converge 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +131 -0
- package/dist/index.js +212278 -0
- package/package.json +54 -0
- package/skills/converge-control/SKILL.md +208 -0
- package/skills/converge-control/reference/cli.md +128 -0
- package/skills/converge-control/reference/events.md +165 -0
- package/skills/converge-control/troubleshooting/playbook.md +367 -0
- package/skills/converge-development/SKILL.md +303 -0
- package/skills/converge-development/reference/framework-map.md +294 -0
- package/skills/converge-development/reference/observability.md +132 -0
- package/skills/converge-development/troubleshooting/playbook.md +213 -0
- package/skills/converge-planning/SKILL.md +302 -0
- package/skills/converge-planning/references/anti-patterns.md +35 -0
- package/skills/converge-planning/references/model.md +317 -0
- package/skills/converge-planning/references/patterns.md +169 -0
- package/skills/converge-planning/references/phases.md +168 -0
- package/skills/converge-planning/references/schema.md +313 -0
- package/skills/converge-planning/references/static-dynamic.md +38 -0
- package/skills/converge-planning/references/tests.md +91 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: converge-planning
|
|
3
|
+
description: >-
|
|
4
|
+
Comprehensive playbook planning: analyze the goal, decompose it into
|
|
5
|
+
deliverable tasks, and write a runnable playbook with contracts, checks,
|
|
6
|
+
dynamic work patterns, and skills. Use when starting a fresh project,
|
|
7
|
+
onboarding an existing codebase, or restructuring work into a playbook.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Converge Planning
|
|
11
|
+
|
|
12
|
+
## 1. Core Mental Model
|
|
13
|
+
|
|
14
|
+
**Start with the playbook. Work backwards from the finished result.**
|
|
15
|
+
|
|
16
|
+
Converge is not trying to freeze work into a brittle static workflow. The playbook is the durable artifact: a living specification that can branch, spawn new work, adapt to the state of the repo, and keep going until its checks pass.
|
|
17
|
+
|
|
18
|
+
Planning means writing that specification clearly enough that the runtime can execute it autonomously.
|
|
19
|
+
|
|
20
|
+
Every project begins with one question: *what must exist when this is done?* The answer is the **goal** — a complete, usable deliverable. If the goal is too large for one agent, split it into **sub-goals**. Each sub-goal is itself a complete, deliverable result. Repeat until every leaf is workable by one agent in one session.
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
USER'S GOAL: "A working payment dashboard"
|
|
24
|
+
│
|
|
25
|
+
├── Sub-goal A: Database schema + seed data
|
|
26
|
+
│ Deliverable: migration.sql + seed.sql (runnable, verified)
|
|
27
|
+
│
|
|
28
|
+
├── Sub-goal B: Payment API endpoints
|
|
29
|
+
│ Deliverable: working API server with passing tests
|
|
30
|
+
│
|
|
31
|
+
├── Sub-goal C: Dashboard UI
|
|
32
|
+
│ Deliverable: rendered dashboard page with live data
|
|
33
|
+
│
|
|
34
|
+
└── Sub-goal D: Auth + permissions
|
|
35
|
+
Deliverable: login flow with role-based access checks
|
|
36
|
+
|
|
37
|
+
Each sub-goal is SCOPED, DELIVERABLE, WORKABLE. No middle work.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This is recursive. Sub-goal B ("Payment API") might split further into "POST /charges endpoint," "GET /transactions endpoint," and "Webhook handler" — each a complete, testable deliverable.
|
|
41
|
+
|
|
42
|
+
**Three hard rules:**
|
|
43
|
+
- **Every task produces a complete deliverable.** A task that produces "half of X that the next task finishes" is forbidden. Split X into smaller complete deliverables instead.
|
|
44
|
+
- **Decompose by what exists when done, not by what happens.** Sub-goals are named by the result they produce (nouns), not the activity (verbs). "Database schema" not "Design database."
|
|
45
|
+
- **Requirements drive decomposition.** Extract every user requirement first. Then verify every requirement maps to at least one sub-goal. No orphan requirements.
|
|
46
|
+
|
|
47
|
+
**The goal tree becomes the playbook.** Each sub-goal becomes a task contract. In current Converge, that usually means one of three task shapes:
|
|
48
|
+
|
|
49
|
+
- **Executable leaf** — one task body produces one complete deliverable and passes its checks.
|
|
50
|
+
- **Static container** — a parent groups hand-written child tasks and converges their outputs.
|
|
51
|
+
- **Dynamic container** — a passthrough parent emits `converge spawn <id> <template>` commands at runtime, then uses a `converge` post-check loop to decide whether to continue or stop.
|
|
52
|
+
|
|
53
|
+
The contract structure (`inputs:`, `outputs:`, `checks:`) remains the engineering backbone.
|
|
54
|
+
|
|
55
|
+
### The modern dynamic/container pattern
|
|
56
|
+
|
|
57
|
+
When work is not fully knowable at plan time, prefer the runtime pattern the framework actually exercises in tests:
|
|
58
|
+
|
|
59
|
+
1. A parent task is marked `passthrough: true`.
|
|
60
|
+
2. Its body performs orchestration work and emits `converge spawn ...` commands to materialize child tasks from `templates/<name>/TASK.md`.
|
|
61
|
+
3. The body writes on-disk evidence that later checks can verify.
|
|
62
|
+
4. A `converge` prompt runs after the body and decides whether the task should continue for another wave or halt.
|
|
63
|
+
5. When the parent knows it is done, it marks itself with `converge tasks mark <id> --status done`.
|
|
64
|
+
|
|
65
|
+
This is the current idiomatic shape for multi-wave or adaptive workflows. The runtime loop is driven by failing checks and post-body convergence, not by hand-written while-loops.
|
|
66
|
+
|
|
67
|
+
### Files are the currency of delivery
|
|
68
|
+
|
|
69
|
+
Children pass results to their parent through files declared in `outputs:`. The parent's convergence step reads those files via `inputs:`. This is the handshake: parent says "I expect these files," children say "I produce these files."
|
|
70
|
+
|
|
71
|
+
### Every task has a contract
|
|
72
|
+
|
|
73
|
+
| Contract part | TASK.md field | What it specifies |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| **Scope** | `title` + `description` + body | The bounded deliverable this task owns |
|
|
76
|
+
| **Inputs** | `inputs:` | Files the executor reads — children's outputs, upstream data |
|
|
77
|
+
| **Outputs** | `outputs:` | Files this task produces — the complete deliverable |
|
|
78
|
+
| **Acceptance** | `checks:` | Deterministic predicates that decide done/not-done |
|
|
79
|
+
| **Resources** | `skills:`, `references:`, `vars:` | Tools and data the executor may use |
|
|
80
|
+
| **Dependencies** | `depends_on:` | Tasks that must complete first |
|
|
81
|
+
|
|
82
|
+
A contract is **leaky** when any part is missing, vague, or over-broad. The deliverable is the contract's reason to exist.
|
|
83
|
+
|
|
84
|
+
> For the full model including DAG semantics, convergence patterns, and the principles in depth, see `references/model.md`.
|
|
85
|
+
|
|
86
|
+
## 2. The Recipe
|
|
87
|
+
|
|
88
|
+
To go from "I have a project" to "here's a playbook":
|
|
89
|
+
|
|
90
|
+
1. **Extract the goal.** One sentence. What complete, usable thing must exist when this is done? Be specific: "A deployed blog with posts, comments, and auth" not "A blog."
|
|
91
|
+
|
|
92
|
+
2. **List every requirement.** Categorize: must-haves, should-haves, constraints (tech stack, deadlines, compliance), explicit non-goals. Write each as a specific, testable statement. Don't proceed until the list feels exhaustive.
|
|
93
|
+
|
|
94
|
+
3. **Define acceptance criteria.** How do we know the goal is achieved? One or more concrete, verifiable conditions. "All API endpoints return 2xx and pass integration tests" not "the API works."
|
|
95
|
+
|
|
96
|
+
4. **Decompose into deliverable sub-goals.** Each sub-goal is a complete, independently verifiable result. 3–7 per level. Name each by what exists when done. If a sub-goal is still too large, recurse.
|
|
97
|
+
|
|
98
|
+
5. **Verify complete cover.** Map every requirement from step 2 to the sub-goal(s) that fulfill it.
|
|
99
|
+
- Any requirement with no mapping → gap. Add a sub-goal or adjust scope.
|
|
100
|
+
- Any sub-goal with no mapped requirement → scope creep. Remove or justify.
|
|
101
|
+
- The set of sub-goal deliverables together achieve the parent goal.
|
|
102
|
+
|
|
103
|
+
6. **Stop when leaves are workable.** A leaf is workable when one agent can produce its complete deliverable in one session (~15–45 min). If a deliverable needs multiple sessions, split it further — by sub-feature, by entity, by endpoint, not by workflow stage.
|
|
104
|
+
|
|
105
|
+
7. **Write contracts.** Only now — for each task, write its TASK.md: title, description, inputs (what it reads), outputs (its complete deliverable), checks (how to verify), depends_on (what must finish first). Then choose the right task shape:
|
|
106
|
+
- leaf → one executable body
|
|
107
|
+
- static container → children under `tasks/`
|
|
108
|
+
- dynamic container → `passthrough` body + `templates/` + `converge spawn ...` + a `converge` post-check contract
|
|
109
|
+
|
|
110
|
+
8. **Validate every contract.** Every output has a deterministic check. Every input traces to an upstream output. No orphan outputs. Checks return 0/non-zero. See §6 for the full checklist.
|
|
111
|
+
|
|
112
|
+
**The goal decomposition drives everything.** Don't start by picking a pattern — patterns describe what a good decomposition looks like after the fact.
|
|
113
|
+
|
|
114
|
+
## 3. Common Goal-Tree Shapes
|
|
115
|
+
|
|
116
|
+
After decomposing the goal, the resulting task tree will often match one of these shapes. Use them to sanity-check your decomposition, not to drive it.
|
|
117
|
+
|
|
118
|
+
| When goals share this shape... | The tree looks like... | Example |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| **Ordered delivery stages** — each goal depends on the prior one's output | Linear: `goal-a → goal-b → goal-c` | Data pipeline: dataset → analysis → report |
|
|
121
|
+
| **Entity fan-out** — same deliverable shape for N similar entities | One dynamic container spawning N templated children + parent convergence | Per-screen UI generation, per-endpoint API |
|
|
122
|
+
| **Iterative refinement** — quality improves over rounds until convergence | Epoch loop: same template repeated, stop on quality check | Research, optimization, tuning |
|
|
123
|
+
| **Domain split** — N distinct domains, each with its own sub-tree | Parallel domain pipelines with shared upstream specs | Game assets: characters, props, scenes each get a pipeline |
|
|
124
|
+
| **Creative progression** — early goals are singletons, late goals fan out over assets | Sequential early stages + late-stage per-asset fan-out | Video production: story → cast → per-shot storyboard |
|
|
125
|
+
| **Goal-driven epochs** — measurable completion conditions, adaptive epochs work on remaining goals until all pass | Root passthrough container spawns one epoch / sprint per wave, then halts when checks and converge verdict agree | Fix all type errors, make all tests pass, improve coverage |
|
|
126
|
+
|
|
127
|
+
A real project often mixes shapes. The top-level might be ordered stages, while one stage fans out per entity. Let the goal tree dictate the shape — don't force the shape onto the goal.
|
|
128
|
+
|
|
129
|
+
> For full shape descriptions with static/dynamic behavior and test strategies, see `references/patterns.md`.
|
|
130
|
+
|
|
131
|
+
## 4. Three Principles
|
|
132
|
+
|
|
133
|
+
1. **Nested over flat** — A goal owns one concern; sub-goals own sub-concerns. 3–7 children per node. Smells: one-child node, mixed-shape siblings, verb-named children.
|
|
134
|
+
2. **Template replicable work** — When N children share the same deliverable shape, write the contract once under `templates/` and spawn instances at runtime. Don't hand-write near-copies.
|
|
135
|
+
3. **Progressive decomposition** — Decompose one layer at a time. When invoked at a node, plan only its direct children. Never reach into grandchildren.
|
|
136
|
+
|
|
137
|
+
> For the full exposition, see `references/model.md`.
|
|
138
|
+
|
|
139
|
+
## 5. Not Middle Work
|
|
140
|
+
|
|
141
|
+
**Every task output must be a complete, usable deliverable.** This is the single most important rule. Middle work is the #1 reason playbooks fail to satisfy.
|
|
142
|
+
|
|
143
|
+
### The diagnostic — three questions for every task:
|
|
144
|
+
|
|
145
|
+
1. **"Can someone use this output directly?"** If the output is instructions, plans, or partial work that needs further processing — it's middle work.
|
|
146
|
+
2. **"Does the next task finish this output, or consume it?"** If *finish* → middle work. Split differently. If *consume* (as a complete input to produce its own deliverable) → correct.
|
|
147
|
+
3. **"Is this a complete thing that exists, or a stage of producing a thing?"** If *stage* → middle work. Re-decompose by complete things.
|
|
148
|
+
|
|
149
|
+
### Examples:
|
|
150
|
+
|
|
151
|
+
| Middle work (wrong) | Complete deliverable (right) |
|
|
152
|
+
|---|---|
|
|
153
|
+
| "Design the database schema" → next task implements it | "Working database with schema + seed data" (migration.sql + seed.sql, verified by running) |
|
|
154
|
+
| "Write the API spec" → next task codes it | "Working /charges endpoint with passing tests" |
|
|
155
|
+
| "Prepare the project" → installs deps, creates folders | "Runnable project skeleton with health-check endpoint" |
|
|
156
|
+
| "Analyze the codebase" → produces analysis.md | Not a task at all — it's research the AI does while planning |
|
|
157
|
+
|
|
158
|
+
**The golden rule:** if you can't hand the output to a user and they can use it, it's not done.
|
|
159
|
+
|
|
160
|
+
## 6. Requirement Coverage
|
|
161
|
+
|
|
162
|
+
Before writing any contract, verify requirement completeness:
|
|
163
|
+
|
|
164
|
+
1. **List every user requirement** extracted from the prompt and discovery questions. Number them.
|
|
165
|
+
2. **For each requirement, identify which sub-goal(s) fulfill it.** One requirement may map to multiple sub-goals. One sub-goal may fulfill multiple requirements.
|
|
166
|
+
3. **Flag gaps.** Any requirement with zero mappings → missing sub-goal. Add one.
|
|
167
|
+
4. **Flag creep.** Any sub-goal with zero mapped requirements → it's not serving the user's goal. Remove it or justify why it's necessary infrastructure.
|
|
168
|
+
5. **Check the union.** Reading all sub-goal deliverables together, would a user say "yes, that's what I asked for"? If not, what's missing?
|
|
169
|
+
|
|
170
|
+
This step takes 2 minutes and catches the #2 reason playbooks fail: missed requirements.
|
|
171
|
+
|
|
172
|
+
## 7. Validate (Contract Review)
|
|
173
|
+
|
|
174
|
+
For every `TASK.md`, check:
|
|
175
|
+
|
|
176
|
+
- **Bounded scope.** Title is one sentence. Body is concrete.
|
|
177
|
+
- **Complete deliverable.** Output is a usable thing, not a stage of work. Passes the "not middle work" diagnostic.
|
|
178
|
+
- **Sharp inputs.** Every `input` traces to an upstream `output`. No orphans. No `src/**/*` globs.
|
|
179
|
+
- **Specific outputs.** Specific paths, not "various files."
|
|
180
|
+
- **Result-named, not process-named.** `outputs:` describe a result that exists — not a stage of work.
|
|
181
|
+
- **Deterministic checks.** Every output has at least one check. Checks return 0 / non-zero. No string matching.
|
|
182
|
+
- **Self-contained.** An executor reading only this `TASK.md` and its declared inputs can complete the work.
|
|
183
|
+
- **Body is instructions only.** No work product pasted into the body — specs, designs, data live in declared files.
|
|
184
|
+
- **Acyclic deps.** No cycles. Deps are minimal — only what's actually consumed.
|
|
185
|
+
- **Container behavior is explicit.** If this task is orchestration-only, make that obvious with a passthrough body, spawn templates, and a converge contract.
|
|
186
|
+
|
|
187
|
+
**DAG-level checks:**
|
|
188
|
+
|
|
189
|
+
- **Every requirement maps to ≥1 task.** Rerun the requirement coverage check on the final contract tree.
|
|
190
|
+
- **Edges are explicit.** Every dependency is declared via `depends_on:`. No task relies on sort-order alone.
|
|
191
|
+
- **Static/dynamic choice is justified.** Known, stable child lists can stay static; adaptive or large child lists should use runtime spawn templates.
|
|
192
|
+
- **Tests cover the DAG.** Every output has a check. Containers have cross-child consistency checks.
|
|
193
|
+
- **Dynamic loops have a stop rule.** If a task can re-run, its checks and converge contract must make the halt condition obvious.
|
|
194
|
+
- **Outputs trace to inputs.** Every `outputs:` entry is consumed downstream or is a terminal deliverable. No orphan outputs.
|
|
195
|
+
|
|
196
|
+
When validation passes, the plan is ready for `converge run --playbook=<name>`.
|
|
197
|
+
|
|
198
|
+
## 8. Anti-Patterns
|
|
199
|
+
|
|
200
|
+
Common pitfalls: flat 30-task playbooks, process-stage decomposition, orphan inputs, reaching into grandchildren, hard-coding project data into playbooks, no checks on tasks. If validation flags a pattern, see `references/anti-patterns.md` for the full catalog.
|
|
201
|
+
|
|
202
|
+
### The most expensive anti-patterns
|
|
203
|
+
|
|
204
|
+
- **Pattern-first thinking** — "this looks like a Lifecycle Pipeline" before you've decomposed the goal. Let the goal tree dictate the shape.
|
|
205
|
+
- **Middle work** — tasks that produce partial results finished by the next task. Every task delivers something complete.
|
|
206
|
+
- **Missing requirements** — proceeding to contracts without verifying every user requirement maps to a sub-goal.
|
|
207
|
+
- **Process decomposition** — verb-named siblings (`fetch → clean → analyze`) that each process the whole population. Re-decompose by entity, each owning its end-to-end result.
|
|
208
|
+
|
|
209
|
+
### Dynamic Containers vs Static Children
|
|
210
|
+
|
|
211
|
+
**Prefer static children when the list is known at plan time and N <= 15.** Static children are discovered at compile time by `discoverStaticChildren`, guaranteeing correct execution order: children run before the parent converges, and downstream tasks wait for convergence.
|
|
212
|
+
|
|
213
|
+
**Use a dynamic container when:**
|
|
214
|
+
- The child list is data-driven or discovered while the task runs
|
|
215
|
+
- The same child shape repeats and should come from `templates/<name>/TASK.md`
|
|
216
|
+
- The parent may need multiple waves before its checks pass
|
|
217
|
+
- The task should keep adapting based on files produced so far
|
|
218
|
+
|
|
219
|
+
## 9. Reference Index
|
|
220
|
+
|
|
221
|
+
Load these on demand — they stay out of context until needed:
|
|
222
|
+
|
|
223
|
+
| Reference | When to load |
|
|
224
|
+
|---|---|
|
|
225
|
+
| `references/model.md` | Goal decomposition, convergence, DAG theory, full principles |
|
|
226
|
+
| `references/patterns.md` | Common goal-tree shapes, static/dynamic per shape, mix guidance |
|
|
227
|
+
| `references/static-dynamic.md` | Deciding between hand-written tasks and dynamic containers |
|
|
228
|
+
| `references/tests.md` | Writing checks that call explicit `scripts/...` helpers |
|
|
229
|
+
| `references/phases.md` | Step-by-step execution guide with commands |
|
|
230
|
+
| `references/anti-patterns.md` | Full anti-patterns catalog |
|
|
231
|
+
| `references/schema.md` | TASK.md / playbook.yml / spawn-template format reference |
|
|
232
|
+
|
|
233
|
+
## 10. Quick Reference
|
|
234
|
+
|
|
235
|
+
### Anchor playbooks
|
|
236
|
+
|
|
237
|
+
| Example | What it shows |
|
|
238
|
+
|---|---|
|
|
239
|
+
| `examples/baby-app/` | Deep nesting (3 levels): lifecycle → screen domain → sub-layer |
|
|
240
|
+
| `tests/test-seeding/` | Runtime task spawning from templates with typed vars |
|
|
241
|
+
| `tests/test-waves/` | Single-task multi-wave loop via checks + converge prompt |
|
|
242
|
+
| `tests/test-goal-driven/` | Dynamic container that spawns one sprint per wave and halts cleanly |
|
|
243
|
+
| `examples/deep-research/` | Template-driven research epochs |
|
|
244
|
+
| `examples/cinematic-video-production/` | Domain-first split with runtime fan-out at the shot layer |
|
|
245
|
+
|
|
246
|
+
### Directory layout
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
.converge/
|
|
250
|
+
├── project.yaml
|
|
251
|
+
└── playbooks/
|
|
252
|
+
└── default/
|
|
253
|
+
├── playbook.yml
|
|
254
|
+
├── PLAN.md # Root DAG blueprint
|
|
255
|
+
├── tasks/ # Static tasks and container roots
|
|
256
|
+
│ ├── prepare/
|
|
257
|
+
│ ├── TASK.md
|
|
258
|
+
│ └── tasks/
|
|
259
|
+
│ ├── schema/
|
|
260
|
+
│ │ └── TASK.md # Static child
|
|
261
|
+
│ └── migrate/
|
|
262
|
+
│ └── TASK.md # Static child
|
|
263
|
+
│ └── build/
|
|
264
|
+
│ └── TASK.md # Passthrough dynamic container
|
|
265
|
+
├── templates/ # Spawn templates for runtime children
|
|
266
|
+
│ ├── sprint/
|
|
267
|
+
│ │ └── TASK.md
|
|
268
|
+
│ └── phase/
|
|
269
|
+
│ └── TASK.md
|
|
270
|
+
└── scripts/ # Reusable helpers invoked directly from checks
|
|
271
|
+
├── file-exists.sh
|
|
272
|
+
└── backend-configured.js
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
IDs are plain kebab-case slugs. Order comes from `depends_on` edges, not naming. Checks are explicit `cmd` entries; shared logic lives under `scripts/` and is called directly from the command.
|
|
276
|
+
|
|
277
|
+
Dynamic work in current Converge shows up in two common shapes:
|
|
278
|
+
|
|
279
|
+
- `templates/<name>/TASK.md` plus `converge spawn <id> <template>` for runtime task registration from a passthrough container body.
|
|
280
|
+
|
|
281
|
+
### Dynamic container checklist
|
|
282
|
+
|
|
283
|
+
For a modern autonomous parent task, plan for all of these:
|
|
284
|
+
|
|
285
|
+
- `passthrough: true`
|
|
286
|
+
- a body that writes evidence files and uses `converge spawn ...` idempotently
|
|
287
|
+
- templates under `templates/`
|
|
288
|
+
- checks that fail until the desired state is actually reached
|
|
289
|
+
- a `converge` prompt that decides continue vs halt after each body run
|
|
290
|
+
- `converge tasks mark <id> --status done` when the parent knows it is finished
|
|
291
|
+
|
|
292
|
+
## 11. Related Skills
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
converge-planning converge-control repair-control
|
|
296
|
+
(what to build) → (how to execute) → (how to fix)
|
|
297
|
+
Goal → Sub-goals → Run → Debug → Detect gap →
|
|
298
|
+
Contracts → Validate Plan tasks → Verify Route strategy →
|
|
299
|
+
Repair
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
Handoff: converge-planning produces `.converge/playbooks/{name}/` structure, then converge-control takes over for execution. PLAN.md describes the delegation structure; the runtime expands it.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Anti-Patterns Reference
|
|
2
|
+
|
|
3
|
+
Complete anti-patterns catalog for converge-planning. Read when validation flags a leaky contract, or when a forced decomposition shape leads to structural issues during planning.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## General Anti-Patterns
|
|
8
|
+
|
|
9
|
+
- **Pattern-first thinking** — "this looks like a Lifecycle Pipeline" before decomposing the goal. The shape should *emerge* from the goal tree, not drive it. Start with the user's goal and deliverables; recognize the shape after.
|
|
10
|
+
- **Middle work** — tasks whose outputs are not complete, usable deliverables. If the next task *finishes* what this task started (rather than *consuming* a complete output), you've split the workflow instead of the result. Every leaf must produce something a user could use directly.
|
|
11
|
+
- **Missing requirements** — proceeding to contracts without verifying every user requirement maps to at least one sub-goal. Run the requirement coverage check before writing contracts. A requirement with no mapping is a gap; a sub-goal with no requirement is scope creep.
|
|
12
|
+
- **Flat 30-task playbook** → top is doing everyone's job. Group by concern.
|
|
13
|
+
- **One-child node** → no delegation. Collapse into parent.
|
|
14
|
+
- **Mixed-shape siblings** → multiple concerns leaked. Split.
|
|
15
|
+
- **Process-stage decomposition** (`fetch → clean → analyze`, `spec → author → prompt → render`) → you split the workflow instead of the scope. Each "stage" task processes the whole population; failures re-run the whole stage. Re-decompose by *what exists when done*: one task per entity (or one seed), each owning its end-to-end mini-workflow. The verbs belong inside one task body, not as sibling task names. This is the same as the "middle work" anti-pattern.
|
|
16
|
+
- **5 hand-written near-copies** → use a runtime template plus `converge spawn`.
|
|
17
|
+
- **Orphan input** → upstream contract didn't deliver. Fix the chain.
|
|
18
|
+
- **Over-broad input (`src/**/*`)** → leaky scope. Narrow it.
|
|
19
|
+
- **Pasting content into a TASK.md body that another task needs** → missing artifact. Make the producer write a file; declare it as `output:` / `input:`.
|
|
20
|
+
- **Structured data inlined as prose** → use JSON in a file, not paragraphs in a body.
|
|
21
|
+
- **Hard-coding project data into a TASK.md body or `vars:`** → playbook becomes single-use. Move the data to a project file the seed reads.
|
|
22
|
+
- **Reaching into grandchildren during planning** → broken delegation discipline. Stop at your layer.
|
|
23
|
+
- **Skipping analysis on existing codebase** → planning blind.
|
|
24
|
+
- **No checks on a task** → no acceptance criterion. Add one.
|
|
25
|
+
- **Inventing facts to fill scope-packet gaps** → write Open Questions instead.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Per-Shape Anti-Patterns
|
|
30
|
+
|
|
31
|
+
- **Ordered Stages for bulk replicable work.** If you have 100 scenes to generate, sequential phases at the top crush parallelism. Use Domain Split or push seed to the right layer.
|
|
32
|
+
- **Domain Split when deliverables are tiny.** A "per-config-file" fan-out with one-line bodies is just nesting for nesting's sake. Hand-write or move seed up a level.
|
|
33
|
+
- **Epoch Loop without a convergence check.** Without a stop condition, you spawn epochs forever. Define what "converged" looks like *before* writing the template.
|
|
34
|
+
- **Linear Pipeline when work refines.** Linear stages can't go back. If quality must improve over rounds, use Epoch Loop.
|
|
35
|
+
- **Creative Progression for deterministic work.** If checks are deterministic and stages are orderable, prefer Linear Pipeline — it's mechanically simpler.
|