skills/woostack-build/SKILL.md
Use when building a feature with the full woostack development loop — ideate a design, harden it, plan it, harden the plan, ship the spec and plan as their own PR, then implement it. Chains woostack-ideate, woostack-harden, woostack-plan, woostack-commit, and woostack-execute in a fixed, gated order; writes markdown specs and plans under .woostack/.
npx skillsauth add howarewoo/woo-stack woostack-buildInstall 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.
Drives one feature from idea to implementation through a fixed, gated chain. Thin glue: it sequences proven sub-skills, inherits their two gates (design, spec) and adds exactly one of its own — the execution handoff — because the plan→execute boundary belongs to no sub-skill. The value is the order and the handoffs.
ideate → write spec (markdown) → harden spec → approve spec → plan → verify decomposition
→ harden plan → commit spec+plan as their own PR → stop before execute (handoff gate)
→ execute (per increment: implement → commit → review → distill) → reviewed PR stack
Three of those gates are hard stops where the user must say yes before the chain advances:
design approval (owned by woostack-ideate, step 1), spec approval (step 3), and the
execution handoff (step 8). Because woostack-build writes the spec in step 2, it also owns
the "user reviews the written spec" gate in step 3. The execution-handoff gate is build's own:
no sub-skill owns the plan→execute boundary, so build adds it to let you stop after planning
and execute later or elsewhere.
Hardening runs twice — once on the spec (step 3) and once on the plan (step 6) — but only the spec harden feeds a gate (the spec-approval gate, step 3). The plan harden amends the plan in place and hands straight back, and committing the spec+plan PR (step 7) is a work step, not an approval stop. The execution-handoff gate (step 8) is build-owned, not harden-owned, and sits after that PR. So the chain has exactly the three hard gates above.
woostack-ideate to explore
the problem and converge on a design. Let it run its own approval gate. It hands back an
approved design and stops there — it writes no spec and chains no plan, so the next steps
are yours to drive.docs/specs/ location. Instead author a markdown spec to
.woostack/specs/YYYY-MM-DD-<slug>.md, populating
references/spec-template.md. Markdown specs are the source
of truth: they carry type: spec frontmatter, are Obsidian vault nodes that can [[link]]
memory notes, and are excluded from memory recall routing by type. Visualize on demand —
if a rich view is wanted, hand the markdown to
woostack-visualize (audience engineer for specs; it
uses references/spec-template.html as a starting point).
The HTML is a presentation target only, never the authored source. Set the spec's
status: draft in frontmatter — the build loop owns the status: enum and authors a
transition at each step so /woostack-status can read it (the enum and join contracts live
in ../woostack-status/references/conventions.md;
link it, do not restate it).woostack-harden against the spec. Amend the spec
in place until hardening stops producing new questions, then set status: hardened. Then
always present the written spec to the user and get explicit approval before planning —
this is a hard gate. Point the user at the file path (offer a woostack-visualize render if
it helps), wait for a clear yes, and make any requested changes before advancing. When the
gate clears, set status: approved. Do not proceed to step 4 on inferred or assumed
approval; silence is not a yes.woostack-plan with the approved spec path. It writes the
plan to .woostack/plans/<spec-basename>.md (same basename as the spec), opens with the
**Source:** .woostack/specs/<file>.md line so the board joins it 1:1, stays
frontmatter-free, structures it as PR-sized increments, and sets the spec's
status: planning. It writes the plan and hands back, owning no gate. woostack-plan
ships in this collection, so the build loop has no external skill dependencies.woostack-plan already structures the plan as
PR-sized increments; build confirms the increment boundaries are reviewable, independently
shippable, and feed cleanly into woostack-execute. Flag any slice that is not reviewable
or independently shippable and propose a further split before executing. The
spec : plan : PRs = 1 : 1 : N invariant holds throughout: exactly one plan per spec, and
that one plan owns the N increment PRs.woostack-harden again, this
time against the plan and its increment breakdown — stress-test the sequencing, the
increment boundaries, and the verifications until hardening stops producing new questions.
Amend the plan markdown in place as answers land. This adds no approval gate: harden
owns none and hands straight back. The chain's last hard stop is the execution-handoff
gate (step 8), after the spec+plan PR — not a plan-quality gate here. Do not turn this
harden into a plan-approval gate..woostack/ spec and plan via woostack-commit on a fresh
Graphite branch and open a PR. This docs-only PR is the base of the stack — execution
increments (step 9) stack on top of it via gt create. It carries no code and is never
merged by build. This is a work step, not an approval stop..woostack/plans/…), the
spec+plan PR URL, and — on request — a
woostack-visualize render of the plan (audience
engineer). Then ask the user to choose:
woostack-execute in this session./woostack-execute <plan-path>).
Ambiguous or no answer is not a "go": never auto-run execute without an explicit
go-ahead. This is the chain's last hard gate.woostack-execute with the plan path to
work the plan as PR-sized stacked increments on top of the spec+plan PR — each implemented
with TDD, the plan's checkboxes ticked in place, committed via woostack-commit, reviewed per
the execution mode woostack-execute selects (woostack-review --fast in inline mode, or the
per-task spec+quality subagent loops in the default subagent mode), and distilled into
.woostack/memory/ — pausing only on a blocking stop. woostack-execute owns the
per-increment commit/review/distill cadence and the inline-vs-subagent mode choice (one plan
per spec, multiple stacked PRs per plan), so it absorbs what used to be separate "distill
memory" and "offer the PR" steps here. As branches, commits, and increment PRs appear the
spec advances into the executing → in-review band (and done post-merge); the board
computes that band from the artifacts via its truth table, so a lagging authored
status: is reconciled rather than trusted blindly.woostack-execute open them as work
steps) and never merges.woostack-plan on assumed
or inferred approval..woostack/. Never write specs to a generic location
outside .woostack/. HTML is a render-on-demand target only, not the authored format.status: through the loop. Set the spec's status: at each step — draft (step
2), hardened then approved (step 3), planning (step 4, authored by woostack-plan); the
execute phase advances the executing/in-review band, which the board also computes from
artifacts. The phase enum and the spec : plan : PRs = 1 : 1 : N join contracts are defined once in
../woostack-status/references/conventions.md —
link it, never restate it.woostack-execute writes scoped, deduplicated memory
notes per increment — never feature-specific trivia, never a duplicate of an existing note. A
small curated store beats a large noisy one.testing
Use to show the derived woostack feature board — for every spec in .woostack/, its reconciled phase, plan progress, increment-PR state, owner, age, and the single next action, plus flags for any drift between the authored status field and the artifacts on disk. Read-only; never fetches, commits, or pushes. Use for /woostack-status, "what's in flight", or "what should I do next".
development
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.
development
Use as woostack's systematic-debugging phase — find the root cause of a bug, test failure, or unexpected behavior before any fix, then fix it minimally with a failing test first. Retells the four-phase method (root-cause investigation → pattern analysis → hypothesis/test → implementation) with the Iron Law (no fix without root cause) and the 3-fixes-→-question-architecture escalation, wired to the .woostack/memory store (recall known gotchas at start, distill one gotcha at end). Invoke via /woostack-debug <target> for a look-before-fix gate, or with --auto for autonomous operation (woostack-execute dispatches --auto on a repeatedly-failing verification; woostack-review suggests the gated command for a confirmed bug). Owns no spec/plan/status, never commits or merges.
development
Use to harden a plan, spec, or design by relentless interview — walk every branch of the decision tree, resolve each open question one at a time with a recommended answer, and amend the artifact in place until no new questions remain. This is the harden phase of the woostack build loop (woostack-build steps 3 and 6 — first the spec, then the plan); also usable standalone to stress-test or "grill me" on a design before committing to it.