Appearance
Each optional template section carries a predicate on task_type and complexity — and sections whose predicate is false are omitted entirely, not left blank with placeholder text.
Pattern
Adaptive Template Activation
The shape
Classify first. Evaluate predicates. Write only what survives.
1. Classifytwo dimensions
from user prompt
task_type =
bug
complexity =
simple
→
decide
2. Evaluateper section
✓ Root Cause Analysis
✓ Problem → Solution
✗ Problem Statement
✗ Solution Approach
✗ Impl. Phases
✗ Testing Strategy
→
emit
3. Writeonly survivors
plan.md
Task Description
Objective
Root Cause Analysis
Problem → Solution
Relevant Files
Step by Step Tasks
Acceptance Criteria
Validation Commands
Skip step 1 and you can't evaluate step 2 — so the template defaults to "everything," and every plan gets every section.
The predicate table
Six required, six conditional. Each conditional carries its trigger.
Section
Predicate
Kind
Task Description
always
Req
Objective
always
Req
Relevant Files
always
Req
Step by Step Tasks
always
Req
Acceptance Criteria
always
Req
Validation Commands
always
Req
Problem Statement
task_type∈{feature, enhancement}
ORcomplexity∈{medium, complex}
Cond
Solution Approach
paired with Problem Statement
Cond
Root Cause Analysis
task_type==bug
Cond
Problem → Solution
task_type==bug
Cond
Implementation Phases
complexity∈{medium, complex}
Cond
Testing Strategy
task_type==feature
ORcomplexity∈{medium, complex}
Cond
The required six are the smallest set that makes a plan actionable. Everything else earns its place.
The anti-pattern
Flat template — generic filler. Adaptive — signal only.
Flat — all sections required13 sections
one-line typo fix
task_type=bug · complexity=simple
✓Task Description
✓Objective
✓Root Cause Analysis
✏Problem Statementawkward
✏Solution Approachawkward
✏Impl. Phasesgeneric
✏Testing Strategy"N/A"
✓Relevant Files
✓Step by Step
Longer. Less actionable. The builder reads inapplicable instructions and either ignores them (best case) or acts on them (writing a testing strategy for a typo).
Adaptive — predicates activate8 sections
one-line typo fix
task_type=bug · complexity=simple
✓Task Description
✓Objective
✓Root Cause Analysis
✓Problem → Solution
✓Relevant Files
✓Step by Step
✓Acceptance Criteria
✓Validation Commands
Every section earns its place. Signal density is 100%. No inapplicable instructions to filter. The builder executes, not interprets.
Same bug. Same signal. The flat template adds noise without adding information — and signal density drops as the plan gets longer.
The sharp rule
A failed predicate means the section is absent — not blank.
When a downstream agent reads the plan, a blank ## Testing Strategy section is indistinguishable from a forgotten one. Presence must mean content; absence must mean "not applicable."
## Testing Strategy
N/A
## Implementation Phases
<blank>
✗ Ambiguous
(section not emitted)
(section not emitted)
✓ Unambiguous
Reading the output
Presentthe section was evaluated, activated, and authored
Absentthe section's predicate was false — it doesn't apply here
Blankforbidden — you can't tell which of the above occurred
This is what separates an adaptive template from a template with optional fields — the output geometry itself encodes applicability.
The discipline
A plan is what the template emitted — not what the template defined.
Classify before activating. Attach predicates, not checkboxes. Omit failed sections entirely so absence carries meaning. Every section that survives earned it; every section that didn't never shows up to confuse the builder.