whiteboarding
Brainstorm and plan features through codebase search, technology research, and 2-3 approach comparison before producing implementation-ready plans. Use when starting features, designing solutions, or planning complex work. Triggers on: whiteboard, let's plan, brainstorm, design this, figure out how to build. Save plans to docs/plans/ for execution via /code-foundations:building.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Skill: whiteboarding
Discover -> Classify -> Plan -> Contract -> Validate -> Save -> Handoff
The plan is a contract between whiteboarding and building. It specifies WHAT and WHY at the strategic level, with explicit interfaces between phases. Subagents determine HOW through fresh codebase discovery and loaded design skills.
Quick Reference
| Step | Goal | Output |
|---|---|---|
| DISCOVER | Search codebase + clarify problem | Pattern summary + problem statement |
| CLASSIFY | Determine complexity track | Simple / Medium / Complex |
| EXPLORE | Research technologies + compare approaches (Medium/Complex) | Chosen approach with rationale |
| DETAIL | Break into phases using track-specific template | Phase specs |
| SELF-CHECK | Verify plan completeness + coherence | Validated plan ready for user review |
| VALIDATE | User confirms + test coverage decision | Approval |
| SAVE | Write to docs/plans/ | Plan file ready for /code-foundations:building |
| HANDOFF | User chooses next step | Build or manual execution |
Crisis Invariants - NEVER SKIP
| Check | Why Non-Negotiable |
|---|---|
| Search codebase BEFORE questions | Patterns exist that user may not know about |
| Classify complexity BEFORE detailing | Wrong track = wrong ceremony = wasted effort or missed risks |
| Research BEFORE proposing approaches | Uninformed proposals waste user's decision-making |
| One question at a time | Multiple questions = cognitive overload = shallow answers |
| 2-3 approaches before committing (Medium/Complex) | First idea is rarely best; comparison reveals trade-offs |
| File paths are HINTS, not mandates | Pre-gate agent discovers actual files; plan paths go stale |
| No implementation details in phases | Pre-gate writes pseudocode after fresh discovery; plan-level design is pre-discovery guesswork |
| Plans must be pipeline-compatible | The building pipeline dispatches subagents autonomously. Plans must not introduce interactive user prompts between sub-phases (e.g., "Fix now or proceed?"). Use deterministic rules instead (e.g., "max 2 retry iterations") |
| Include Approach notes for non-discoverable decisions | User decisions (JWT not sessions, event-driven not polling) cannot be rediscovered by subagents |
| Self-check before user validation (Medium/Complex) | Catches structural gaps before the user reviews |
| User confirms each section | Unvalidated plans diverge from user intent |
| Save before executing | Plan file enables context refresh + checklist tracking |
Step 1: DISCOVER (Pattern Discovery + Questioning)
Step 1a: Codebase Search (MANDATORY - Do First)
Before asking ANY questions, search the codebase:
SEARCH FOR:
1. Similar features/functionality (grep for keywords)
2. Same directory/module patterns (read nearby files)
3. Related components (how do similar things work?)
4. Naming conventions (what patterns exist?)
| Search | Action |
|---|---|
| Similar features | grep -r "keyword" across codebase |
| Module patterns | Read 2-3 files in target directory |
| Related components | Find how similar problems were solved |
| Conventions | Note naming, structure, error handling patterns |
Output: Pattern Summary
## Existing Patterns Found
- [pattern 1]: [where found, how it works]
- [pattern 2]: [where found, how it works]
## Conventions to Follow
- Naming: [observed pattern]
- Structure: [observed pattern]
- Error handling: [observed pattern]
## Similar Implementations
- [file]: [what it does, relevance]
If no patterns found: State "No existing patterns found for [topic]. This will establish a new pattern."
Step 1b: Adaptive Questioning
After pattern discovery, classify complexity using the signal table in Step 2 (CLASSIFY). State the classification, then ask questions accordingly.
Question Sequence (Ask ONE at a time via AskUserQuestion)
ENFORCEMENT: Each question below MUST use AskUserQuestion tool. Do NOT output questions as text -- the tool forces a stop and wait. No proceeding until the user answers.
Simple (2-3 questions):
- What specific outcome do you want?
- What constraints should I know about?
- What does "done" look like?
Medium (add these): 4. Who/what will use this? 5. What could go wrong?
Complex (add these): 6. What other systems does this touch? 7. What's the rollback plan if it fails? 8. What's the testing strategy?
NOTE: Questions about "existing patterns" removed -- we searched instead of asking.
Question Format
Use multiple-choice when possible:
Which authentication approach fits best?
- [ ] JWT tokens (stateless, scalable)
- [ ] Session cookies (simpler, server-state)
- [ ] OAuth2 (if external providers needed)
- [ ] Other (describe)
Questioning Gate
STOP. You CANNOT proceed to Step 2 until ALL of the following are true:
- Codebase searched
- Complexity classified (Simple/Medium/Complex)
- Minimum questions asked: Simple=2, Medium=4, Complex=6
- Each question asked via
AskUserQuestion(not text output) - Each answer received and recorded
If you catch yourself about to skip to approaches -- STOP. Count questions asked. If below minimum, ask the next one.
Output: Problem Statement
After ALL questions answered, summarize:
## Problem Statement
[1-2 sentences describing what we're building]
## Constraints
- [constraint 1]
- [constraint 2]
## Success Criteria
- [criterion 1]
- [criterion 2]
Get user confirmation via AskUserQuestion: "Does this capture what you want?"
Step 2: CLASSIFY (Complexity Assessment)
Classify BEFORE Proceeding
After pattern discovery and questioning, classify the task using these signals:
| Signal | Simple | Medium | Complex |
|---|---|---|---|
| Files touched | 1-3 | 4-8 | 9+ |
| Patterns involved | 1 known pattern | 2-3 patterns, some new | Multiple new patterns, cross-cutting |
| Cross-cutting concerns | None | 1-2 (e.g., auth, logging) | 3+ (e.g., auth, caching, migration, backward compat) |
| Uncertainty | Low -- clear what to build | Medium -- approach unclear | High -- requirements or feasibility uncertain |
| Phase count | 1-2 | 3-5 | 5-7 |
State classification explicitly:
"Based on pattern discovery, this is a [Simple/Medium/Complex] task. [1-sentence justification based on signals above]. I'll follow the [Simple/Medium/Complex] track."
If uncertain between two tracks, choose the higher one. Under-planning costs more than slight over-planning.
Track Overview
| Track | Phases | Ceremony | Approach Comparison | Self-Check |
|---|---|---|---|---|
| Simple | 1-2 | Flat checklist, 50-75 words/phase | Skip (unless conflicting patterns found) | Skip |
| Medium | 3-5 | Contract, ~100-150 words/phase | 2 approaches | Full |
| Complex | 5-7 | Full contract with risk/uncertainty, ~100-150 words/phase | 2-3 approaches + pre-mortem | Full |
Hard cap: 7 phases regardless of complexity. If you need more than 7, the scope is too large -- split into multiple plans.
Step 3: EXPLORE (Research + Approaches)
Simple Track: SKIP This Step
For Simple tasks, the approach is usually obvious from the codebase patterns found in Step 1. Proceed directly to DETAIL.
Exception: If pattern discovery found conflicting patterns, do a quick 2-approach comparison even on Simple track.
Medium Track: Compare 2 Approaches
Complex Track: Compare 2-3 Approaches + Pre-Mortem
Research Before Proposing (Medium/Complex Only)
Codebase Research
SEARCH FOR:
1. How similar problems are solved in this codebase
2. What libraries/patterns are already in use
3. What the codebase is NOT using (intentional omissions?)
| Check | Why |
|---|---|
| Existing dependencies | Don't propose new lib if similar exists |
| Rejected patterns | Check git history/comments for "we tried X" |
| Team conventions | Match what's already working |
Web Research (When technology choice is involved)
Use WebSearch/WebFetch when:
- Comparing libraries/frameworks
- Evaluating technology trade-offs
- Checking current best practices (your knowledge may be outdated)
SEARCH FOR:
1. "[technology A] vs [technology B] [current year]"
2. "[problem domain] best practices [current year]"
3. "[framework] [specific feature] implementation"
Output: Research Summary
## Codebase Findings
- Already using: [libraries, patterns]
- Similar solutions: [where, how]
## Web Research (if applicable)
- [Technology A]: [pros, cons, current status]
- [Technology B]: [pros, cons, current status]
- Recommendation: [based on research]
Generate Alternatives
Approaches must be STRUCTURALLY different (different technology, pattern, or architecture). Variations of the same approach do NOT count:
- Bad: "JWT with refresh tokens" vs "JWT without refresh tokens" = same approach
- Good: "JWT tokens" vs "Session cookies" vs "OAuth2" = different approaches
Approaches must be informed by research. Don't propose technologies you didn't research.
If user mentioned a solution in their initial request (e.g., "I'm thinking JWT"), this is exploratory input, NOT a decision. Still present structurally different alternatives.
| Approach | Trade-offs | Best When | Research Source |
|---|---|---|---|
| Option A | [pros/cons] | [conditions] | [codebase/web] |
| Option B | [pros/cons] | [conditions] | [codebase/web] |
Pre-Mortem (Complex Track Only)
After presenting approaches, before the user chooses, run a pre-mortem:
## Pre-Mortem: What Could Kill This Plan?
| Failure Mode | Probability | Impact | Which Approach Survives? |
|-------------|-------------|--------|-------------------------|
| [failure 1] | LOW/MED/HIGH | LOW/MED/HIGH | [approach] |
| [failure 2] | LOW/MED/HIGH | LOW/MED/HIGH | [approach] |
Decision
Ask: "Which approach do you prefer, or should I elaborate on any?"
Record chosen approach and rationale:
## Chosen Approach: [Name]
**Rationale:** [why this over others]
**Fallback:** [1 sentence: what to try if the chosen approach hits a wall]
Step 4: DETAIL (Track-Specific Phase Specs)
The Plan Is a Contract
The plan specifies WHAT and WHY. Subagents determine HOW. Each phase is a contract between the planning session and the building pipeline's independent subagents.
The plan has four readers with different needs:
| Reader | Needs from Plan | Ignores |
|---|---|---|
| Building orchestrator | Phase names, ordering, model hints, Done-when item counts | Implementation details |
| Pre-gate agent | Goal, scope, constraints, approach notes, file hints | Other phases' internals |
| Post-gate agent | Goal, done-when criteria | How it was implemented |
| Human (user) | Strategic intent, approach rationale, constraint coverage | Pseudocode-level detail |
Simple Track Template (1-2 phases, 50-75 words each)
No approach comparison. No self-check. Present the full plan at once.
Each phase is a flat checklist. No contract structure, no risk analysis.
### Phase N: [Name]
**Model:** [recommended model]
**Goal:** [One sentence: what this phase delivers]
**Scope:**
- IN: [what this phase covers]
- OUT: [what is explicitly excluded]
**Constraints:** [non-discoverable requirements -- omit if none]
**Done when:**
- [ ] [Verifiable criterion]
- [ ] [Verifiable criterion]
Medium/Complex Track Template (~100-150 words per phase)
Present each section and get user confirmation before proceeding to the next.
### Phase N: [Name]
**Model:** [recommended model]
**Goal:** [What this phase accomplishes and why -- 1-2 sentences]
**Scope:**
- IN: [what this phase covers]
- OUT: [what is explicitly excluded]
**Constraints:**
- [non-discoverable requirement the pre-gate agent must respect]
**Approach notes:** [ONLY non-discoverable user decisions -- omit if none]
- [decision + rationale]
**File hints:**
- `path/to/area/` -- [why relevant]
**Depends on:** [Phase X] | **Unlocks:** [Phase Y]
**Done when:**
- [ ] [Observable, verifiable condition]
- [ ] [Observable, verifiable condition]
**Difficulty:** LOW / MEDIUM / HIGH
**Uncertainty:** [what could change -- or "None"]
What This Template Includes and Why
| Field | Purpose | Who Consumes It |
|---|---|---|
| Goal | Strategic anchor -- WHAT and WHY | All readers |
| Scope (IN/OUT) | Prevents scope creep and scope gaps | Pre-gate agent, user |
| Constraints | Non-discoverable requirements the codebase cannot reveal | Pre-gate agent |
| Approach notes | User design decisions that subagents cannot reconstruct | Pre-gate agent |
| File hints | Focuses pre-gate discovery without mandating specific paths | Pre-gate agent |
| Depends on / Unlocks | Explicit phase relationships for orchestrator | Building orchestrator |
| Done when | Verifiable postconditions for post-gate and VERIFY | Post-gate agent, orchestrator |
| Difficulty | Informs model auto-detection | Building orchestrator |
| Uncertainty | Directs pre-gate to investigate critical unknowns first | Pre-gate agent |
What This Template Deliberately Excludes
| Excluded | Why | Who Handles It Instead |
|---|---|---|
| Pseudocode | Pre-gate writes this after fresh codebase discovery | Pre-gate agent + cc-pseudocode-programming |
| Function signatures | Pre-gate designs these using actual codebase patterns | Pre-gate agent + cc-routine-and-class-design |
| Class hierarchies | Pre-gate designs these using APOSD deep-module principles | Pre-gate agent + aposd-designing-deep-modules |
| Error handling specifics | Implementation agent applies defensive programming | Implementation agent + cc-defensive-programming |
| Edge case enumeration | Post-gate checks 6-dimension correctness | Post-gate agent + aposd-verifying-correctness |
| Exact file paths as mandates | Pre-gate discovers actual file state; plan paths go stale | Pre-gate agent discovery phase |
| Task lists (HOW) | Pre-gate decomposes the Goal into tasks after discovery | Pre-gate agent + loaded skills |
Approach Notes: The Non-Discoverable Exception
Approach notes exist ONLY for decisions the user made during planning that subagents cannot rediscover from the codebase. These are design choices, not implementation details.
Good approach notes:
- "Use JWT not sessions -- user chose stateless for horizontal scaling"
- "Event-driven architecture, not polling -- latency budget is <100ms"
- "Rejected: direct DB access from handlers. Use repository pattern per existing convention."
Bad approach notes (these belong in pseudocode, not the plan):
- "Create a UserService class with getUser(), createUser(), deleteUser() methods"
- "Use bcrypt with 12 rounds for password hashing"
- "Add try-catch around the database call on line 47"
- "Use PERT formula: E = (O + 4M + P) / 6" (the decision to use three-point estimation is non-discoverable; the formula itself is discoverable from any estimation reference)
Test: If the pre-gate agent could arrive at this decision by searching the codebase, it does NOT belong in approach notes. If only the user knows why this choice was made, it belongs.
YAGNI Gate
Before each phase, ask:
- Is this phase actually needed for the stated success criteria?
- Could we ship without it?
- Are we building for hypothetical future needs?
If answer is "not needed now" -> Remove from plan.
Phase granularity test: Each phase should produce a deliverable that is meaningful to the building orchestrator and verifiable by the post-gate agent. If a "phase" describes an internal component of another phase's deliverable (e.g., "selection logic" inside a "review agent"), it belongs in that phase's scope, not as a separate phase. Phases are contracts for WHAT to deliver, not a task breakdown of HOW to build.
Phase Count Guidance
| Complexity | Phase Count | Rationale |
|---|---|---|
| Simple | 1-2 phases | More phases than tasks = overhead exceeds value |
| Medium | 3-5 phases | Standard decomposition |
| Complex | 5-7 phases | If >7, the feature should be split into multiple plans |
Prefer fewer phases within the range. A 3-phase Medium plan is usually better than a 5-phase Medium plan -- fewer phases mean less pre-gate/post-gate overhead per phase and more substantial work per phase. Add phases only when scope boundaries genuinely require separate pre-gate discovery or when different model recommendations apply.
If a phase exceeds 200 words, it is too large. Split it into two phases.
Dependency Structure Guidance
Use the simplest dependency chain that accurately models reality. If Phase 3 and Phase 4 can both start after Phase 2 completes (and they do not depend on each other), express this as a DAG: both depend on Phase 2, and a later phase depends on both. Do not artificially linearize independent work -- it forces sequential execution in the building pipeline when parallel execution would be safe.
Step 5: SELF-CHECK (Plan Integrity Verification)
Simple Track: SKIP This Step
Simple plans are short enough that structural issues are visible on inspection. Proceed to VALIDATE.
Medium/Complex Track: Full Self-Check
Before showing the plan to the user, verify it yourself.
Structural Completeness Check
Run through this checklist silently. Fix any failures before presenting to the user.
| Check | What to Verify | Fix If Failing |
|---|---|---|
| Constraint coverage | Every constraint from Step 1 maps to at least one phase's Constraints field | Add missing constraints to relevant phases |
| Success criteria chain | Done-when criteria across all phases collectively satisfy the Problem Statement's success criteria | Add missing criteria or phases |
| Scope coherence | No phase's IN scope overlaps with another phase's IN scope | Merge overlapping phases or clarify boundaries |
| Scope completeness | The union of all phases' IN scopes covers the full feature | Add missing phases or expand scope |
| Dependency chain | Every phase's Depends-on references an existing phase | Fix references |
| No orphan phases | Every phase either Depends-on something or is Phase 1; every phase Unlocks something or is the final phase | Fix chains |
| Approach notes audit | Approach notes contain ONLY non-discoverable user decisions, not implementation details | Move implementation details out; they belong in pre-gate |
| File hints present | Every phase has at least one file hint to focus pre-gate discovery | Add directory-level hints |
| Done-when verifiable | Every done-when criterion is externally observable (test command, behavior, output) | Rewrite vague criteria |
| YAGNI pass (global) | No phase exists solely for hypothetical future needs | Remove or merge |
Cross-Phase Coherence Check
| Check | What to Verify |
|---|---|
| No contradictions | Phase N's constraints do not contradict Phase M's constraints |
| Interface alignment | What Phase N produces (per Done-when) matches what Phase N+1 assumes (per Depends-on) |
| Progressive delivery | At least one phase produces user-observable output (not just infrastructure) |
| Risk front-loading | Highest-uncertainty phases appear early, not late |
If self-check reveals issues: Fix them before proceeding to user validation. Do not present a plan you know has gaps.
Step 6: VALIDATE (Confirmation Loop)
Test Coverage Question (MANDATORY)
Before finalizing the plan, ask about test coverage:
How much test coverage do you want for this implementation?
1. 100% coverage (Recommended)
Unit tests for all new code + integration tests for critical paths
2. Backend only
Tests for server-side/API changes only
3. Backend + frontend
Tests for both server and client layers
4. None
Skip tests (not recommended - technical debt)
5. Ask at each phase
Decide test scope when building each phase
Record the answer in the plan file under ## Test Coverage.
Inform building: This choice affects POST-GATE behavior -- reviewers will check for tests matching the chosen coverage level.
Full Plan Review
Simple track: Present full plan. Ask: "Does this plan look right? Anything to add or change?"
Medium/Complex track: After all sections confirmed individually, present the full plan structure:
# Plan: [Topic]
## Phases
1. [Phase 1 name] -- [1 sentence goal]
2. [Phase 2 name] -- [1 sentence goal]
3. ...
## Constraint Coverage
- [constraint] -> Phase [N]
- [constraint] -> Phase [N]
## Test Plan
- [test 1]
- [test 2]
## Questions/Concerns
- [any remaining uncertainties]
Ask: "Does this plan look complete? Any phases to add, remove, or modify?"
Step 7: SAVE (Write Plan File)
File Location
docs/plans/YYYY-MM-DD-<topic-slug>.md
Model Recommendations (Apply Per Phase)
When writing each phase, recommend a model based on the phase's content:
OPUS_KEYWORDS = [refactor, architect, migrate, redesign, rewrite, overhaul]
HAIKU_KEYWORDS = [config, rename, typo, bump, cleanup, delete, remove]
If Done-when items <= 2 AND file hints reference <= 2 areas AND no OPUS_KEYWORDS:
-> haiku (simple, mechanical work)
If Done-when items >= 6 OR file hints reference >= 6 areas OR any OPUS_KEYWORD:
-> opus (complex, architectural work)
Otherwise:
-> sonnet (default)
Write **Model:** [model] into each phase heading. This is not optional -- the plan should make the model choice visible so the user can adjust before building begins.
Plan File Schema: Simple Track
# Plan: [Topic]
**Created:** YYYY-MM-DD
**Status:** ready
**Complexity:** simple
---
## Context
[Problem statement from Step 1 -- 2-3 sentences]
## Constraints
- [constraint 1]
- [constraint 2]
---
## Implementation Phases
### Phase 1: [Name]
**Model:** [recommended model]
**Goal:** [One sentence]
**Scope:**
- IN: [covered]
- OUT: [excluded]
**Constraints:** [non-discoverable requirements -- omit if none]
**Done when:**
- [ ] [Verifiable criterion]
---
### Phase 2: [Name] (if needed)
**Model:** [recommended model]
**Goal:** [One sentence]
**Scope:**
- IN: [covered]
- OUT: [excluded]
**Constraints:** [non-discoverable requirements -- omit if none]
**Done when:**
- [ ] [Verifiable criterion]
---
## Test Coverage
**Level:** [100% / Backend only / Backend + frontend / None / Per-phase]
## Test Plan
- [ ] [specific tests]
---
## Notes
- [anything pre-gate agents should know that does not fit in phase constraints]
---
## Execution Log
_To be filled during /code-foundations:building_
Plan File Schema: Medium/Complex Track
# Plan: [Topic]
**Created:** YYYY-MM-DD
**Status:** ready
**Complexity:** [medium/complex]
---
## Context
[Problem statement from Step 1]
## Constraints
- [constraint 1]
- [constraint 2]
## Chosen Approach
**[Approach name]**
[Rationale from Step 3]
**Fallback:** [1 sentence: what to try if the chosen approach hits a wall]
## Rejected Approaches
- **[Approach B name]:** [1 sentence why rejected]
- **[Approach C name]:** [1 sentence why rejected]
---
## Implementation Phases
### Phase 1: [Name]
**Model:** [recommended model]
**Goal:** [1-2 sentences: what and why]
**Scope:**
- IN: [what this covers]
- OUT: [what is excluded]
**Constraints:**
- [constraint]
**Approach notes:**
- [non-discoverable user decision, if any]
**File hints:**
- `path/to/area/` -- [why relevant]
**Depends on:** None | **Unlocks:** Phase 2
**Done when:**
- [ ] [verifiable criterion]
- [ ] [verifiable criterion]
**Difficulty:** [LOW/MEDIUM/HIGH]
**Uncertainty:** [what we don't know, or "None"]
---
### Phase 2: [Name]
**Model:** [recommended model]
...
---
## Test Coverage
**Level:** [100% / Backend only / Backend + frontend / None / Per-phase]
## Test Plan
- [ ] Unit: [specific tests]
- [ ] Integration: [specific tests]
- [ ] Manual: [verification steps]
---
## Assumptions
| Assumption | Confidence | Verify Before Phase | Fallback If Wrong |
|-----------|-----------|--------------------|--------------------|
| [assumption] | HIGH/MED/LOW | [phase N] | [what to do instead] |
## Decision Log
| Decision | Alternatives Considered | Rationale | Phase |
|----------|------------------------|-----------|-------|
| [decision] | [alternatives] | [why this one] | [N] |
---
## Notes
- [edge cases identified during planning]
- [gotchas discovered during codebase search]
- [open questions for future consideration]
---
## Execution Log
_To be filled during /code-foundations:building_
Save Command
mkdir -p docs/plans
# Write plan file
Step 8: HANDOFF
Ask User How to Proceed
After saving the plan, use AskUserQuestion with these options:
Question: "Plan saved to docs/plans/YYYY-MM-DD-.md. How would you like to proceed?"
Options:
- Clear conversation and build (Recommended) - Fresh context for better execution
- Tell me what to do - Get step-by-step instructions to execute manually
If user selects option 1:
Execute /clear command, then immediately run /code-foundations:building docs/plans/YYYY-MM-DD-<topic>.md
If user selects option 2: Provide numbered steps the user can follow to implement the plan manually
What the Plan Specifies vs. What Subagents Discover
The plan is a contract between whiteboarding and multiple independent subagents that start with fresh context. The pre-gate agent loads four design skills, searches the codebase, and writes implementation-ready pseudocode. The plan should give it the right problem, not prescribe the solution.
| Plan Specifies (WHAT + WHY) | Subagents Discover (HOW) |
|---|---|
| Goal per phase | Current codebase state |
| Constraints and non-goals | Specific file paths and function signatures |
| Scope boundaries (IN/OUT) | Implementation patterns and algorithms |
| Success criteria (Done when) | Pseudocode and design decisions |
| Approach rationale and rejected alternatives | Edge cases and error handling |
| Cross-phase dependencies | Integration details |
| Test coverage level | Specific test cases |
| File hints (directional, not mandates) | Actual files to create/modify |
| Difficulty + Uncertainty signals | Task decomposition within phases |
The plan does NOT contain:
- Pseudocode (pre-gate agent writes this after fresh discovery)
- Function signatures (pre-gate designs these with
cc-routine-and-class-design) - Error handling specifics (implementation agent applies
cc-defensive-programming) - Detailed algorithms (pre-gate translates goals into pseudocode)
- Edge case enumeration (post-gate checks these with
aposd-verifying-correctness) - Task lists prescribing HOW (pre-gate decomposes the Goal after discovery)
Anti-Rationalization Table
| Rationalization | Reality |
|---|---|
| "I already know what to build" | Planning reveals unknowns you don't know you don't know |
| "This is too simple for planning" | Simple tasks get the Simple track -- 5 minutes, not 30 |
| "Let's just start coding" | Code without plan = rework later |
| "One approach is obviously right" | Simple track skips comparison. If it's not Simple, compare. |
| "User is waiting, skip questions" | Wrong solution fast < right solution slightly slower |
| "Plan will be outdated by implementation" | Plan specifies WHAT and WHY. Those don't go stale. Implementation details do -- which is why we don't put them in the plan. |
| "Multiple choice is slower" | MC gets precise answers; open questions get vague ones |
| "I'll just plan in my head" | Mental plans don't persist. File = resumable artifact. Skip file = lose all planning work on context refresh. |
| "I'll batch questions to save time" | Batched questions get shallow, incomplete answers. One question = focused, complete answer. |
| "User mentioned X, so that's decided" | User-mentioned solutions are exploratory. Still compare on Medium/Complex. |
| "I'll ask user about patterns" | Search instead. User may not know all patterns. You have tools to find them. |
| "No need to search, I know this tech" | Your knowledge may be outdated. Search confirms current best practices. |
| "Searching takes too long" | 2 min search prevents 20 min wrong-approach rework. |
| "I'll research during implementation" | Research informs approach CHOICE. After choosing, it's too late. |
| "This codebase is new to me" | That's exactly why you search. Don't guess conventions -- find them. |
| "I can infer what they want from context" | Inference is not confirmation. Ask via AskUserQuestion or you'll plan the wrong thing. |
| "I should add implementation details so the subagent knows what to do" | The pre-gate agent writes pseudocode after fresh codebase discovery. Your implementation details are pre-discovery guesswork that will conflict with reality. Specify WHAT and WHY, not HOW. |
| "I'll include function signatures to be helpful" | Function signatures go stale between planning and building. The pre-gate agent designs these using cc-routine-and-class-design with current codebase knowledge. |
| "This phase needs more detail to be safe" | Over-specified plans neuter pre-gate discovery. The agent follows stale instructions instead of adapting to reality. Trust the pipeline: pre-gate has 4 design skills loaded and fresh codebase access. |
| "I should specify edge cases in the plan" | Post-gate checks 6-dimension correctness with aposd-verifying-correctness. Your edge case list will be incomplete; the skill's checklist will not. |
| "File paths need to be exact" | File paths are hints for pre-gate discovery, not mandates. Use directory-level hints. Pre-gate finds the actual files. |
| "Approach notes should explain how to implement" | Approach notes capture user DECISIONS (JWT not sessions). If the pre-gate agent could arrive at the decision by searching the codebase, it does not belong in approach notes. |
| "The plan self-check is overkill" | Self-check catches constraint gaps, scope overlaps, and orphan phases. 2 minutes of checking prevents UPDATE_PLAN pauses during building. |
| "I'll skip the self-check, the user will catch issues" | Users skim plans. They catch intent errors, not structural gaps. Self-check catches structural gaps. Both are needed. |
| "I should add a task list so the agent knows what to do" | Task lists prescribe HOW. The pre-gate agent decomposes the Goal into tasks after discovering the actual codebase state. Your task list is a guess made without that context and it constrains pre-gate from finding a better decomposition. |
| "This Complex task only needs a Simple plan" | Under-planning costs more than slight over-planning. When uncertain, choose the higher track. |
| "Every task needs the Complex track" | Over-planning wastes time and creates brittle, over-specified plans. Classify honestly using the signal table. |
| "75 words is enough for this Medium phase" | Simple track is 50-75 words. Medium/Complex phases need 100-150 words to carry approach notes, file hints, difficulty, and uncertainty signals that pre-gate needs. |
Pressure Testing Scenarios
Scenario 1: User Wants to Skip Planning
Situation: User says "just build it" or "we don't need a plan."
Response: "I can build without planning, but past experience shows:
- Plans catch issues before code exists
- Plan files enable context refresh for better execution
- Checklist tracking reduces forgotten edge cases
This looks like a [Simple/Medium/Complex] task. The [track] takes about [5/15/30] minutes. Want to do a quick plan, or proceed without?"
Scenario 2: Vague Requirements
Situation: User gives unclear or incomplete requirements.
Response: Ask clarifying questions ONE AT A TIME. Do NOT guess or assume. Each question should narrow scope until requirements are concrete.
Scenario 3: User Rejects All Approaches
Situation: User doesn't like any of the 2-3 approaches presented.
Response: "What's missing from these approaches? I'll generate alternatives that address [specific concern]."
Scenario 4: User Wants Implementation Details in the Plan
Situation: User says "be more specific" or "add more detail about how to implement this."
Response: "The building pipeline's pre-gate agent will write detailed pseudocode after searching the codebase. Implementation details I write now would be guesswork that could conflict with what it discovers.
What I CAN add to help:
- More specific constraints (e.g., 'must use existing middleware pattern')
- Approach notes for design decisions (e.g., 'use event-driven, not polling')
- More precise done-when criteria
- File hints pointing to relevant areas
Which of these would help?"
Scenario 5: Self-Check Reveals Major Gap
Situation: During self-check, you discover a constraint from Step 1 that no phase addresses.
Response: Add a phase or expand an existing phase's scope to cover the constraint. Then present the fix to the user: "During plan review, I noticed [constraint] wasn't covered by any phase. I added it to Phase N. Does that look right?"
Scenario 6: Complexity Classification Disagreement
Situation: User says "this is simple" but signals indicate Complex.
Response: "I see [signal 1] and [signal 2] that suggest this is more complex than it appears. The Complex track adds [specific value: approach notes, file hints, uncertainty signals, self-check]. Want to use Medium as a compromise, or go with Simple and accept the risk of missing something?"
Scenario 7: Plan Exceeds 7 Phases
Situation: During DETAIL, you identify more than 7 phases.
Response: "This plan has [N] phases, which exceeds the 7-phase cap. Options:
- Split into two sequential plans (recommended)
- Merge related phases to fit within 7
- Remove lower-priority phases to a follow-up plan"
Scenario 8: Temptation to Add Implementation Detail
Situation: You catch yourself writing function names, file paths, class hierarchies, or algorithms in a phase.
Response: STOP. Delete it. Write what the phase ACCOMPLISHES, not how. The pre-gate agent will figure out how with better information than you have right now. It has 4 design skills loaded, fresh codebase access, and writes pseudocode as its core job.
Chaining
- RECEIVES FROM: User request, feature description, user story
- CHAINS TO: building (via saved plan file)
- RELATED: oberplan, aposd-designing-deep-modules, cc-construction-prerequisites
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-03-11
- Index updated
- 2026-03-11
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!