Exhaustive idea extraction through recursive breadth-before-depth exploration with Deep Think protocol and fractal structure. Use during /ideate to transform raw ideas into comprehensive, structured ideation output. Writes to a fractal folder hierarchy — every node has an index, CX file, and children.
This pipeline does not build MVPs. It does not produce shallow specs. It does not create technical debt by rushing past the ideation phase. The ideation phase is where the entire downstream pipeline gets its DNA — if the ideation is shallow, every spec, every architecture decision, every line of code downstream will be shallow too.
This skill is an exhaustion engine designed to extract every ounce of product vision from the user. Your job is not to collect answers. Your job is to generate new thinking in the user by asking questions they haven't considered, exploring edges they haven't mapped, and helping them make decisions they haven't faced yet.
The Deep Think Protocol is the core mechanism: at every step, you actively reason about what should exist based on domain knowledge, industry patterns, and cross-domain interactions — then present hypotheses to the user for confirmation or rejection.
This skill writes directly to the .memory/wiki/specs/ideation/ folder using a fractal pattern — every node in the tree (surface, domain, sub-domain) follows the same structure:
{node}/
├── {node}-index.md ← what's in this node, child listing, Role Matrix
├── {node}-cx.md ← cross-cuts connecting this node's children
├── child-01/ ← same pattern repeats (if child is complex)
└── 01.01.01-feature.md ← leaf node = .md file, not a folder
Key rules:
.factory/skills/prd-templates/references/fractal-node-index-template.md.factory/skills/prd-templates/references/fractal-cx-template.md.factory/skills/prd-templates/references/fractal-feature-template.mdThe top-level ideation-index.md uses a different template: .factory/skills/prd-templates/references/ideation-index-template.md
The top-level ideation-cx.md uses: .factory/skills/prd-templates/references/ideation-crosscut-template.md
Numbers are hierarchical and dot-separated within a surface:
{domain}.{sub-domain}.{sub-sub}.{feature}
01 . 01 . 02 . 03
01.03.02-ai-assistant/01.03.02.03-parts-recommendation.mdweb/02.01.03, desktop/01.03.02This classification must happen BEFORE any domain files are written. It determines the folder layout for the entire ideation phase. The classification is performed in
ideate-extract(Step 1.3) and recorded inideation-index.md.
| Shape | Signals | Folder Structure |
|---|---|---|
| Single-surface | One platform, one audience, "make me a website" | Domains are top-level children of ideation/ (no surfaces/ folder) |
| Multi-surface-shared | 2+ platforms, same stack, >80% shared logic | Domains at top level with surface annotations in feature files |
| Multi-product (hub-and-spoke) | 2+ platforms, one is clearly the central platform/API. Others consume from it. | surfaces/ with hub surface owning shared domains. Spokes reference hub via CX. |
| Multi-product (peer) | 2+ platforms, no clear primary. Each is equally independent. | surfaces/ with shared/ folder as a peer for truly cross-surface domains. |
| Input Mode | How Structure Is Determined |
|---|---|
| Interview (verbal / no input) | Ask the user directly — see Interview Questions below |
| Document (rich / thin) | Scan for surface signals — see Detection Signals below |
| One-liner | Infer from the description — "make me a website" = single surface, skip the question |
When the input doesn't make the project shape obvious, ask these questions immediately after the opening problem statement question — before any domain exploration or file creation:
"Who are the distinct user types or audiences?"
"What platforms or surfaces does this need to live on?" (web, mobile, desktop, API, CLI)
"Is there a primary platform that the other surfaces depend on — like a central API or web platform? Or are all surfaces independent peers?" (only if multi-product)
When processing a document, scan for these signals before creating any domain files:
| Signal | Example | Classification |
|---|---|---|
| Distinct platform names in section headings | "Consumer Web Platform", "Shop Software (Tauri)" | Multi-product |
| Different tech stacks mentioned per surface | "Astro/React for web", "Rust/Tauri for desktop" | Multi-product |
| One surface described as "the platform" or "the API" | "Desktop app calls the platform API" | Hub-and-spoke |
| All surfaces access a central database through one API | "Everything goes through the web platform's proxy" | Hub-and-spoke |
| Surfaces described as equally independent | "Web and mobile are separate apps with separate backends" | Peer |
| Single platform implied | "The website will...", "Users visit the app and..." | Single-surface |
When hub-and-spoke is identified:
shared/ folder.When peer mode is identified:
shared/. shared/ is treated as a peer node with the same fractal pattern.shared/ domains. Both surfaces point to shared, rather than one owning it.The classification is recorded in ideation-index.md under ## Structural Classification.
All downstream steps read this section to determine where to place new nodes.
RUN THIS GATE before creating ANY new node — domain, sub-domain, or feature.
"I discovered [thing]. What is it?"
│
▼
Does it belong to an EXISTING domain or sub-domain?
│
YES ──► Does it have 2+ distinct capabilities that interact with each other?
│ │
│ YES ──► It's a SUB-DOMAIN ──► create folder inside existing parent
│ │
│ NO ──► It's a FEATURE ──► create .md file inside existing parent
│
NO ──► (Surface Placement — three questions)
│
Q1: "Where is this PRIMARILY experienced/operated?"
│ (Which surface's user interacts with this most?)
│
Q1a: "Does this concept have a DIFFERENT primary surface
│ for initial setup vs. day-to-day operation?"
│ (e.g., discovered on web, used daily on mobile)
│ │
│ YES ──► SPLIT: setup surface owns data/API domain,
│ │ daily-operation surface gets its own operational domain
│ │ Both are real domains — connect via CX
│ NO ──► proceed with single primary surface from Q1
│
Q2: "Which hub APIs does it consume?"
│ (What data/services does it call from the hub?)
│
├── Primarily experienced on a SPOKE surface
│ ──► It's a SPOKE DOMAIN ──► create in that spoke surface
│ ──► Log hub API dependencies in CX (Q2 answer)
│
├── Primarily experienced on the HUB surface
│ ──► It's a HUB DOMAIN ──► create in hub surface
│
├── No primary surface (pure API/data layer, no direct user interaction)
│ ──► It's a HUB DOMAIN (infrastructure) ──► create in hub
│
├── Setup and daily-operation on DIFFERENT surfaces
│ ──► BOTH surfaces get domains ──► connect via CX
│ (e.g., Consumer Accounts: web owns signup/config,
│ mobile owns daily device management/messaging)
│
└── Equally used across multiple surfaces (rare)
──► It's a shared domain ──► create in shared/ (peer) or hub (hub-and-spoke)
**WHEN UNCERTAIN: Ask the user.** Never assume placement.
Key principle: A domain belongs where it is PRIMARILY USED, not where the data lives. POS is a desktop domain even though payments go through the hub's Stripe API. Inventory is a desktop domain even though stock data is in the hub's database. The hub API dependency is logged as a CX reference, not as a classification signal.
The key question: "Does this thing have its own internal features that interact with each other?"
| Example | Internal Features? | Classification |
|---|---|---|
| AI Assistant | Yes: task generation, guided workflow, parts recommendation, test tracking — these interact | Sub-domain (folder) |
| Print Receipt | No: it does one thing | Feature (file) |
| Inventory Manager | Yes: stock tracking, reorder alerts, supplier integration | Sub-domain or Domain depending on scope |
| Password Reset | No: single flow with edge cases | Feature (file) |
| ❌ Wrong | ✅ Right |
|---|---|
| Creating "Print Receipt" as a new domain | Recognizing it's a feature within POS/Payments |
| Classifying POS as a hub domain because it calls Stripe | Classifying POS as a desktop domain because the shop tech primarily operates it there |
| Creating a domain for every feature mentioned | Grouping related features under their parent domain/sub-domain |
| Pre-creating 4 levels of empty folders | Creating depth reactively as complexity is discovered |
Putting a shared domain in shared/ when hub-and-spoke is active | Putting it inside the hub surface, with CX references from spokes |
| Using source document headings as the domain map | Extracting concepts from the content and classifying each through the gate |
| Creating a domain folder for every heading in the source | Only creating domain folders for concepts that pass the gate as true domains |
| Collapsing a rich multi-system area into a single domain | Recognizing 2+ interacting capabilities = sub-domain or promoted domain |
| Creating "Data Architecture" or "Tech Stack" as product domains | Noting architectural concerns for /create-prd — they are not product domains |
| Creating folders before presenting the classification to the user | Always presenting the classification table and getting user confirmation first |
| Classifying everything that touches the hub API as a hub domain | Using the "primarily experienced" test — hub API usage = CX, not classification |
The structure is NEVER pre-scaffolded. It grows as the agent explores:
| Discovery Event | Action |
|---|---|
| New surface identified | Create surface folder + surface index + surface CX |
| New domain identified | Run Classification Gate. Create domain folder + index + CX inside correct parent |
| New sub-area with 2+ interacting capabilities | Promote to sub-domain: create folder + index + CX |
| New sub-area with single capability | Create as feature file (.md) inside current parent |
| Feature explored and found to have internal complexity | Promote: convert .md to folder (see below) |
During drilling, a feature might reveal internal complexity that warrants promotion:
{number}-{slug}/ folderExhaustion is checked at the leaves — whatever the deepest items are in each branch:
Status propagation rules:
[EXHAUSTED] → node is [EXHAUSTED][DEEP]+ → node is [DEEP][DEEP] → node stays at its current statusPersonas are defined ONCE in meta/personas.md. This file is the single source of truth.
| Location | What's There | Template |
|---|---|---|
meta/personas.md | Full persona definitions (6 fields each) | Single source of truth |
| Index files → Role Matrix | Grid of children × personas with access icons | fractal-node-index-template.md |
| Feature files → Role Lens | Per-feature access level + specific behavior | fractal-feature-template.md |
| CX files → Role scoping | Which roles are affected by each cross-cut | fractal-cx-template.md |
meta/personas.mdmeta/personas.md FIRST, then referenceBefore starting, classify what the user has provided and select the right mode.
Trigger: User provides substantial existing material (>5KB, detailed docs, chat logs).
The job: Don't lose information. Organize, validate, and fill gaps.
CRITICAL: Extraction mode uses the SAME interview question framework as Interview mode. The document is the interviewee. The only difference is that the document provides answers silently (the agent reads them) instead of interactively (the agent asks the user). Every answer extracted from the document must cite where in the document it came from. Every question the document doesn't answer becomes a real interview question for the user in Phase 2.
The source document's organization is a hint, not the truth. Headings, section numbers, and document structure tell you where to LOOK for concepts. They do NOT tell you what those concepts ARE (domain, sub-domain, feature, cross-cut, or not-a-product-domain). The Node Classification Gate determines what each concept is. NEVER mirror source headings as domains.
Document surface signals ARE classification input. When a concept appears WITHIN a surface-specific section of the document (e.g., "Shop Software", "Mobile App", "Desktop"), that is a strong signal for surface placement. The section heading doesn't dictate the domain NAME, but it DOES inform which surface the concept is primarily experienced on. Use this as input to the "primarily experienced" question in the classification gate.
Process — Phase 1: Interview the Document (silent — no user interaction)
Read/ingest every document provided
Run Structural Classification — determine project shape before creating any files
BLOCKING GATE — Extract concepts, not headings. Read the entire document and identify every concept — a capability, system, feature, workflow, cross-cutting concern, or architectural note. For each concept, record:
BLOCKING GATE — Classify every concept. Run the Node Classification Gate on EACH extracted concept individually. For each concept, answer the gate questions explicitly:
/create-prd, do NOT create a domain| Concept | Source Location | Gate Result | Primary Surface | Also Used On | Reasoning |
|---|---|---|---|---|---|
| Inventory System | lines 982–1017 (§Shop Software) | Sub-domain of Shop Operations | Desktop | Web (read-only dashboard) | 4+ interacting capabilities, primarily operated by shop tech at the counter |
| POS / Payments | lines 1018–1050 (§Shop Software) | Domain in Desktop | Desktop | Hub (Stripe API) | Shop tech runs transactions at register; hub provides payment processing API |
5.5. BLOCKING GATE — Surface Distribution Audit. Before presenting to the user, verify the classification didn't starve any spoke:
For each spoke surface:
5.6. Spoke Persona Walk-Through. For each spoke surface, identify its primary persona(s) and mentally walk through their daily workflow:
Process — Phase 2: Present and Interview the User
Enforcement rules:
Trigger: Brief notes, rough sketch, short PRD (<5KB, structured but shallow).
Process:
Trigger: No file input. User describes idea verbally.
Process:
This is the core behavioral change. At every step of ideation, you actively reason about what should exist — you don't just record what the user says.
At every step — domain discovery, breadth mapping, vertical drilling — pause and ask yourself these four questions before moving on:
"Based on [reasoning], I think [X] might be relevant here. For example, in similar systems, [concrete example]. Is this something your product needs?"
Outcomes:
Record all hypotheses in each feature file's Deep Think Annotations table (see fractal-feature-template.md).
The ideation process is complete for a feature when:
[EXHAUSTED]Goal: Identify ALL domains before exploring ANY of them.
{number}-{slug}/ + index + CXideation-index.md with the complete structure mapGoal: For each domain, map ALL children before drilling ANY.
For each domain (dependency order — foundational first):
[BREADTH]Goal: Drill each child to implementation depth. Deep Think at every step.
For each feature file / sub-domain:
[EXHAUSTED]Cross-cut detection is always-on regardless of mode or level. During all active exploration:
When a cross-cut is identified, log it to the appropriate CX file:
| Discovery Level | Where to Log | Confidence |
|---|---|---|
| During domain mapping | Parent node's CX file + global ideation-cx.md (if cross-surface) | Low |
| During breadth sweep | Domain CX file | Medium |
| During drilling | Sub-domain CX file or feature's cross-cut notes | High |
This is the enforcement mechanism for the Cross-Cut Watch Protocol. "Always-on" means there is a hard gate, not a suggestion.
After ANY of these trigger events, STOP and run this gate before moving to the next item:
| Trigger Event | Example |
|---|---|
| Open question (OQ) resolved | User decides hiring fee model = shop pays |
| Deep Think hypothesis confirmed | Agent proposed AI parts ordering, user confirmed |
| User makes any product decision | User chooses freemium over paid-only |
| Feature deepened reveals dependency | Certification tracking needs data from Training domain |
| Edge case identified with cross-domain impact | Payment failure in domain A must notify domain B |
Gate questions (answer all three):
If YES to any → update the relevant CX file(s) immediately, before moving to the next item. Write the CX entry with:
If NO to all → proceed. No logging needed for clean passes.
[!CAUTION] The gate is the point. The most common failure mode is resolving an OQ, writing the decision to the feature file, and moving on without checking CX. The hiring fee model affects Payments, Supplier Integration, Analytics, and Consumer Platform visibility — 6 cross-domain connections that would be silently lost without this gate.
For each confirmed cross-cut (CX entry with High confidence), answer all five synthesis questions per the fractal-cx-template.md:
| Decision Type | During Ideation | Example |
|---|---|---|
| Product | Ask the user. It's their product. | "Should free users be able to...?" |
| Architecture | Note for /create-prd. Don't burden the user. | "Should we use SQL or NoSQL?" |
| Implementation | Note for later. Don't even mention it. | "How should we name the routes?" |
Exception: If the user brings up architecture or implementation, engage. Don't refuse — just don't initiate it.
Complete the breadth map of all children within a node before drilling any single child.
Don't start writing the vision summary until:
[DEEP]When the user gives a one-sentence answer to a complex question, don't accept it. Probe.
After every 5-6 questions, pause and summarize to prevent drift.
Be transparent: "We've explored [N] of [M] domains to DEEP level. [Domain X] is still at BREADTH."
/create-prd's jobideate-validate compiles the summary/decompose-architecture's job| In-Platform Messaging | lines 759–788 | Feature of Consumer Platform | Web | Mobile | Single capability with role-based routing, no internal sub-features |
| Data Architecture | lines 1261–1282 | NOT a product domain | — | — | Architectural concern — database selection, sync strategy → note for /create-prd |
| Analytics & Insights | lines 730–758 | Cross-cutting concern | — | All surfaces | Three tiers serving all domains, no exclusive features of its own |
BLOCKING GATE — Build proposed domain map. From the classification table, group concepts into a proposed domain hierarchy:
meta/constraints.md for /create-prd