Skip to content

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.