writing-plans: plans over-specify implementation, leaving no room for executor judgment
I searched existing issues and this has not been proposed before
What problem does this solve?
When using
writing-plansto plan a multi-task implementation, the generated plan contained complete implementation code — full function bodies, 70-line test files, exact shell commands, and step-by-step TDD sequences per task. The executor (executing-plans/subagent-driven-development) had no decisions to make — it was copy-pasting code from the plan rather than engineering a solution.This caused two concrete problems:
- When implementation revealed a better approach mid-execution, the plan's code was wrong even though the intent was still valid. Adapting meant "violating" the plan.
- Every task duplicated the TDD ceremony ("write failing test → verify failure → implement → verify pass → commit") that
executing-plansandtest-driven-development
already enforce, bloating each task from ~20 lines to 80-100+.
Proposed solution
Shift
writing-plansto produce interface contracts + acceptance criteria instead of implementation code. Each task would include:Field Purpose Why Connects this task to the larger plan rationale Files Exact paths: create, modify, test Contract Type shapes and signatures (not bodies) Acceptance Observable behaviors, edge cases, test expectations Constraints Architectural rules, stability guarantees And explicitly not include: function bodies, test code, shell commands, TDD step sequences, or commit messages.
Before (current): A task to create four
StrEnumclasses included 4__init__.pyfiles, a 70-line test file with full assertions, a complete implementation file, and TDD step instructions.After (proposed): The same task:
Task 1: Benchmark domain enums
Why: All other domain models depend on these classification types.
Files: Create
src/benchmark/domain/enums.py, test attests/benchmark/domain/test_enums.pyContract: Four
StrEnumclasses —UnitKind(8 members),QueryClass(7 members),EvidenceTier(3 members),ReviewStatus(4 members)Acceptance: All are
StrEnumsubclasses; values are snake_case;EvidenceTierstring ordering matches intended importance rankingConstraints: No imports outside stdlib
The responsibility split becomes:
Skill Owns writing-plansWhat, where, why, done-criteria, constraints, ordering, parallelism hints executing-plansTDD discipline during execution test-driven-developmentRed-green-refactor cycle subagent-driven-developmentDispatch and review plan-document-reviewer-prompt.mdwould also need updates to validate against the new abstraction level.What alternatives did you consider?
- Keep current behavior but make it optional (e.g., a
--detail-levelflag). Rejected because the skill system doesn't have a clean mechanism for this, and the
over-specification problem is structural — partial code in a plan is arguably worse than all-or-nothing. - Fix it locally in my own fork. I did this — revised the skill for my project and it works well. But the issue affects everyone using the skill, so upstreaming the
change seems right.
Is this appropriate for core Superpowers?
Yes. This is about the abstraction boundary between planning and execution — it affects any project regardless of domain. The current behavior duplicates responsibility
thatexecuting-plansandtest-driven-developmentalready own, which is a framework-level concern.Context
- Model: Claude Opus 4.6
- Harness: Claude Code CLI
- Workflow: Used
writing-plansto plan a benchmark pipeline (~10 tasks), then executed withexecuting-plans+subagent-driven-development. The over-specified plans
caused friction during execution when implementation diverged from the plan's exact code.
Source: obra/superpowers