# Woostack Plan

> Turn one approved specification into a strict sequential chain of PR-sized direct Linear issues, Plane increment child work items, or parentless canonical-repository GitHub issues. Never approves, executes, commits, reviews, or merges.

- Skill: `howarewoo/woostack-plan` (Agent Skill, multi-file: 11 files)
- Install (CLI): `npx skillmds@latest add howarewoo/woostack-plan`
- Raw SKILL.md: https://api.skillmd.com/api/skills/howarewoo/woostack-plan/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: howarewoo (https://skillmd.com/u/howarewoo)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/howarewoo/woostack-plan

---


# woostack-plan

Turn one approved specification into one complete execution plan. Standalone Plan reads one exact
existing Linear project, canonical GitHub Project, or the canonical Plane repository project, derives
and hardens a candidate chain, synchronizes the complete direct-issue, parented specification, or
parentless GitHub graph, independently reads that graph back, and returns the verified result. When
delegated by Build or project-backed Fix, Plan instead drafts the same complete candidate into the
owning workflow's run-scoped manifest with zero provider calls and returns before synchronization.
## Command

```text
/woostack-plan <approved specification> [--project <exact Linear, Plane, or GitHub URL-or-UUID>]
/woostack-plan [--project <exact Linear, Plane, or GitHub URL-or-UUID>]
```
For standalone Linear or GitHub use, `--project` is mandatory. For standalone Plane use, `--project` is optional
and omitted input uses the exact `artifacts.plane.project`; when supplied, it must identify that same
native project. Standalone use requires `artifacts.provider: "linear"`, `artifacts.provider: "plane"`, or
`artifacts.provider: "github"` in effective repository configuration. When `artifacts.provider` is "local"
or omitted, standalone Plan fails closed before any provider access with an error stating that provider
operations require `artifacts.provider: "linear"`, `artifacts.provider: "plane"`, or `artifacts.provider: "github"`. There is no CLI provider override.
Standalone Plan loads the shared
[artifact contract](../woostack-init/references/artifact-backends.md), then only the selected row:

| `artifacts.provider` | Provider profile | Synchronization |
| --- | --- | --- |
| `"github"` | [GitHub](../woostack-init/references/artifact-providers/github.md) | [GitHub procedure](../woostack-build/references/github-procedure.md) |
| `"linear"` | [Linear](../woostack-init/references/artifact-providers/linear.md) | [Linear procedure](../woostack-build/references/linear-procedure.md) |
| `"plane"` | [Plane](../woostack-init/references/artifact-providers/plane.md) | [Plane procedure](../woostack-build/references/plane-procedure.md) |

For Linear, resolve only the exact selected project, which must already exist and match the canonical
repository. For GitHub, resolve only the exact selected canonical Project URL, which must already exist
under the configured owner and match the canonical repository. For Plane, resolve only the exact configured
project, requiring any explicitly supplied `--project` to identify the same native project. The project
must match the canonical repository and belong to the configured provider scope. Wrong resource type,
missing project, foreign scope, incomplete read, or conflicting content blocks before mutation.
There is no fuzzy-discovery or alternate-provider path. Standalone Plan also reads the repository,
canonical parent branch and last admitted tip, existing patterns, and relevant tests.
Build/Fix-delegated Plan instead obeys the shared
[manifest contract](../woostack-init/references/artifact-backends.md#minimal-resumable-manifest-schema);
it reads no provider context or synchronization procedure during the delegated phase.
Repository parent-tip admission follows the shared
[repository ancestry contract](../woostack-init/references/artifact-backends.md#repository-ancestry-and-base-change-detection);
Plan owns only the approved parent-branch intent and last-admitted-tip handoff.

## Input and ownership

The input is one complete specification containing goal, users, behavior, constraints, exclusions,
architecture decisions, acceptance criteria, and verification expectations. Missing or conflicting
product decisions return to the owning workflow; Plan never invents product decisions and never
creates an approval event.

Build or Fix delegates candidate planning with the readable specification, baseline identity, and
verified run manifest. Delegated planning performs no provider read or mutation; it atomically
records complete candidate contracts, stable local task keys, dependencies, and unresolved questions
in that manifest. The owning wrapper hardens the manifest and writes `execution-plan.md` directly
under `.woostack/tmp/runs/<run-id>/`. In standalone use, Plan itself hardens and synchronizes the
graph. In every mode, Plan owns no implementation, source edit, commit, branch, PR, review, merge,
or execution handoff authority.

## Direct issue contract

Create or reconcile exactly one direct project issue (for Linear), parentless repository issue with direct
Project membership (for GitHub), or child increment work item under the `[Plan] <goal>` specification work
item (for Plane) for each execution increment. Never create extra container, checklist, layer, or
synthetic issues. Historical parent/container issues are not current
increments and are not detached, migrated, archived, deleted, or treated as containment. Every direct issue
or increment work item must retain these fields in its complete description:

- stable task ID, unique positive ordinal, concise outcome, and exactly one intended PR;
- exact scope and explicit non-goals;
- affected files, symbols, or a bounded discovery surface, with relevant interfaces and constraints;
- observable acceptance criteria defining completion;
- focused checks and one executable smoke scenario;
- material risks, active blockers, and relevant documentation, migration, deployment,
  compatibility, or cross-increment effects; and
- a declared Graphite parent and exact predecessor dependency binding.

When an increment touches an inter-application boundary (HTTP/RPC server-client, service-to-service, webhooks, queues/events, or third-party APIs in either direction), the direct issue contract must explicitly identify each boundary and specify adapter mapping, boundary validation/narrowing, transport error translation, app-local placement, wire/API compatibility, and focused boundary test obligations following the canonical [application-boundary adapters rule](../woostack-bootstrap/references/patterns.md#3-application-boundary-adapters). Do not demand identity-only or no-op wrappers when a deliberately shared contract is already the application/domain shape.

Before admitting any verification command or smoke scenario, independently verify each named
repository-local script or path already exists at the last admitted repository parent tip, is created by a predecessor
increment whose native dependency orders it before use, or will be created by the same increment
before use. Verify a manifest-defined command against its exact manifest entry and state any
external runtime prerequisite. A missing or invented command blocks plan persistence; never defer
existence checking to Execute.


## Chain invariants

The plan is a strict sequential chain. If there are `N` increments, ordinals are exactly the positive
integers `1..N`, each ordinal and task ID is unique, and each native Linear dependency, GitHub blocked-by
dependency, or Plane sibling blocking relation is exactly the matching predecessor edge:

```text
ordinal 1: no predecessor
ordinal k (2..N): ordinal k-1 → ordinal k
```
No missing, extra, branching, cyclic, or synthetic dependency is valid. The declared Graphite parent
for ordinal 1 is the approved integration parent branch; for every later ordinal it is the
immediately preceding increment's branch. Bind that stable parent-branch intent in
each complete issue description and carry the last admitted tip as separate repository evidence for
Execute's base-change check. A different branch identity, unknown task, ordinal gap, out-of-order edge,
or parent that Graphite cannot represent blocks the plan. Validate that every acceptance criterion is
covered exactly by at least one increment and that every issue contract is complete before any provider
mutation.

Prefer the fewest independently reviewable increments that deliver coherent outcomes. Do not
split by file or layer merely to manufacture issues. Leave coding order and implementation
decomposition to the executor within each approved increment's scope.

## Provider synchronization

In standalone use only, after the chain is complete and valid, verify the canonical repository
association and selected workspace/team or instance/workspace, then apply the
[existing-description mutation invariant](../woostack-init/references/artifact-backends.md#existing-description-mutation-invariant)
while synchronizing one exact project graph through the matching provider synchronization procedure
([GitHub](../woostack-build/references/github-procedure.md),
[Linear](../woostack-build/references/linear-procedure.md), or
[Plane](../woostack-build/references/plane-procedure.md)):

1. Reconcile the complete current project context (for GitHub, write the managed README section and
   update `shortDescription`; for Plane, create/update the top-level `[Plan] <goal>` specification work item with `parent = null`).
2. Create or reconcile exactly one direct project issue (Linear), parentless repository issue in the canonical
   repository with direct Project membership (GitHub), or child increment work item with `parent = <spec-item-UUID>`
   (Plane) per increment with its full contract.
3. Create or reconcile only the strict predecessor dependency chain (for GitHub and Plane, `N-1` native
   blocking relations/dependencies: predecessor blocks successor).
4. Independently read every project, spec item (where applicable), issue/work item, membership, description,
   and dependency edge back; accept the plan only when the complete graph matches the candidate.
Preallocate stable mutation identities, make reconciliation idempotent, and preserve unknown
outcomes for recovery without allocating replacements. This standalone synchronization is
unchanged, owns no approval gate, and does not use the Build/Fix run manifest.

When delegated by Build or Fix, stop before every provider read or synchronization. Return the
complete manifest-backed candidate contracts and strict chain to the wrapper. The wrapper hardens
the manifest, writes `execution-plan.md`, displays every concise stable task and dependency mapping,
and owns optional post-drafting mirror synchronization (when `artifacts.provider: "linear"`,
`artifacts.provider: "plane"`, or `artifacts.provider: "github"`) and exact read-back.

## Return

Return the complete ordered task contracts, exact project or baseline identity, strict predecessor
and Graphite parent edges, repository assumptions/effects, focused verification strategy,
read-back evidence, provider mutation/read counts, and stable mutation identities. Delegated Plan
returns its run/process/manifest identity and makes no provider claim. Do not return a parent-plan
identity or an execution claim.

## Hard constraints

- One approved specification in; one coherent strict chain out.
- One direct project issue (Linear), parentless repository issue with direct Project membership (GitHub), or specification child work item (Plane) per increment; no extra
  container issue and no hidden planning ledger.
- Ordinals are exactly `1..N`; native dependencies are exactly `N-1 → N`.
- Standalone Plan requires `--project` for Linear and GitHub; for Plane `--project` is optional and omitted input
  uses the exact `artifacts.plane.project`.
- Every issue carries the complete outcome, scope, acceptance, verification, and declared
  Graphite parent/dependency contract.
- Delegated Build/Fix planning performs zero provider reads and writes; its wrapper hardens,
  writes plain `execution-plan.md`, and optionally synchronizes when mirroring is enabled.
- Standalone Plan keeps its direct project synchronization and independent read-back unchanged.
- Plan owns no implementation, source edit, commit, branch, PR, review, merge, or execution.
- No credential reads, fuzzy artifact discovery, implicit project creation (outside omitted-project Plane
  first use), alternate provider, synthetic dependencies, or obsolete container prose.
- Never claim synchronization or independent read-back without evidence.

