Writing Plans
Write a small durable index plus one thin contract per task, get the exact
version approved, then hand it to executing-plans. Leave the implementation
to the executor: write what each task must make true and how that is judged,
not the code.
When to use
- Detailed requirements are approved, or a precise task spans ≥3 steps or multiple files.
- Skip for single-step or trivial changes — planning them costs more than doing them.
- Intent still ambiguous: invoke
interview-mefirst. Verifiable behavior still missing: invokespec-itfirst. A precise task needs neither. - For a high-risk target, read the approved migration and assurance contracts before writing a task. If they are missing, plan only the gate that is missing, consuming the exact proposed contract, and put no target work in the plan; record unsettled facts as evidence, never as accepted deviations.
- Write separate plans for independent subsystems unless one cutover or rollback makes them one initiative.
Step 1: Write the index
- Open
assets/index-template.md. Fill the header first: exact identity of every approved input, the rule that makes each stale, theApproval rule, theIntegration cadence. - Leave
Integration cadenceatplan end. Writeper taskonly when the user directly asked for per-task integration, and quote the instruction. - Approved UI design with Selected visual references → copy the complete
keyed collection into the index; map every Reference ID to an owning task
and conformance evaluator ID in Visual reference coverage. Missing
reference or unowned ID → return the plan to
ui-ux-design. - Give every file and side effect exactly one owning task. Two tasks on the same one → add a dependency and name a single transition owner.
- One transformation across many items → bind the machine-readable inventory and the output pattern instead of listing items.
Step 2: Write the tasks
- Slice vertically: one evaluable capability per task. Split only at a real
gate boundary. High-risk target work → read
references/scalable-transformation.mdfirst; copy transition policy from the migration contract. - Open
assets/task-template.mdfor each task. FillTask ID(stable, non-positional),Depends on,Files,Exclusive ownership/effects,Contextas paths. - Fill Consumes and Produces with exact names and types. A later executor sees only that line.
- Fill
Implementation disciplines:test-driven-development+yagni, or the exact carve-out. - Include exact code only where precision is fragile: a tricky regex, a security check, a migration statement.
- Fill
Evaluator: a command that returns a verdict, or the rubric, evaluator, and deciding observations. UI task → copyApplicable visual referencesand give every Reference ID a Visual conformance gates row. - Fill
Evaluator identity/ownerso the gate lives outside what the task may mutate. A task that may edit its own gate → write the permitted scope and require RED or deliberate falsification before GREEN counts. - Fill
Suggested tierwith the Model selection section ofdispatching-parallel-agents, with the reason. - Write
00-index.mdplus one file per task to.sdlc-skills/plans/{{YYYY-MM-DD}}-{{topic}}/. No approval, execution state, or evidence in these files. Every later normative change is a successor file.
Step 3: Self-review against the inputs, by name
- Trace each requirement and accepted risk gate to a task or phase. Fix uncovered requirements; cut tasks tracing to nothing.
- Replace every
TBD,handle edge cases,similar to task Nwith the task it hides. - Confirm every task has an executable Evaluator or controlled rubric, and the index has one top-level Acceptance check.
- Resolve every Consumes to a Produces under the same name and type. Check the index's Constraints block against every task.
- Confirm every selected Reference ID has a carrying task and a matching conformance evaluator.
- Confirm independent tasks have disjoint files, data, effects, evaluators, and external state; every overlap has a dependency and one owner.
- High-risk plan → run
references/plan-review.md; resolve every blocker.
Step 4: Present, then stop
Show the complete index and its exact
Normative versionto theApproval ruleowner, then end the turn:Plan {{path}} — version {{Normative version}} {{goal, architecture, constraints, acceptance, trace, task list}} 1. Approve, then choose an execution mode 2. Request changes 3. Reject 4. Cancel Recommendation: {{option}} — {{one sentence}}.Do not invoke
executing-plans, create a workspace, or write code in this turn.Not a go → revise and re-ask: approval of another version, praise, comments, constraints, partial answers, silence, a non-interactive session.
Standing order → proceed unpaused only when its scope, owner, constraints, and mode explicitly cover unseen plan versions. Bind the exact version to that receipt first.
On approval, in a separate turn, ask the mode question and end the turn:
How should the plan run? 1. Inline — every task in this session 2. Delegated — one fresh subagent per task, in sequence {{one sentence on the context trade-off}} Recommendation: {{the mode the harness supports}}.Offer delegated only if the harness has a subagent action.
Write the approval and the mode into the
External decision ledgeragainst the exactNormative version. Write nothing about approval into the index.REQUIRED SUB-SKILL: on a direct mode answer, invoke
executing-plansagainst the approved version before any workspace or implementation action. This skill writes no code.