skills/woostack-plan/SKILL.md
Use to write the implementation plan for an approved woostack spec — a comprehensive, bite-sized TDD plan structured as PR-sized increments, saved frontmatter-free to .woostack/plans/<spec-basename>.md, opening with a `**Source:**` line that joins it 1:1 to the spec, and setting the spec's status: planning. This is the plan phase of the woostack build loop (woostack-build step 4); also usable standalone via /woostack-plan <spec-path>. One plan per spec. Writes the plan and hands back — never executes, commits, or merges.
npx skillsauth add howarewoo/woo-stack woostack-planInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Write a comprehensive implementation plan from one approved spec, structured as PR-sized
increments. This is woostack's own planning phase — woostack-build
step 4. It keeps the discipline that makes plans worth executing (file-structure first,
bite-sized TDD tasks, no placeholders, a self-review pass) and adds the woostack conventions:
markdown plans under .woostack/plans/, an opening **Source:** line that joins the plan 1:1 to
its spec, frontmatter-free, decomposed into independently shippable increments, and a
status: planning transition on the spec. It writes the plan and hands back; it owns no approval
gate and never executes, commits, or merges.
It internalizes the plan-writing discipline as a native phase — the same move
woostack-ideate,
woostack-harden, and
woostack-execute made on the phases around it. With this skill
the build loop has no external skill dependencies. It pairs with woostack-execute as
produce-plan / consume-plan: /woostack-plan <spec> writes the plan, /woostack-execute <plan>
runs it.
/woostack-plan <spec-path> — write the plan for the named markdown spec under
.woostack/specs/. The spec path is required./woostack-plan (no argument) — do not guess "the current spec." Ask which spec to plan
(optionally list .woostack/specs/ candidates) and stop until one is named.When woostack-build reaches step 4 it invokes this skill with the approved spec path from
step 2/3.
.woostack/plans/ file with
a matching **Source:** line or the same basename), amend that plan in place — never write
a second (spec : plan : PRs = 1 : 1 : N; a second plan breaks the board join). Say you are
amending.Before defining tasks, map which files are created or modified and each one's single responsibility. This locks in decomposition.
Structure the plan as a sequence of independently shippable increments — preferably ≤500 LOC
each (a soft target, not a gate) — so the plan is execute-ready: woostack-execute runs one
increment per cycle as its own Graphite-stacked PR. Flag any slice that can't reasonably stay
under the target and propose a further split; genuinely atomic changes may exceed it. This
decomposition is part of planning (it folds woostack-build's old decompose step into the plan
engine).
A PR-sized increment often intentionally defers integration to a later increment — Increment 1 ships a skill file, Increment 2 wires its call sites. Reviewing the isolated diff would flag that deferred work as "missing." To keep the review gate quiet without pulling the other PRs in the stack, the plan declares the deferral inline:
When an increment leaves a gap a later increment fills, author two paired steps:
woostack-defer(increment N): <reason> — in the file's comment syntax (e.g.
// woostack-defer(increment 3): call sites wired in increment 3). The literal token is
woostack-defer; <ref> is the increment that completes the work.The marker is the single signal woostack-review reads to demote a "missing X" finding to a
non-blocking Deferred to <ref> nit (see woostack-review for the
canonical token; review.defer_markers gates it, default on). Never plan a marker over a
security gap or over wrong code — deferral is only for missing work a later increment adds.
By default the increments form one linear gt stack — each stacks on the previous, the shape
woostack-execute runs. A plan may instead group increments under top-level ## Track:
headings; each track is an independent linear stack branched off the common base (the spec+plan
PR). This is author-driven and optional: write tracks only when increments are genuinely
independent and you want an unattended overnight run to isolate failures across them — a
blocker ends only its own track, not the whole run. Tracks run sequentially (one session, no
concurrency); the benefit is fault isolation, not speed. Do not auto-partition — default to one
implicit track (no headings = today's behavior).
Only woostack-execute-overnight consumes tracks (it
runs each track off the base and, on a blocker, ends only that track and advances to the next).
woostack-execute ignores the headings and runs every increment
as one linear stack.
Within each increment, decompose into bite-sized tasks; each step is one action
(~2-5 minutes): write the failing test → run it, confirm it fails → minimal implementation → run
it, confirm it passes → commit. Use checkbox (- [ ]) syntax for every step so
woostack-execute ticks them in place as the live progress record. DRY, YAGNI, TDD, frequent
commits throughout.
The TDD discipline these steps embody — red→green→refactor, the coverage classes, and the no-runner→concrete-verification substitution — is the canonical kernel in woostack-tdd; this section applies it to plan-task shape.
The output shape (header, **Source:** line, task/step structure) is captured in
references/plan-template.md — populate it; don't reinvent it.
Every step carries the actual content an engineer needs. These are plan failures — never write them:
Exact file paths always. Complete code in every code step. Exact commands with expected output.
.woostack/plans/<spec-basename>.md — the same YYYY-MM-DD-<slug>
basename as the spec (reuse the spec's date; not today's). The shared basename is the
slug-match fallback join.**Source:** .woostack/specs/<file>.md — the
primary spec→plan join the /woostack-status board reads.REQUIRED SUB-SKILL banner. The
header is the **Source:** line plus Goal / Architecture / Tech Stack.The phase enum and join contracts are defined once in
../woostack-status/references/conventions.md —
link, never restate.
After writing the plan, check it against the spec with fresh eyes — a checklist you run yourself, not a subagent dispatch:
N/A, confirm the spec body has no behavioral requirement (else flag the N/A as suspect).Fix issues inline; no re-review needed.
When the plan file exists, set the spec's status: planning (the conventions.md value for "plan
exists, 0 boxes done"). Doing it here means a standalone /woostack-plan also advances the board.
Do not tick any plan checkbox yet — execution owns checkbox progress.
Stop when the plan is written, self-reviewed, and the spec is planning. Then hand back and name
the next step:
woostack-build: return to step 6 (harden the plan)./woostack-execute <plan-path>. Stop.Chain nothing yourself.
This skill owns no approval gate. The spec-approval gate (woostack-build step 3) is
upstream; the execution-handoff gate (step 8) is downstream. It does not present-for-approval,
execute, commit, or merge. It writes the plan and hands back — preserving woostack-build's
"inherit gates, add none."
.woostack/plans/, basename = spec basename. Frontmatter-free, opening
**Source:** line.status: planning; tick no checkbox. Execution owns checkbox progress.testing
Use to curate the .woostack/ knowledge store. Reflects over the static memory store + docs (no session mining), then proposes a gated changeset that merges duplicate notes, replaces stale/contradicted ones, drops dead/orphaned notes, resolves conflicts, surfaces consolidated insights, and recommends evidence-guarded documentation edits. Nothing mutates before explicit approval; ends on a summary + iterate loop. Local-only memory (no commit); doc edits land in the working tree. Never commits or merges. Invoke via /woostack-dream [instructions].
development
woostack's canonical test-driven-development home and on-demand test-adder. The single source for the TDD kernel — Red→Green→Refactor, test-first, cover happy/error/edge/success+failure, framework-aware, no-runner→concrete verification — that woostack-plan, woostack-execute, woostack-debug, and bootstrap patterns.md §7 should link to instead of restating. Also the 14th public command: /woostack-tdd <target> adds appropriate tests to an existing code block, PR, spec, or plan — one verb, target-routed (code→colocated *.test files, PR→tests for the gh pr diff surface, spec→strengthen §7 acceptance criteria, plan→fill failing-test steps) — with a characterization carve-out for existing code (new code is red-first; existing code pins current behavior). Writes tests to the working tree and hands to woostack-commit; never commits, merges, or authors status:/branch:; owns no approval gate.
development
Use to resolve small technical issues (bugs, hotfixes, refactors) through a unified execution loop — diagnose root cause with woostack-debug, author a fix plan under .woostack/fixes/, harden, get explicit user approval, then delegate execution to woostack-execute (TDD per task, task review, commit via woostack-commit, distill).
development
Use to execute an approved woostack plan UNATTENDED overnight — one autonomous run with no user input after launch that drives every increment to a reviewed stack, swapping woostack-execute's stop-and-ask gates for resolve-or-log-and-continue (woostack-debug on stuck verifications; bounded auto-address on a blocking review; halt-the-track on anything unsafe or ambiguous), honoring optional `## Track:` grouping in the plan (independent, fault-isolated tracks run sequentially), and writing a morning report under .woostack/overnight/ for a human to test in the morning. It is the third choice at woostack-build's execution-handoff gate (Go / Hand off / Run overnight); also usable standalone via /woostack-execute-overnight <plan-path> [--inline|--subagent]. One plan per spec, multiple PRs per plan. Never merges; never relaxes safety for autonomy.