planning-tools/skills/master-plan-methodology/SKILL.md
This skill should be used when authoring, reviewing, or modifying a multi-phase master planning document via the planning-tools plugin (especially the /plan-master and /plan-verify commands). Codifies the universal core sections, trigger-based optional sections, integer-only phase numbering, Open Questions placement, one-PR-per-plan rule, status conventions, evidence attribution, callouts, cross-reference formats, the v0.3.0 list-shape mandate (phases and questions are heading + bulleted list, never markdown tables), the v0.3.1 per-phase TL;DR requirement (1–3 sentence what/why summary under each phase heading for glance-ability), the v0.3.2 plain-bullet scope shape (`- <action>` items, no `- [ ]` checkboxes — the phase status emoji is the sole tick signal), and the v0.3.3 context-block shape (a plan-level `**TL;DR:**` + a bulleted metadata list instead of a `>` blockquote; legacy blockquote blocks accepted silently). Project-agnostic — no ticket-prefix or plan-type taxonomy.
npx skillsauth add oborchers/fractional-cto master-plan-methodologyInstall 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.
A master plan is a long, multi-phase planning document that decomposes a topic, ticket, or roadmap item into actionable phases. Each phase maps 1:1 to a Claude Code /plan-mode session. The master plan is the durable artifact; the per-phase plans in ~/.claude/plans/<slug>.md are ephemeral.
This skill codifies the format and conventions every master plan must follow. The plan-master-architect agent writes plans to this spec; the plan-verifier agent audits plans against it.
The plugin orchestrates master plans through five steps:
/planning-tools:plan-context [topic | path] [--domains a,b,c] — Pre-load context. Stage 1 Triage proposes domains, Stage 2 Confirm checks them with the user, Stage 3 dispatches parallel Explore agents (one per confirmed domain), Stage 4 verifies findings with direct Reads. Emits a scope report. NO plan file written./planning-tools:plan-master [topic] [--context <report-path>] — Draft the master plan. Reuses a fresh /planning-tools:plan-context report if --context is passed; otherwise runs the same Triage + Confirm + Explore + Verify pre-flight internally. Then synthesizes the multi-phase plan via the plan-master-architect agent (opus). Writes to a project-local path./planning-tools:plan-verify <path> — Audit the drafted plan. Dispatches the plan-verifier agent against the plan-verification-checklist skill, presents Critical/Important/Suggestion findings, and (on user approval) appends a - **Verified:** YYYY-MM-DD bullet to the context block (a > **Verified:** line on legacy blockquote plans)./plan. Plan mode produces the per-phase plan in ~/.claude/plans/<slug>.md. User executes the phase and manually ticks the row in the master plan./planning-tools:plan-delete — Clears the per-session plan file. Loop back to step 4 for the next phase.The plugin discovers project-local plan paths in this order, picking the first that exists under the current git repository:
context/tickets/docs/plans/.claude/plans/master/If none exist and the user does not specify a path, the architect asks via AskUserQuestion (the three candidates plus "create new"). Plan filenames default to <TICKET-ID>-PLAN.md if a ticket ID is supplied; otherwise the architect derives a kebab-case slug from the topic.
Every master plan must include these sections in this order:
**TL;DR:** on the first non-blank line under the title: 2–4 sentences capturing what the whole plan does and why. See "Plan-level TL;DR + context block shape" below (v0.3.3+).- **Ticket:** <url> (optional, when a ticket source resolved), - **Ticket(s):** …, - **PRD / Source:** …, - **Evidence:** …, - **Depends on:** …, - **Constraints:** …. No blockquote (v0.3.3+).**Q<N> — <one-line question>:** prefix, placed immediately after the context block (not at the end). No tables.**Q<N> — <question>:** <resolution> shape (may be empty). No tables.### Phase <N>: <verb-led name> <emoji> H3 heading per phase, followed by a required **TL;DR:** callout (1–3 sentences, what + why), then a plain unordered bulleted list (- <action> items) as Scope. No tables. No - [ ] checkboxes (v0.3.2+). See the "Per-phase TL;DR" section below for the v0.3.1 TL;DR requirement and "Plain-bullet scope shape" below for v0.3.2+.The architect adds these based on what the work touches, derived from the worker findings — never from a project taxonomy or filename prefix. Each trigger is independent.
| Trigger | Sections to include |
|---|---|
| Work touches database / schema | Data Model or Schema, Rollback Procedure |
| Work touches UI | Problem Statement, Visual Design — ASCII Mockups, UI States / Skeleton Screens, Component Architecture, Layout Audit @ <viewport>, i18n (Key / EN / locale), Manual QA Checklist |
| Work has measurable user-facing impact | Analytics (event shapes) |
| Work touches architecture / cross-cutting concerns | Requirements Coverage (Requirement / Source / Priority / Owner), Architecture, Analysis, Concurrency Model, Non-Functional Requirements, Cross-Ticket Dependencies, Feature/Module Folder Structure |
| Work has operational or financial impact | Cost Summary (€/mo or $/mo with assumptions), Risks + Mitigations (formal risk register), Phase-specific Prerequisites, Appendix (discovery artifacts) |
| Work fixes a production issue | Code Changes (file × phase), Recovery for Affected Records |
| Work must be validated after merge / deploy | Verification (post-merge / post-deploy), Deployment Steps |
| Work accumulates decisions | Design Decisions table (#, Issue, Decision, Rationale) — typically when ≥5 decisions accumulate |
| Work has hidden gotchas | Key Implementation Notes |
| Work changes over time | Revision Log |
| Work has tests | Tests (Unit / Integration / E2E) |
| Work has prerequisites | Prerequisites (what must ship first) |
| Project has guideline docs (e.g., FEATURE.md) | <Project>.md Compliance — checklist against those guidelines |
| Plan ships as a single PR (almost always) | Release — the one PR description that ships after all phases land: title, body summary, manual QA, deployment notes. The only place where git push / gh pr create belong. Optional but recommended for non-trivial plans. |
A master plan ships as one pull request, opened once after the final phase lands — not one PR per phase.
Per-phase git commit and git push are explicitly allowed and encouraged — they keep the working branch in sync, give reviewers a clean per-phase history, and survive machine failures. What is not allowed is opening, merging, or requesting review on a PR per phase.
Phase scope may include:
git add / git commit / git push instructions (per-phase commits to the working branch are fine)Phase scope must not include:
gh pr create instructionsmain / master / develop or any shared branchIf the work requires staged releases (e.g., a feature-flag rollout split across PRs), that is the rare exception and must be modelled as separate master plans, not as per-phase PRs inside one plan.
A single optional Release section at the bottom of the master plan describes the one PR that ships after all phases complete (title, body summary, manual QA steps to run before merge). This is the only place where gh pr create belongs.
Phases are numbered with positive integers only: 1, 2, 3, 4, ….
Forbidden:
0, 0.5, 1.5 (no decimals)1A, 1B, 2A (no letter suffixes)Phase A, Phase B, Phase C (no letter-only)Phase 0–5 (no ranges)Implementation Sub-Phases (no sub-phasing)When sub-phasing feels tempting, either (a) collapse into a single phase with structured Scope, or (b) split into two integer-numbered phases.
The word "Phase" is reserved for these integer-numbered work units inside the master plan document. Internal command stages, workflow steps, or other process descriptions use "Stage" or "step" instead.
XS/S/M/L, T-shirt sizes, time estimates, and any "effort" column are not used. Phases describe scope, not effort.
Each phase heading ends with one of these emoji, separated from the phase name by exactly one space:
⏳ Pending🚧 In Progress✅ Done❌ BlockedExample: ### Phase 3: Wire MutationCache.onError through shouldInvalidateSession ⏳.
The emoji is the last token of the heading line. /planning-tools:plan-tick flips this emoji to ✅ when the phase is verdicted ACHIEVED. Strikethrough (~~Phase 1: …~~) on completed phase headings is allowed but not required.
The phase heading emoji is the sole tick signal (v0.3.2+). Per-bullet checkbox state is no longer used — see "Plain-bullet scope shape" below.
Every phase must include a **TL;DR:** callout — 1–3 sentences capturing what the phase does and why — placed on the first non-blank line under the heading, before the first - scope item.
Shape:
### Phase 3: Wire MutationCache.onError through shouldInvalidateSession ⏳
**TL;DR:** Add a session-classifier branch at the top of `MutationCache.onError` so real session-expired mutations trigger the modal instead of a silent toast. Needed because the existing path only classified queries — mutations 401'd into a dead-end UX.
- <scope item>
- **Exit criteria:** …
Content rules:
Why: master plans accumulate 30–60 bullets across 6–10 phases. Without a glance-able summary, the reader has to scan every bullet to grasp what each phase does. With a **TL;DR:** per phase, scrolling the plan top-to-bottom reading only the bolded TL;DR lines gives a 60-second overview of intent — useful for re-orienting after time away, for reviewers, and for the "did I forget anything?" pass before opening the PR.
Severity if missing: plan-verifier flags missing TL;DRs as Important — readability gap, not correctness gap. Existing v0.3.0 plans without TL;DRs continue to tick, get progress entries, and walk Open Questions. The verifier nudges; it does not block.
Tooling transparency: /plan-tick, /plan-progress, and /plan-open-questions all read per-phase scope as the line region under each heading. The TL;DR is just one more line in that region — invisible to them. No parser updates needed.
The plan opens with a plan-level TL;DR followed by a bulleted context block — not a > blockquote.
Shape:
# <Title>: <one-line synopsis>
**TL;DR:** Add a session-classifier branch so real session-expired mutations trigger the modal instead of a silent toast. The existing path only classified queries — mutations 401'd into a dead-end UX, blocking the StudSek rollout.
- **Ticket:** https://linear.app/acme/issue/SA-2241
- **Ticket(s):** SA-2241 — [StudSek Rollout]
- **PRD / Source:** Linear SA-2241 body + worker findings
- **Evidence:** Live read-only SF probe 2026-06-08 (`scripts/sf-probe.ts`)
- **Depends on:** SA-2241 Chatter comment subsystem (`src/.../comment.ts` write path)
- **Constraints:** ADR-15/25/28/34/47/53; no DB schema change
---
## Open Questions
TL;DR content rules (mirror the per-phase TL;DR):
Context-block bullets: each metadata field is a - **Label:** value bullet. - **Ticket:** <url> is the first bullet and is present only when /planning-tools:plan-master resolved a ticket source (folds in the old above-the-block nav callout). The remaining fields (Ticket(s), PRD/Source, Evidence, Depends on, Constraints) follow. /planning-tools:plan-verify appends a trailing - **Verified:** <date> bullet on PASS.
Why: the old > blockquote context block stacked six-plus bold-prefixed lines of wrapping prose into an unscannable wall that readers skimmed past. A plan-level TL;DR gives the elevator pitch first; bullets make each metadata field individually scannable.
Severity if the plan-level TL;DR is missing: plan-verifier flags it Important (readability gap, not correctness) — same as the per-phase TL;DR rule. Plans without it still tick, verify-to-PASS-reachable, and walk Open Questions.
Legacy blockquote shape (transition). Plans authored before v0.3.3 use a > **Ticket(s):** … / > **Constraints:** … blockquote context block (with > **Verified:** …). These continue to parse and pass verification with no finding — the goal is reducing noise, not creating it. /planning-tools:plan-verify appends the Verified marker as a > line on these legacy plans. New plans use the TL;DR + bullets shape.
The Implementation Phases, Open Questions, and Resolved Questions sections must not use markdown tables. Use:
### Phase <N>: <name> <emoji> H3 headings with - bulleted scope items for phases (v0.3.2+ shape — plain bullets, no - [ ] checkboxes).- **Q<N> — <question>:** bulleted lines for Open and Resolved Questions (free-form prose follows the colon).Why: Markdown tables force each cell onto a single line — phase Scope cells became 1500–2500 char escaped-prose walls that cannot be read without horizontal scroll, cannot contain native lists or code blocks, and consume tokens on pipe-escape overhead. Headings + lists restore native markdown affordances.
Narrow-cell tables elsewhere are still allowed. Architecture matrices, Code-Changes-by-file × phase coverage tables, Dependency tables, Cost summaries, etc., remain in table form — the ban is scoped to phases / questions, where wide cells are the failure mode.
The plan-verifier agent flags any master plan that uses tables for phases or questions as a Critical finding. The /planning-tools:plan-tick command supports the legacy v0.2.x table shape during a transition window so existing plans keep working (it emits a one-line note when it falls through to the legacy parser), but newly-authored plans must use the v0.3.0 shape.
Phase scope is a plain - <action> unordered list — no - [ ] checkboxes. The phase status emoji on the heading (⏳ 🚧 ✅ ❌) is the sole tick signal; per-bullet "done" state is not tracked because in practice it is not maintained.
Bold-prefix scope items still work unchanged: - **Tests:** …, - **Exit criteria:** …, - **Note:** … — the bold label was always the semantic anchor; the bracket was decoration.
Legacy checkbox shape (transition). Plans authored under v0.3.0 / v0.3.1 may use - [ ] / - [x] scope items. These continue to parse — /planning-tools:plan-tick's heading parser strips the optional [ ]/[x] prefix before evidence extraction. No verifier finding is emitted for the legacy shape; the goal is reducing noise, not creating it. New plans should use plain - bullets.
# <Title>: <one-line synopsis>
**TL;DR:** <2–4 sentences: what this plan does and why. The elevator pitch a reader gets before any metadata or phases.>
- **Ticket:** <linear-or-github-url> <!-- optional; only if /plan-master got a ticket source -->
- **Ticket(s):** <Linear/Jira refs or n/a>
- **PRD / Source:** <doc paths>
- **Evidence:** <transcript YYYY-MM-DD speaker quote | bug report | research path:line>
- **Depends on:** <ticket> (<specific artifact>)
- **Constraints:** <viewport, env, etc.>
---
## Open Questions
- **Q1 — <one-line question>:** <free-form context. Blocking: yes/no.>
- **Q2 — <one-line question>:** <context>
## Resolved Questions
- **Q1 — <question>:** <resolution prose, no length limit>
- **Q2 — <question>:** <resolution>
## Implementation Phases
### Phase 1: <verb-led phase name> ⏳
**TL;DR:** <One sentence stating what the phase does.> <Optional 1–2 sentences explaining why — motivation, constraint, gap addressed.>
- <Scope item: action + concrete file path + line range>
- <Scope item with `code spans` and **bolded emphasis** as needed>
- **Tests:** <test files to add/update, named cases>
- **Exit criteria:** <what proves the phase is done — green checks, behavior verified>
### Phase 2: <verb-led phase name> ⏳
**TL;DR:** <What + why, 1–3 sentences.>
- …
- **Exit criteria:** …
## Design Principles
1. …
## What's NOT in <TOPIC> (and why)
- …
<!-- Trigger-based optional sections inserted here based on what the worker findings indicate the work touches -->
Every factual claim in a master plan must be traceable to a source. Use these formats:
<Speaker> <env> bug <YYYY-MM-DD> (<ticket>, <case-ref>) — "<quote>"ADR-NN (short) or context/adrs/NN-<slug>.md (path)Decisions locked <YYYY-MM-DD> or ROADMAP.md#<section><repo-relative-path>:<line> (with line number)context/research/<file>.md (path)Bold-prefix lines for inline emphasis (do not use GitHub-style > [!NOTE] admonitions):
**TL;DR:** … — required under every ### Phase heading (v0.3.1+): 1–3 sentences capturing what the phase does and why. See "Per-phase TL;DR" above for the full rule.**Decision:** … — a settled choice**Rationale:** … — the reasoning for a Decision**Risk:** … — a known risk**Mitigation:** … — how the Risk is addressed**Note:** … — informational asideBlockquotes (>) are reserved for invariants and constraints (e.g., > Templates are immutable after first publish). The top-of-file context block is no longer a blockquote (v0.3.3+) — it is a plan-level **TL;DR:** + a bulleted metadata list. See "Plan-level TL;DR + context block shape" above.
[CI-15](../CI-15-PLAN.md) (relative markdown link)[ADR-008: Template Versioning](../../decisions/ADR-008.md)[Q2 2025 Dashboard Redesign](../../ROADMAP.md#q2-dashboard)| Blocker | Ticket | Status | ETA |When /planning-tools:plan-verify passes a plan, it appends one entry to the context block (not the end of the document), surfacing verification status near the top where it is read first:
- **Verified:** 2026-05-11
> **Verified:** 2026-05-11 line after the last > line of the block.When a rule, threshold, or convention is owned by another skill (e.g., a WCAG contrast ratio in a design-principles plugin), reference the owner — do not restate the rule. Example: Apply WCAG 4.5:1 contrast (see visual-design-principles:accessibility-inclusive-design skill).
Phase 0.5, the answer is to either fold it into Phase 1 or promote it to its own Phase 2./plan mode.tools
This skill should be used when the user invokes any /plan-* command from the planning-tools plugin (/plan-context, /plan-master, /plan-open-questions, /plan-verify, /plan-tick, /plan-progress, /plan-delete), asks how Claude Code's plan files work, asks where plans are stored, asks to author or audit a multi-phase master planning document, asks how to walk through a plan's Open Questions interactively, asks how to write progress entries, or mentions ~/.claude/plans/ or .claude/planning-tools.local.md. Provides the index of planning-tools commands, the master-plan workflow lifecycle, the v0.3.0+ list-shape mandate (phases and questions as headings + bulleted scope items, never tables), the v0.3.2+ plain-bullet shape (no `- [ ]` checkboxes — heading emoji is the sole tick signal), the progress-entry methodology, and the mechanics of Claude Code's plan-mode file storage.
testing
This skill should be used by the plan-verifier agent and the /plan-verify command to audit a drafted master plan against a fixed checklist. Covers universal-core completeness, the v0.3.0+ no-tables-for-phases-or-questions rule, trigger-based section-coverage gaps, phase actionability (heading + per-phase TL;DR + bulleted scope + exit criteria), the v0.3.1+ per-phase TL;DR requirement, the v0.3.2+ plain-bullet scope shape (legacy `- [ ]`/`- [x]` accepted silently), the v0.3.3+ context-block shape (plan-level `**TL;DR:**` + bulleted metadata, legacy `>` blockquote accepted silently), integer phase numbering enforcement, dependency traceability, citation resolution, callout/evidence convention compliance, Open Questions placement, and the one-PR-per-master-plan rule. Single-owner of the audit checklist.
testing
This skill should be used when the user is adjusting spacing, padding, margins, content density, section gaps, vertical rhythm, or separation between elements. Also applies when reviewing whether a design feels cramped or too sparse, choosing between borders and whitespace for separation, or defining a spacing system. Covers the 4px/8px spacing system, macro vs micro whitespace, content density spectrum, separation techniques (whitespace > background shifts > borders), and vertical rhythm.
development
This skill should be used when the user is defining brand personality in design, choosing between illustration and photography, adding motion or animation, creating visual motifs, ensuring layout variety, customizing CSS framework defaults, or calibrating the level of creative expression for a given context. Covers Lavie & Tractinsky's expressive aesthetics, the expression spectrum (restrained to bold), brand personality translation, illustration systems, photography direction, and template independence.