/exp-design
Given an idea (or a free-text hypothesis), design a complete experiment plan.
Claims are the core: scope the claims to validate across three dimensions — Target, Decomposition, and Threats.
Design four types of experiment blocks: baseline (reproduce baseline), validation (core verification), ablation (factor isolation), and robustness (stress testing).
Experiments are ordered by dependency with decision gates between stages (sanity fail → early stop).
Optional Review LLM review checks experiment plan completeness. All experiments are written to wiki/experiments/ with graph edges.
Inputs
idea: one of:
- A slug from wiki/ideas/ (e.g.
sparse-lora-for-edge-devices)
- A free-text hypothesis description (provide the experiment goal directly)
--review (optional): enable Review LLM review to check experiment plan completeness
--budget <gpu-hours> (optional): total compute budget cap (GPU hours), affects robustness experiment scope
Outputs
wiki/experiments/{slug}.md — one page per experiment block (status: planned)
wiki/graph/edges.jsonl — new tested_by edges: experiment → claim
wiki/ideas/{slug}.md — updated linked_experiments field
wiki/graph/context_brief.md — rebuilt
wiki/graph/open_questions.md — rebuilt
wiki/log.md — appended log entry
- EXPERIMENT_PLAN_REPORT (printed to terminal) — experiment block summary, run order, compute budget
Wiki Interaction
Reads
wiki/ideas/{slug}.md — idea's hypothesis, approach, risks, origin_gaps
wiki/claims/*.md — target claims' current status, existing evidence, confidence
wiki/experiments/*.md — existing experiments (avoid duplicate designs, reference setup configs)
wiki/papers/*.md — related papers' baselines and experiment setups
wiki/concepts/*.md — relevant technical concepts (guide experiment design)
wiki/graph/context_brief.md — global context
wiki/graph/open_questions.md — knowledge gaps (guide experiment priority)
Writes
wiki/experiments/{slug}.md — create experiment pages (one per experiment block)
wiki/ideas/{slug}.md — update linked_experiments field
wiki/graph/edges.jsonl — add tested_by edges
wiki/graph/context_brief.md — rebuild
wiki/graph/open_questions.md — rebuild
wiki/log.md — append operation log
Graph edges created
tested_by: claim → experiment (the claim is validated by this experiment)
Workflow
Precondition: confirm working directory is the wiki project root (directory containing wiki/, raw/, tools/).
Step 1: Load Context
- Parse idea input:
- If slug: read
wiki/ideas/{slug}.md, extract ## Motivation, ## Hypothesis, ## Approach sketch, ## Risks, and the frontmatter fields origin_gaps, tags, domain, priority (per CLAUDE.md ideas template)
- If free text: use directly as the hypothesis description
- Load relevant wiki context:
- Read
wiki/graph/context_brief.md (global context)
- Read
wiki/graph/open_questions.md (knowledge gaps)
- From the idea's
origin_gaps, read the corresponding wiki/claims/*.md (target claims)
- From each target claim's
source_papers field, read the corresponding wiki/papers/*.md for baseline setups and prior experiment protocols — this is the canonical path from idea → claim → paper (ideas do not carry a linked_papers field; use origin_gaps → source_papers instead)
- Read existing
wiki/experiments/*.md to check for similar experiments
- If idea has no origin_gaps: extract implied claims from the hypothesis description; search wiki/claims/ or flag as needing new claim creation
Step 2: Scope Claims
Scope the claims for this experiment plan across three dimensions. For each dimension, search wiki/claims/ for existing claims first; if none exist, create a new claim (status: proposed, confidence: 0.3).
- Target (what to validate):
- The claim corresponding to the idea's core hypothesis — the primary target this experiment plan directly validates
- Typically 1, at most 2
- Decomposition (what to decompose):
- Individual contribution claims for each independent factor in the method
- One claim per factor, used to design isolation experiments
- Threats (what could falsify us):
- Known risks, alternative explanations, boundary conditions
- Sources: counter-evidence in wiki, paper limitations, open questions in claims
- Guides robustness experiment design
Output: scoped claims list (slug list + dimension annotation + current status/confidence for each claim)
Step 3: Design Experiment Blocks
Design experiment blocks for each scoped claim. Four types:
A. Baseline experiments (reproduce baseline):
- Purpose: confirm the problem exists and the baseline is reproducible
- Reproduce the core experiment from the most relevant paper
- Success criterion: baseline results deviate < 5% from reported paper values (this threshold is the same one used by the Stage 1 decision gate below — do not introduce a different number elsewhere)
- Compute: typically minimal
B. Validation experiments (validate Target claim):
- Purpose: validate the core contribution on top of the baseline
- Metrics: statistically significant improvement over baseline
- Requires sufficient seed/run count for reliability (recommend >= 3 seeds)
- Compute: moderate
C. Ablation experiments (validate Decomposition claims):
- Purpose: isolate the contribution of each independent factor
- Each ablation removes one factor and validates the resulting performance drop
- N factors → N ablation experiments
- Compute: similar to validation × N
D. Robustness experiments (rule out Threats):
- Purpose: rule out known risks and alternative explanations; verify the method holds under varied conditions
- Variation dimensions: model size, dataset, hyperparameters, domain
- Test at least 2 variation dimensions
- Compute: depends on --budget
Each experiment block includes:
title: descriptive title
target_claim: corresponding claim slug
hypothesis: specific hypothesis the experiment tests
type: baseline / validation / ablation / robustness
setup: model, dataset, hardware, framework
metrics: list of evaluation metrics
baseline: comparison baseline
success_criterion: explicit pass/fail criterion
estimated_gpu_hours: estimated compute time
seeds: number of random seeds (recommend >= 3)
Step 4: Build Run Order
Sort experiments by dependency and set decision gates:
Stage 0: Sanity check
└── Small-scale run (1 epoch / 100 steps) to verify no code bugs, data loads, GPU available, loss decreasing
└── Gate: sanity fails → stop, fix code
Stage 1: Baseline (reproduce baseline)
└── Reproduce baseline results
└── Gate: baseline deviation > 5% → stop, check implementation (same threshold as Step 3 success criterion)
Stage 2: Validation (core verification)
└── Validate core method on top of baseline
└── Gate: no improvement → stop, analyze reason (idea may not hold)
Stage 3: Ablation (factor isolation)
└── Multiple ablations can run in parallel
└── Gate: if a factor ablation shows no effect → record it, but continue other ablations
Stage 4: Robustness (robustness verification)
└── Only execute after Stage 2 succeeds
└── Scope determined by remaining --budget
Output:
- Ordered experiment list (with dependencies)
- Decision gate conditions for each stage
- Total compute budget estimate (if exceeding --budget, adjust Stage 4 scope)
Step 5: Optional Review LLM Review (--review)
If --review is specified:
mcp__llm-review__chat:
system: "You are a senior ML researcher reviewing an experiment plan.
Focus on: missing baselines, missing ablations, unfair comparisons,
statistical rigor (enough seeds?), and dataset selection.
For every issue found, suggest a concrete fix."
message: |
## Experiment Plan
{complete experiment plan: claims, blocks, run order, budgets}
## Context
{target claims with current status, related papers' experiment setups}
## Review Questions
1. Are any critical experiments missing?
2. Are the baselines fair and comprehensive?
3. Is the ablation design sufficient to isolate each contribution?
4. Are the success criteria well-defined and reasonable?
5. Any statistical concerns (sample size, variance, seeds)?
Revise the experiment plan based on Review LLM feedback (add missing experiments, correct unreasonable criteria).
Step 6: Write to Wiki
Create experiment pages:
For each experiment block:
python3 tools/research_wiki.py slug "<experiment-title>"
Create wiki/experiments/{slug}.md:
Create wiki/experiments/{slug}.md following the CLAUDE.md experiments template exactly — every field below must be present even if empty, because /exp-run later uses tools/research_wiki.py set-meta to update them, and set-meta refuses to create fields that don't already exist in the frontmatter (it only updates existing keys):
---
title: ""
slug: ""
status: planned
target_claim: "" # claim slug
hypothesis: ""
tags: []
domain: ""
setup:
model: ""
dataset: ""
hardware: ""
framework: ""
metrics: []
baseline: ""
outcome: "" # empty until /exp-run Phase 4 — succeeded | failed | inconclusive
key_result: "" # empty until /exp-run Phase 4
linked_idea: "{idea-slug}" # MANDATORY: the source idea slug (reverse link to wiki/ideas/{idea-slug}.md linked_experiments)
date_planned: YYYY-MM-DD
date_completed: "" # empty until /exp-run Phase 4
run_log: "" # empty until /exp-run Phase 2
started: "" # empty until /exp-run Phase 2 (ISO timestamp, set via set-meta)
estimated_hours: 0 # 0 until /exp-run Phase 2 (set via set-meta)
remote: # full block must exist so /exp-run --env remote can populate sub-fields via Edit
server: ""
gpu: ""
session: ""
started: ""
completed: ""
---
## Objective
{what this experiment proves}
## Setup
{detailed setup: model, dataset, hardware, hyperparameters}
## Procedure
{step-by-step execution plan}
## Results
(to be filled after /exp-run)
## Analysis
(to be filled after /exp-run)
## Claim updates
(to be filled after /exp-eval)
## Follow-up
{contingency plans: what to do if success / failure}
Create new claims (if missing claims were identified in Step 2):
python3 tools/research_wiki.py slug "<claim-title>"
Create wiki/claims/{slug}.md (status: proposed, confidence: 0.3)
Add graph edges:
# For each experiment → target claim
python3 tools/research_wiki.py add-edge wiki/ \
--from "claims/{target-claim}" --to "experiments/{slug}" \
--type tested_by --evidence "Designed by /exp-design"
Update idea page (if idea came from wiki):
- Append all new experiment slugs to
linked_experiments in wiki/ideas/{idea-slug}.md
- If idea status is
proposed, update to in_progress
Update index.md: append entries under the experiments and claims (if new) categories
Rebuild derived data:
python3 tools/research_wiki.py rebuild-context-brief wiki/
python3 tools/research_wiki.py rebuild-open-questions wiki/
Append log:
python3 tools/research_wiki.py log wiki/ \
"exp-design | {N} experiments designed for idea {slug} | claims: {claim-list}"
Print EXPERIMENT_PLAN_REPORT to terminal:
# Experiment Plan Report
## Target Idea
- Idea: [[idea-slug]]
- Hypothesis: {hypothesis}
## Scoped Claims
| Claim | Current status | Confidence | Dimension |
|-------|---------------|------------|-----------|
| [[claim-slug]] | proposed | 0.3 | target |
| [[claim-slug]] | weakly_supported | 0.5 | decomposition |
## Experiment Blocks
| # | Experiment | Type | Claim | GPU-hrs | Stage |
|---|-----------|------|-------|---------|-------|
| 1 | [[baseline-slug]] | baseline | — | 2 | 1 |
| 2 | [[validation-slug]] | validation | target | 8 | 2 |
| 3 | [[ablation-1-slug]] | ablation | decomposition-1 | 8 | 3 |
| 4 | [[robustness-slug]] | robustness | target | 16 | 4 |
## Run Order
Stage 0: Sanity → Stage 1: Baseline → Stage 2: Validation → Stage 3: Ablation → Stage 4: Robustness
Decision gates at each stage boundary.
## Budget
- Total estimated: {N} GPU-hours
- Budget limit: {--budget or "unlimited"}
## Next Steps
- Run `/exp-run [[baseline-slug]]` to start Stage 1
- After each stage, run `/exp-eval` to update wiki
Constraints
- Every experiment must be linked to a claim:
target_claim cannot be empty (baseline experiments may link to the Target claim)
- No duplicate experiments: before creating, check wiki/experiments/ for existing experiments with the same target_claim + hypothesis
- Scoped claims are not modified: claims scoped in Step 2 are not updated for status/confidence during this plan — only /exp-eval may update them
- Success criteria must be quantified: each experiment block's success criterion must include a specific number (e.g. "> 2% accuracy improvement")
- At least 3 seeds: experiments requiring statistical reliability (validation, ablation) must specify >= 3 random seeds
- Graph edges via tools/research_wiki.py: do not manually edit edges.jsonl
- Idea status advances only forward: proposed → in_progress, irreversible
- Slug uniqueness: check for existing slug before creating
Error Handling
- Idea not found: prompt user to check slug, list candidates in wiki/ideas/
- Target claim does not exist: auto-create new claim page (status: proposed, confidence: 0.3), flag in report
- Similar experiment already exists: list existing experiments, ask user whether to add or skip
- Review LLM unavailable (--review mode): skip Step 5, note "unreviewed — Review LLM unavailable" in report
- Budget insufficient: reduce Stage 4 robustness experiment scope, note actual budget allocation in report
- Slug conflict: append numeric suffix (e.g.
sparse-lora-ablation-v2)
- Wiki is empty: proceed normally but baseline experiments have no prior results to reference; recommend running /ingest for relevant papers first
Dependencies
Tools(via Bash)
python3 tools/research_wiki.py slug "<title>" — generate slug
python3 tools/research_wiki.py add-edge wiki/ ... — add graph edge
python3 tools/research_wiki.py rebuild-context-brief wiki/ — rebuild query_pack
python3 tools/research_wiki.py rebuild-open-questions wiki/ — rebuild gap_map
python3 tools/research_wiki.py log wiki/ "<message>" — append log
MCP Servers
mcp__llm-review__chat — Step 5 experiment plan review (optional)
Claude Code Native
Read — read wiki pages
Glob — find existing experiments and claims
Shared References
.claude/skills/shared-references/cross-model-review.md — Step 5 Review LLM review independence (if enabled)
Called by
/research Stage 2 (experiment design stage)
- User directly
1---2name: exp-design3description: Claim-driven experiment design — scope target claims → design experiment blocks (baseline/validation/ablation/robustness) → build run order → optional Review LLM review → write to wiki4---56# /exp-design78> Given an idea (or a free-text hypothesis), design a complete experiment plan.9> Claims are the core: scope the claims to validate across three dimensions — Target, Decomposition, and Threats.10> Design four types of experiment blocks: baseline (reproduce baseline), validation (core verification), ablation (factor isolation), and robustness (stress testing).11> Experiments are ordered by dependency with decision gates between stages (sanity fail → early stop).12> Optional Review LLM review checks experiment plan completeness. All experiments are written to wiki/experiments/ with graph edges.1314## Inputs1516- `idea`: one of:17 - A slug from wiki/ideas/ (e.g. `sparse-lora-for-edge-devices`)18 - A free-text hypothesis description (provide the experiment goal directly)19- `--review` (optional): enable Review LLM review to check experiment plan completeness20- `--budget <gpu-hours>` (optional): total compute budget cap (GPU hours), affects robustness experiment scope2122## Outputs2324- `wiki/experiments/{slug}.md` — one page per experiment block (status: planned)25- `wiki/graph/edges.jsonl` — new tested_by edges: experiment → claim26- `wiki/ideas/{slug}.md` — updated linked_experiments field27- `wiki/graph/context_brief.md` — rebuilt28- `wiki/graph/open_questions.md` — rebuilt29- `wiki/log.md` — appended log entry30- **EXPERIMENT_PLAN_REPORT** (printed to terminal) — experiment block summary, run order, compute budget3132## Wiki Interaction3334### Reads35- `wiki/ideas/{slug}.md` — idea's hypothesis, approach, risks, origin_gaps36- `wiki/claims/*.md` — target claims' current status, existing evidence, confidence37- `wiki/experiments/*.md` — existing experiments (avoid duplicate designs, reference setup configs)38- `wiki/papers/*.md` — related papers' baselines and experiment setups39- `wiki/concepts/*.md` — relevant technical concepts (guide experiment design)40- `wiki/graph/context_brief.md` — global context41- `wiki/graph/open_questions.md` — knowledge gaps (guide experiment priority)4243### Writes44- `wiki/experiments/{slug}.md` — create experiment pages (one per experiment block)45- `wiki/ideas/{slug}.md` — update linked_experiments field46- `wiki/graph/edges.jsonl` — add tested_by edges47- `wiki/graph/context_brief.md` — rebuild48- `wiki/graph/open_questions.md` — rebuild49- `wiki/log.md` — append operation log5051### Graph edges created52- `tested_by`: claim → experiment (the claim is validated by this experiment)5354## Workflow5556**Precondition**: confirm working directory is the wiki project root (directory containing `wiki/`, `raw/`, `tools/`).5758### Step 1: Load Context59601. **Parse idea input**:61 - If slug: read `wiki/ideas/{slug}.md`, extract `## Motivation`, `## Hypothesis`, `## Approach sketch`, `## Risks`, and the frontmatter fields `origin_gaps`, `tags`, `domain`, `priority` (per CLAUDE.md ideas template)62 - If free text: use directly as the hypothesis description632. **Load relevant wiki context**:64 - Read `wiki/graph/context_brief.md` (global context)65 - Read `wiki/graph/open_questions.md` (knowledge gaps)66 - From the idea's `origin_gaps`, read the corresponding `wiki/claims/*.md` (target claims)67 - From each target claim's `source_papers` field, read the corresponding `wiki/papers/*.md` for baseline setups and prior experiment protocols — this is the canonical path from idea → claim → paper (ideas do **not** carry a `linked_papers` field; use `origin_gaps` → `source_papers` instead)68 - Read existing `wiki/experiments/*.md` to check for similar experiments693. **If idea has no origin_gaps**: extract implied claims from the hypothesis description; search wiki/claims/ or flag as needing new claim creation7071### Step 2: Scope Claims7273Scope the claims for this experiment plan across three dimensions. For each dimension, search wiki/claims/ for existing claims first; if none exist, create a new claim (status: proposed, confidence: 0.3).74751. **Target** (what to validate):76 - The claim corresponding to the idea's core hypothesis — the primary target this experiment plan directly validates77 - Typically 1, at most 2782. **Decomposition** (what to decompose):79 - Individual contribution claims for each independent factor in the method80 - One claim per factor, used to design isolation experiments813. **Threats** (what could falsify us):82 - Known risks, alternative explanations, boundary conditions83 - Sources: counter-evidence in wiki, paper limitations, open questions in claims84 - Guides robustness experiment design8586Output: scoped claims list (slug list + dimension annotation + current status/confidence for each claim)8788### Step 3: Design Experiment Blocks8990Design experiment blocks for each scoped claim. Four types:9192**A. Baseline experiments (reproduce baseline)**:93- Purpose: confirm the problem exists and the baseline is reproducible94- Reproduce the core experiment from the most relevant paper95- Success criterion: baseline results deviate < 5% from reported paper values (this threshold is the same one used by the Stage 1 decision gate below — do not introduce a different number elsewhere)96- Compute: typically minimal9798**B. Validation experiments (validate Target claim)**:99- Purpose: validate the core contribution on top of the baseline100- Metrics: statistically significant improvement over baseline101- Requires sufficient seed/run count for reliability (recommend >= 3 seeds)102- Compute: moderate103104**C. Ablation experiments (validate Decomposition claims)**:105- Purpose: isolate the contribution of each independent factor106- Each ablation removes one factor and validates the resulting performance drop107- N factors → N ablation experiments108- Compute: similar to validation × N109110**D. Robustness experiments (rule out Threats)**:111- Purpose: rule out known risks and alternative explanations; verify the method holds under varied conditions112- Variation dimensions: model size, dataset, hyperparameters, domain113- Test at least 2 variation dimensions114- Compute: depends on --budget115116Each experiment block includes:117- `title`: descriptive title118- `target_claim`: corresponding claim slug119- `hypothesis`: specific hypothesis the experiment tests120- `type`: baseline / validation / ablation / robustness121- `setup`: model, dataset, hardware, framework122- `metrics`: list of evaluation metrics123- `baseline`: comparison baseline124- `success_criterion`: explicit pass/fail criterion125- `estimated_gpu_hours`: estimated compute time126- `seeds`: number of random seeds (recommend >= 3)127128### Step 4: Build Run Order129130Sort experiments by dependency and set decision gates:131132```133Stage 0: Sanity check134 └── Small-scale run (1 epoch / 100 steps) to verify no code bugs, data loads, GPU available, loss decreasing135 └── Gate: sanity fails → stop, fix code136137Stage 1: Baseline (reproduce baseline)138 └── Reproduce baseline results139 └── Gate: baseline deviation > 5% → stop, check implementation (same threshold as Step 3 success criterion)140141Stage 2: Validation (core verification)142 └── Validate core method on top of baseline143 └── Gate: no improvement → stop, analyze reason (idea may not hold)144145Stage 3: Ablation (factor isolation)146 └── Multiple ablations can run in parallel147 └── Gate: if a factor ablation shows no effect → record it, but continue other ablations148149Stage 4: Robustness (robustness verification)150 └── Only execute after Stage 2 succeeds151 └── Scope determined by remaining --budget152```153154Output:155- Ordered experiment list (with dependencies)156- Decision gate conditions for each stage157- Total compute budget estimate (if exceeding --budget, adjust Stage 4 scope)158159### Step 5: Optional Review LLM Review (--review)160161If `--review` is specified:162163```164mcp__llm-review__chat:165 system: "You are a senior ML researcher reviewing an experiment plan.166 Focus on: missing baselines, missing ablations, unfair comparisons,167 statistical rigor (enough seeds?), and dataset selection.168 For every issue found, suggest a concrete fix."169 message: |170 ## Experiment Plan171 {complete experiment plan: claims, blocks, run order, budgets}172173 ## Context174 {target claims with current status, related papers' experiment setups}175176 ## Review Questions177 1. Are any critical experiments missing?178 2. Are the baselines fair and comprehensive?179 3. Is the ablation design sufficient to isolate each contribution?180 4. Are the success criteria well-defined and reasonable?181 5. Any statistical concerns (sample size, variance, seeds)?182```183184Revise the experiment plan based on Review LLM feedback (add missing experiments, correct unreasonable criteria).185186### Step 6: Write to Wiki1871881. **Create experiment pages**:189 For each experiment block:190 ```bash191 python3 tools/research_wiki.py slug "<experiment-title>"192 ```193 Create `wiki/experiments/{slug}.md`:194 Create `wiki/experiments/{slug}.md` following the **CLAUDE.md experiments template exactly** — every field below must be present even if empty, because `/exp-run` later uses `tools/research_wiki.py set-meta` to update them, and `set-meta` refuses to create fields that don't already exist in the frontmatter (it only updates existing keys):195 ```yaml196 ---197 title: ""198 slug: ""199 status: planned200 target_claim: "" # claim slug201 hypothesis: ""202 tags: []203 domain: ""204 setup:205 model: ""206 dataset: ""207 hardware: ""208 framework: ""209 metrics: []210 baseline: ""211 outcome: "" # empty until /exp-run Phase 4 — succeeded | failed | inconclusive212 key_result: "" # empty until /exp-run Phase 4213 linked_idea: "{idea-slug}" # MANDATORY: the source idea slug (reverse link to wiki/ideas/{idea-slug}.md linked_experiments)214 date_planned: YYYY-MM-DD215 date_completed: "" # empty until /exp-run Phase 4216 run_log: "" # empty until /exp-run Phase 2217 started: "" # empty until /exp-run Phase 2 (ISO timestamp, set via set-meta)218 estimated_hours: 0 # 0 until /exp-run Phase 2 (set via set-meta)219 remote: # full block must exist so /exp-run --env remote can populate sub-fields via Edit220 server: ""221 gpu: ""222 session: ""223 started: ""224 completed: ""225 ---226227 ## Objective228 {what this experiment proves}229230 ## Setup231 {detailed setup: model, dataset, hardware, hyperparameters}232233 ## Procedure234 {step-by-step execution plan}235236 ## Results237 (to be filled after /exp-run)238239 ## Analysis240 (to be filled after /exp-run)241242 ## Claim updates243 (to be filled after /exp-eval)244245 ## Follow-up246 {contingency plans: what to do if success / failure}247 ```2482492. **Create new claims (if missing claims were identified in Step 2)**:250 ```bash251 python3 tools/research_wiki.py slug "<claim-title>"252 ```253 Create `wiki/claims/{slug}.md` (status: proposed, confidence: 0.3)2542553. **Add graph edges**:256 ```bash257 # For each experiment → target claim258 python3 tools/research_wiki.py add-edge wiki/ \259 --from "claims/{target-claim}" --to "experiments/{slug}" \260 --type tested_by --evidence "Designed by /exp-design"261 ```2622634. **Update idea page** (if idea came from wiki):264 - Append all new experiment slugs to `linked_experiments` in `wiki/ideas/{idea-slug}.md`265 - If idea status is `proposed`, update to `in_progress`2662675. **Update index.md**: append entries under the experiments and claims (if new) categories2682696. **Rebuild derived data**:270 ```bash271 python3 tools/research_wiki.py rebuild-context-brief wiki/272 python3 tools/research_wiki.py rebuild-open-questions wiki/273 ```2742757. **Append log**:276 ```bash277 python3 tools/research_wiki.py log wiki/ \278 "exp-design | {N} experiments designed for idea {slug} | claims: {claim-list}"279 ```2802818. **Print EXPERIMENT_PLAN_REPORT to terminal**:282 ```markdown283 # Experiment Plan Report284285 ## Target Idea286 - Idea: [[idea-slug]]287 - Hypothesis: {hypothesis}288289 ## Scoped Claims290 | Claim | Current status | Confidence | Dimension |291 |-------|---------------|------------|-----------|292 | [[claim-slug]] | proposed | 0.3 | target |293 | [[claim-slug]] | weakly_supported | 0.5 | decomposition |294295 ## Experiment Blocks296 | # | Experiment | Type | Claim | GPU-hrs | Stage |297 |---|-----------|------|-------|---------|-------|298 | 1 | [[baseline-slug]] | baseline | — | 2 | 1 |299 | 2 | [[validation-slug]] | validation | target | 8 | 2 |300 | 3 | [[ablation-1-slug]] | ablation | decomposition-1 | 8 | 3 |301 | 4 | [[robustness-slug]] | robustness | target | 16 | 4 |302303 ## Run Order304 Stage 0: Sanity → Stage 1: Baseline → Stage 2: Validation → Stage 3: Ablation → Stage 4: Robustness305 Decision gates at each stage boundary.306307 ## Budget308 - Total estimated: {N} GPU-hours309 - Budget limit: {--budget or "unlimited"}310311 ## Next Steps312 - Run `/exp-run [[baseline-slug]]` to start Stage 1313 - After each stage, run `/exp-eval` to update wiki314 ```315316## Constraints317318- **Every experiment must be linked to a claim**: `target_claim` cannot be empty (baseline experiments may link to the Target claim)319- **No duplicate experiments**: before creating, check wiki/experiments/ for existing experiments with the same target_claim + hypothesis320- **Scoped claims are not modified**: claims scoped in Step 2 are not updated for status/confidence during this plan — only /exp-eval may update them321- **Success criteria must be quantified**: each experiment block's success criterion must include a specific number (e.g. "> 2% accuracy improvement")322- **At least 3 seeds**: experiments requiring statistical reliability (validation, ablation) must specify >= 3 random seeds323- **Graph edges via tools/research_wiki.py**: do not manually edit edges.jsonl324- **Idea status advances only forward**: proposed → in_progress, irreversible325- **Slug uniqueness**: check for existing slug before creating326327## Error Handling328329- **Idea not found**: prompt user to check slug, list candidates in wiki/ideas/330- **Target claim does not exist**: auto-create new claim page (status: proposed, confidence: 0.3), flag in report331- **Similar experiment already exists**: list existing experiments, ask user whether to add or skip332- **Review LLM unavailable** (--review mode): skip Step 5, note "unreviewed — Review LLM unavailable" in report333- **Budget insufficient**: reduce Stage 4 robustness experiment scope, note actual budget allocation in report334- **Slug conflict**: append numeric suffix (e.g. `sparse-lora-ablation-v2`)335- **Wiki is empty**: proceed normally but baseline experiments have no prior results to reference; recommend running /ingest for relevant papers first336337## Dependencies338339### Tools(via Bash)340- `python3 tools/research_wiki.py slug "<title>"` — generate slug341- `python3 tools/research_wiki.py add-edge wiki/ ...` — add graph edge342- `python3 tools/research_wiki.py rebuild-context-brief wiki/` — rebuild query_pack343- `python3 tools/research_wiki.py rebuild-open-questions wiki/` — rebuild gap_map344- `python3 tools/research_wiki.py log wiki/ "<message>"` — append log345346### MCP Servers347- `mcp__llm-review__chat` — Step 5 experiment plan review (optional)348349### Claude Code Native350- `Read` — read wiki pages351- `Glob` — find existing experiments and claims352353### Shared References354- `.claude/skills/shared-references/cross-model-review.md` — Step 5 Review LLM review independence (if enabled)355356### Called by357- `/research` Stage 2 (experiment design stage)358- User directly