Write and maintain self-contained ExecPlans (execution plans) that a novice can follow end-to-end; use when planning or implementing non-trivial repo changes.
This skill describes how to author, discuss, and implement an execution plan ("ExecPlan"). An ExecPlan is a living design-and-delivery document that a coding agent (or human) can follow to ship a demonstrably working change.
Treat the reader as a complete beginner to this repository. Assume they have:
The bar is high: the ExecPlan must be self-contained and sufficient for end-to-end delivery, including validation and observable behaviour.
Use this skill when:
Every ExecPlan must satisfy all of the following:
Autonomy without tolerances is unattended automation. The goal is predictable outcomes, not maximum throughput.
Before accepting a task, evaluate whether an ExecPlan is the right approach. Escalate or request clarification when:
Pushing back is not failure; it is part of the agent's quality function.
An ExecPlan proceeds through two distinct phases:
After completing the initial ExecPlan draft, present it to the user and await explicit approval before beginning implementation. This gate exists because:
Do not interpret silence as approval. Do not begin implementation until the user explicitly confirms the plan or requests revisions.
If the user has previously established standing instructions (e.g., "implement plans immediately for changes under 100 LOC"), those instructions override this gate for qualifying work.
When implementing an ExecPlan:
Treat an ExecPlan as a lightweight architecture contract, not as an isolated
task list. Where upstream artefacts exist, add a Conformance basis naming the
exact Terms of Reference revision, technical-design revision, ADRs, governing
standards, and relevant requirement or design-element identifiers. If no such
artefact exists, say so explicitly rather than inventing one.
Use stable identifiers selectively for propositions whose provenance and discharge matter: upstream goals, hard constraints, success criteria, important assumptions, architecture requirements and major design elements; ExecPlan milestones; and their acceptance evidence. Do not number every paragraph. Preserve a chain such as:
TOR-GOAL-004 -> TDD-REQ-012 -> TDD-COMP-queue-store -> EP-M3 -> tests::queue::persists_reordering
Map each applicable upstream requirement or baseline-to-target gap to at least one milestone and observable acceptance item. When a traced item changes, identify its upstream and downstream impacts before accepting the change, and update every affected link.
At each milestone boundary, perform a focused conformance check:
Tailor this check to the work's material risks; do not create a ceremonial enterprise-compliance checklist.
If evidence shows that the approved design cannot or should not be followed,
do not silently amend the implementation or plan around it. Record a proposed
deviation in Decision log, including the affected identifiers, impacts,
options, and whether the technical design or an ADR must change. Set the plan
status to BLOCKED and wait for explicit acceptance of the deviation before
continuing.
ExecPlans have a strict envelope to keep them easy to copy, review, and resume:
plaintext.1., 2., etc. for ordered lists.Write in plain prose. Prefer sentences over lists. Avoid checklists, tables, and long enumerations unless brevity would obscure meaning.
Anchor everything to observable outcomes:
make test passes and the new test
tests::feature_x::works fails before and passes after."/health returns HTTP 200 with
body OK."HealthCheck struct."Be explicit about repository context:
Be safe and idempotent:
Validation is not optional:
@pytest.mark.xfail(strict=True, reason="...") until the red failure is
observed, then remove the marker as part of the green step. Do not leave
expected-failure markers in the final passing implementation unless the plan
explicitly scopes a known unresolved defect.Constraints
or Decision log, then use the nearest observable substitute such as a
reproducer script, golden fixture, compile-fail test, approval test, or
manual runtime check.Feature, Scenario, Given, When, and Then statements, and
keep the specification synchronized with the implementation milestones.Do not choose an implementation and bolt verification onto it afterwards. Select an implementation structure whose decomposition, state representation, and control flow expose tractable verification obligations. If implementation reveals an unplanned invariant, lemma, or axiom, return to the plan and revise both the implementation and verification strategy before continuing.
Every ExecPlan must contain a Verification plan that:
Choose methods according to the obligation rather than language or habit:
Any proof must be substantive, rigorous, and well-founded. A restatement of the
assumed property, a vacuous assertion, or finite examples presented as an
exhaustive argument do not discharge an obligation. If the change introduces
no non-trivial invariant or lemma, say so explicitly in the Verification plan
and justify that conclusion; do not omit the section.
For every obligation, explain why the verification can fail when the implementation is wrong. A passing result is vacuous when, for example, an unsatisfiable precondition excludes every input, a generator or filter never reaches relevant cases, an implication's antecedent is never true, a model's target states are unreachable, a bound excludes every meaningful transition, or a proof merely assumes the conclusion.
Require a non-vacuity argument and evidence appropriate to the method:
Record the non-vacuity checks beside the obligation they protect, not as a generic assurance at the end of the plan.
Do not plan to verify the internal correctness of third-party libraries or tools. Treat their documented interfaces as axioms. However, when repository-owned configuration logic builds upon such an interface, or safe behaviour depends on non-trivial interaction with it, verify the repository-owned logic against the real interface or a faithful contract-level boundary. Record the exact external assumptions and the evidence that exercises that boundary.
Capture evidence:
Every implementation milestone must end in a coherent, validated repository state that is safe to continue from if later work is postponed. This plateau requires correctness and internal coherence, not simultaneous support for the old and new architecture. For each milestone, state its stable identifier, assigned requirements or gaps, end state, acceptance evidence, conformance check, recovery path, and remaining gaps.
Never introduce compatibility machinery solely to make a milestone independently viable. Ask: "Would compatibility be required if this work were made as one atomic change?" If not, update the interface and every affected caller together. Plans MUST NOT prescribe source-API compatibility machinery for any of the following surfaces:
public;For a released 1.0-or-later API without known external consumers, compatibility is normally unnecessary, subject to explicit project policy. For a released API with external consumers, preserve compatibility or plan a deliberate migration only when an existing commitment requires it. Any proposed compatibility layer must name the external consumer, deployed state, compatibility commitment, or other concrete requirement that necessitates it.
Persisted and wire formats are separate from source API compatibility. A private application may still need to migrate data written by an earlier deployed version or communicate with an existing peer. Model that deployed state explicitly rather than treating it as justification for unrelated API shims.
Reject compatibility theatre: aliases, facade types, deprecated entrypoints, dual implementations, adapters, migration wrappers, or temporary shims added merely to create incremental milestones. If the plan cannot answer "compatible with whom or what?" it must not prescribe the layer.
ExecPlans must contain, and must keep up to date as work proceeds:
Constraints (hard invariants that must not be violated)Tolerances (exception triggers) (thresholds that trigger escalation when
breached)Risks (known uncertainties with mitigations, identified upfront)Progress (with checkbox list and timestamps)Surprises & discoveries (unexpected findings during implementation)Decision log (every key decision with rationale)Outcomes & retrospective (what was achieved and lessons learned)Conformance basis (upstream revisions, identifiers, and trace links)Verification plan (obligations, axioms, methods, artefacts, and evidence)If you change course mid-implementation:
Decision log.Progress (what changed, what remains).Risks if new uncertainties have emerged.Verification plan if implementation structure, proof obligations, or
external assumptions changed.Conformance basis and affected trace links if an upstream item,
milestone, design element, or acceptance item changed.When a tolerance threshold is reached, a constraint would be violated, or an architecture deviation needs approval:
Decision log with:Do not attempt to work around tolerances. They exist to catch situations where human judgement is required.
Before setting an ExecPlan to COMPLETE, reconcile implementation discoveries
with every upstream artefact in the conformance basis:
Decision log.Do not mark the plan COMPLETE while an upstream change or deviation remains
unrecorded or unaccepted.
When requirements are challenging or unknowns are significant, include explicit prototyping milestones:
Copy and complete the ExecPlan template when starting a new ExecPlan. Keep its mandatory living sections current as you research and implement.
When you revise an ExecPlan, ensure changes are reflected across all relevant sections. Append a short note at the bottom of the ExecPlan describing:
Update the Status field in the header when the plan's state changes.