writing-plans · git:20260916.cd0b536 · 2026-09-16 · sha256 ce6ad1fef128bf82
writing-plans git:20260916.cd0b536A
Immutable. This exact content is served forever at /api/v1/blob/ce6ad1fef128bf82.
--- name: writing-plans description: "Use when you have an approved spec or written requirements for a multi-step task that needs a durable plan document before touching code. Small, single-owner, or fast-path tasks do not need this skill." --- <EXPLICIT-MODE-GATE> If activation mode is explicit (`~/.config/aegis/config.toml` has `activation_mode = "explicit"`, or `AEGIS_ACTIVATION_MODE=explicit` is visible in the environment) and the current user request did not explicitly invoke Aegis or this skill by name, exit back to the fast path: answer concisely without this workflow's checklist, ceremony, or document requirements. If the user explicitly named Aegis or this skill, proceed normally. </EXPLICIT-MODE-GATE> # Execute → Existing parent plan/spec and a tiny execution slice? → **Use Planless Slice Lane.** → Mechanical or bounded change with no durable boundary (no new owner, contract, schema, public API, migration, or compat surface)? → **Use Planless Slice Lane without a parent document.** → Approved spec/requirements for a new workstream or an escalation trigger? → **Write an implementation plan for an engineer with no prior task context.** For a durable plan: confirm scope and acceptance, map current owners/files, record the TDD route, decompose into executable tasks, define verification and retirement, self-review, save, then select the execution route. Proceed unless a real authorization or safety boundary requires the user. Escalate from Planless Slice Lane when the work adds a new owner, contract, schema, public API, architecture boundary, migration, persistence, security/permission, distribution/release surface, or an unclear verification boundary. # Writing Plans This skill turns approved requirements into a bounded, executable plan. The plan must answer: what changes, why code is necessary, which existing owner and files change, what stays compatible, what verifies the result, what risk remains, and what old path is retired or deliberately retained. A plan is method-pack guidance; it cannot grant authoritative completion. ## TDD Route Guard Before task decomposition, record `TDD Route` with mode (`off | auto`), decision (`strict | light | skipped`), authority, test posture, reason, and verification. Strict RED / GREEN steps belong only to an explicit user/project TDD request or `TDD Route: strict`. In `off`, use `skipped` unless explicit strict authority overrides it. An approved plan or a risk label alone is not strict authority. In `auto`, select `strict` for behavior, bugfix, shared/core, contract, persistence, permission, migration, producer/consumer, or meaningful regression signals. Select `light` only when the work is tiny, low-risk, single-owner, has no behavior change or strict signal, and has an obvious focused check. Absence of an explicit user TDD request is never evidence for `light`; the auto decision itself must be recorded. Only a `strict` decision with stated authority may prescribe failing-test, RED, GREEN, and REFACTOR steps. Otherwise plan the minimum change plus diagnostic reproduction or post-change regression. A missing auto decision returns to route selection before implementation tasks. ## Entry And Artifact Choice **Announce at start:** on the plan-writing route, say that this skill is creating the implementation plan. On `Planless Slice Lane`, announce the lane instead and do not claim a plan is being created. **Execution context:** Reuse the current branch/workspace by default. A branch needs independent history; a worktree needs concurrent checkout, blocking unrelated dirty state, or explicit user/repository authority. **Input:** approved requirements, a Spec Brief, or a Design Spec. **Default plan path:** `docs/aegis/plans/YYYY-MM-DD-<feature-name>.md`. Plans do not go in `work/`; user and repository authority override the default. Exception: use `Planless Slice Lane` when an existing parent plan/spec already owns the current tiny execution slice, or when the change is mechanical or bounded and needs no parent document. Do not save a new plan. Emit a compact `Slice Card`: ```text Slice Card: - Goal: - Parent plan/spec: - Files: - Boundary: - Verification: - Stop: ``` On the no-parent branch, `Parent plan/spec:` is `none — direct bounded request`. ## Aegis Project Workspace Workspace creation is lazy and follows project authority. The Aegis Method Pack repository must not create or ship a live `docs/aegis/` workspace. When a durable plan must initialize or update another project's workspace, read the workspace section of `expanded-planning-guidance.md`. It owns the `<aegis-workspace-helper>` and `INDEX.md` command detail, not the decision to create a plan. ## Default Plan Surface Compact output contract: express these as natural plan content, not a stack of cards: `Aegis Visibility`, approved scope and plan basis, required baseline refs, files/owners, compatibility boundary, `Change Necessity`, TDD route, tasks, verification, risks, and retirement. Keep conditional structures silent unless their trigger below fires. `Aegis Visibility` is normally one sentence explaining which owner, contract, retirement, compatibility, or verification pressure makes a durable plan useful. Structured trace belongs only to audit, debug, release, long-task review, or explicit request. Before tasks, perform a `Requirement Ready Check`: identify the approved source, scope, scenarios, and acceptance evidence. If any decision-changing item is missing, do not create implementation tasks; return the smallest gap to the requirement/spec owner. Perform `Change Necessity` before any non-trivial source edit or any new source-code path. This is behavior-triggered, not prompt-triggered. State naturally why no-change/docs/config is insufficient and name the minimum code boundary. A tiny helper, guard, branch, fallback, adapter, or owner is not exempt. A `no-change`, `docs/config-only`, or `needs-clarification` result narrows or stops the code plan. Run a compact `Plan Pressure Test` before task decomposition: test owner / contract / retirement fit, higher-level architecture path, verification scope, and task executability. It may proceed, revise the plan, or return to design; it is not an approval authority. ## Conditional Detailed Guidance Read `expanded-planning-guidance.md` completely only when at least one trigger applies: The direct triggers cover baseline readiness, new surface or new owner, complexity pressure, workspace persistence, and execution handoff. - specific baseline delivery/acknowledgement needs a structured `BaselineUsageDraft`, or readiness is incomplete or disputed; - the plan proposes a new surface or new owner and needs `Existence Check`, `AEGIS_MINIMALITY_REFERENCE`, `Architecture Integrity Lens`, or `first-principles-review` detail before task decomposition; - material file-size, mixed-owner, add-in-place, adapter, fallback, or shared-core pressure requires expanded `Plan-Time Complexity Check` or `Complexity Budget` detail; - a long-running, handoff-prone, subagent-driven, high-risk architecture, contract, compatibility, or retirement-sensitive plan needs an auditable expanded `Execution Readiness View`; - saving the plan requires workspace initialization or `INDEX.md` updates; or - execution-route evidence or a conditional governance card needs an auditable schema. The reference supplies detail only. This main file owns routing, plan versus Planless selection, task blocking, and execution handoff. For a new surface, use `Existence Check` and `docs/current/AEGIS_MINIMALITY_REFERENCE.md` before tasks. Reuse an existing owner when it is sufficient. If owner, contract, responsibility overlap, higher-level simplification, fallback, or retirement remains risky, use the `Architecture Integrity Lens` and `first-principles-review` before task decomposition. For maintained source, screen file shape, owner fit, add-in-place risk, and a better boundary. With no pressure signal, a compact edit-in-place decision is enough. When pressure exists, load the expanded `Plan-Time Complexity Check` and `Complexity Budget`. An over-budget result must change the task boundary, add governance work, or stop for follow-up. For an ordinary medium/high handoff, state Intent Lock, Scope Fence, Baseline Lock, tests, and drift stop naturally. Load the expanded `Execution Readiness View` only for the auditable handoff triggers above. Neither form is a `GateDecision`, `PolicySnapshot`, approval gate, or completion authority. If the plan must choose among deleting an old internal path, retaining a proven external compatibility boundary, or stopping for persistent-state confirmation, compose `anti-entropy-governance`. It does not authorize destructive execution. Preserve approved ADR signal preservation, source refs, alternatives, compatibility, and baseline-sync questions for completion; do not create accepted architecture memory from an unexecuted plan. ## Planless Slice Lane Use `Planless Slice Lane` before writing or saving a plan when one of these entry conditions holds: - a parent spec or parent plan already defines the workstream, and the current request is executing or refining one bounded task from that parent - the change is mechanical or bounded and needs no parent document (the no-parent branch under `# Execute`) and both of these are true: - no new owner, contract, schema, public API, architecture boundary, migration, persistence, security/permission, distribution/release surface, or unclear verification boundary appears - the slice can be described by a `Slice Card` The lane preserves long-task continuity without turning execution bookkeeping into durable planning artifacts. A parent scope or acceptance mismatch returns to the parent plan/spec instead of spawning a micro-plan. ## Plan And Task Quality Map files before tasks. Follow existing ownership and naming. For non-trivial plans, passively use relevant current terms from `CONTEXT-MAP.md` or `CONTEXT.md`; route a real semantic conflict to `establishing-project-context`. Every durable plan starts with Goal, Architecture, Tech Stack, Baseline/Authority Refs, Compatibility Boundary, TDD Route, and Verification. Then define small, ordered tasks with exact files, purpose, minimum necessary change, compatibility impact, and commands/outcomes that prove the task. Include code excerpts only when a signature, contract, or transformation would otherwise remain ambiguous; do not duplicate the implementation inside the plan. For bug fixes, refactors, contract changes, or governance cleanup, keep Repair Track and Retirement Track explicit in the affected task. A retained old owner or fallback needs a reason and retirement trigger. Self-review once for approved-scope coverage, placeholders, owner/type consistency, minimum change boundary, compatibility, exact verification, conditional trigger handling, and retirement. Fix defects inline. Tasks are execution units, not Git history units: the coordinator captures `TaskStartSnapshot` and creates one scoped commit only after the whole Task is reviewed and freshly verified. ## Execution Handoff The agent owns the execution-route decision. Select `subagent-driven` only for genuinely independent tasks with bounded ownership when coordination pays for it; otherwise select `inline`. Unavailable subagents falls back to inline execution. A dirty workspace alone does not select either route. Ask the user only for unresolved authorization, privacy, paid-resource, external-action, irreversible-action, scope, acceptance, or workspace-ownership boundaries. Otherwise proceed immediately. State the decision, evidence, fallback, and `User confirmation required: no | yes — <boundary>` compactly; load the reference only when the full `Execution Route` schema is useful. For `subagent-driven`, use `aegis:subagent-driven-development`. For `inline`, use `aegis:executing-plans`.