Founder Validation (Phase 2)
Child of founder. Validation support — owns the assumption ledger, experiment design, interview
scripts (Mom Test protocol), browser MCP analytics reading (Envelope D), and evidence capture with
user-reported artifacts. The user is the validator. This skill is the infrastructure.
Scope: Validation infrastructure. Designs experiments, drafts scripts, captures user-reported
evidence, reads analytics, reviews evidence gaps. Does NOT autonomously validate a business. The
user runs the experiments and reports back.
Siblings (parent = founder):
founder-ideation — Phase 1 — adversarial brainstorm + data grounding
founder-business-model — Phase 2 — calculator mode unit economics
founder-sprint — Phase 2 — lean gatekeeper stage machine
founder-gtm — Phase 3 (deferred) — positioning, distribution, channel selection
Inherited hard rules (from parent founder): HR-1 through HR-11 all apply. Key inherited
constraints: no valuation/legal/tax advice (HR-1, HR-2), no LLM-generated TAM (HR-3), kill
criteria required on all ideas (HR-4), data citations required (HR-5), founder is pre-execution
only (HR-6), venture-brief is canonical state (HR-7), intake required (HR-8), physical-world
bridge preferred (HR-9), epistemic honesty first-class (HR-10), Reddit privacy (HR-11).
Modes
1. design_experiment
Given an assumption from the venture-brief, produce an experiment design.
Input:
mode: "design_experiment"
assumption_id: uuid # links to venture-brief.assumptions[]
assumption_claim: string # the claim to test (from assumptions[].claim)
biz_type: enum # from venture-brief intake
niche: string # from venture-brief intake
stage: enum # from venture-brief intake
Flow:
- Read
venture-brief.yaml — load the assumption, existing experiments, intake context.
Refuse if missing or if assumption_id not found.
- Select method from the methods matrix (see
references/experiment-design.md):
- Interview (Mom Test) — for problem/need assumptions
- Landing page (fake door) — for demand assumptions
- Concierge — for solution assumptions
- Pre-order — for willingness-to-pay assumptions
- Ad test — for channel/audience assumptions
- Survey — for preference/demographic assumptions (weakest method — flag this)
- Produce experiment design:
experiment:
id: <uuid>
assumption_id: <uuid>
method: <selected>
hypothesis: string # "If [assumption] is true, then [observable outcome]"
success_criteria: string # quantitative threshold
kill_criteria: string # what result would falsify the assumption
minimum_sample_size: int # method-dependent minimum
timeline: string # realistic, not aspirational
steps: list[string] # 5-8 concrete steps the user takes
tools_needed: list[string] # what the user needs (Calendly, Typeform, etc.)
cost_estimate: string # $0 / <$50 / <$200 / custom
risks: list[string] # what could go wrong with this experiment
- Write to venture-brief.experiments[] with
status: planned
- Return to user with the full experiment design and "here's what you do next"
Output: Structured experiment design ready for the user to execute.
2. draft_interview
Produce a Mom Test interview script for a specific assumption.
Input:
mode: "draft_interview"
assumption_id: uuid # which assumption this interview targets
target_persona: string # who you're interviewing ("UK accountant, 1-5 person practice")
interview_context: string # optional — "first interview" / "follow-up after landing page"
Flow:
- Read venture-brief. Load assumption and any prior interview evidence.
- Apply the Mom Test protocol (see
references/interview-scripts-mom-test.md):
- Talk about their life, not your idea
- Ask about the past, not the future
- Less talk, more listen
- Never pitch — extract
- Produce a script with 10-15 questions:
interview_script:
target_assumption: string
target_persona: string
warm_up: list[string] # 2-3 context-setting questions
core_questions: list[
question: string
follow_up_prompts: list[string]
red_flag_answers: list[string] # answers that signal fake validation
green_flag_answers: list[string] # answers that signal real pain
]
closing: list[string] # 2-3 wrap-up questions including the "ask"
interviewer_notes:
- "If they say 'I would definitely use that' — DO NOT count this as validation (HR-V1)"
- "If they describe a workaround they've built — this is strong behavioral evidence"
- "If they can't describe the last time they had this problem — the pain may not be real"
Output: Complete interview script with red/green flag guidance.
3. capture_evidence
User reports what happened. Skill structures it into the assumption ledger.
Input:
mode: "capture_evidence"
experiment_id: uuid # links to venture-brief.experiments[]
evidence:
type: enum # interview | landing_page | ad_test | survey | concierge | other
date: date
assumption_id: uuid
method: string # "Mom Test interview" / "fake door landing page" / etc.
raw_data:
interviews_completed: int
replies_received: int
objections_heard: list[string]
prepay_asks_made: int
conversion_events: int
qualitative_notes: string
Flow:
- Read venture-brief. Load the experiment and assumption.
- Validate the evidence artifact (HR-V5):
- Reject if raw_data has no quantitative fields filled (interviews_completed, replies_received,
conversion_events, prepay_asks_made — at least one must be > 0 or the user must explain why)
- Reject "it went well" without numbers
- Accept zero values if the user explicitly reports "0 conversions out of 50 visitors"
- Determine verdict per assumption:
confirmed — ONLY with behavioral evidence (HR-V1): signup, prepay, workaround, switch.
Verbal "I'd buy it" does NOT qualify.
falsified — experiment ran, results clearly below kill criteria
inconclusive — experiment ran, results between success and kill criteria, or sample too
small to conclude
- Assign confidence:
high (large sample, clear signal) / medium (adequate sample, some
noise) / low (small sample or ambiguous signal)
- Write to venture-brief:
- Update
experiments[experiment_id].evidence with the artifact
- Update
experiments[experiment_id].verdict
- Update
experiments[experiment_id].status: completed
- Update
assumptions[assumption_id].evidence[] with reference
- Increment
interview_count if type is interview
- Return structured summary including verdict, confidence, what it means, and what to test next
Verdict logic detail:
| Evidence type |
Confirmed requires |
Falsified requires |
| Interview |
Described workaround, switched from competitor, committed time/money |
Could not describe the problem, no workaround, indifferent |
| Landing page |
Signup rate > success_criteria, email collection > threshold |
Signup rate < kill_criteria after minimum traffic |
| Ad test |
CTR > success_criteria, CPC < ceiling |
CTR < kill_criteria after minimum impressions |
| Pre-order |
Pre-orders > 0 with real payment method |
Zero pre-orders after adequate exposure |
| Concierge |
Repeat usage, referral, willingness to pay for continued service |
Dropped after first session, no referral |
| Survey |
WARNING: surveys are the weakest method. Never mark confirmed from survey alone. |
Can mark falsified if strong negative signal |
4. read_analytics
Browser MCP Envelope D. Reads analytics dashboards and pages for evidence capture.
Input:
mode: "read_analytics"
target: string # URL or description: "my GA4 dashboard", "landing page at example.com"
metrics_of_interest: list[string] # what to look for: "signups", "bounce rate", "CTR"
Flow:
- Verify browser MCP availability. If browser MCP tools are not available, return a graceful
degradation message: "Browser MCP is not available in this session. Ask the user to provide
the analytics data manually."
- Navigate to the target using ONLY Envelope D tools (see
references/browser-mcp-allow-list.md):
navigate to load the URL
get_page_text to extract visible content
read_page for DOM structure (forms, CTAs, key elements)
read_network_requests for XHR/Fetch responses (GA4 JSON, GSC JSON)
find for natural-language element search
javascript_tool ONLY for read-only expressions (regex-gated — see allow-list)
computer ONLY for screenshot + scroll — NO clicks, NO typing
- Extract structured metrics:
analytics_snapshot:
url: string
captured_at: timestamp
metrics:
- name: string # "signup_rate", "bounce_rate", "sessions"
value: string # "3.2%", "150", "45s"
source: string # "page_text", "network_xhr", "dom_element"
observations: list[string] # "Landing page has no clear CTA above the fold"
raw_data_available: bool # whether XHR captured structured data
- Return for evidence capture. The analytics snapshot feeds into
capture_evidence mode.
Envelope D enforcement: Any tool call not on the allow-list is BLOCKED immediately (HR-V3).
The skill does not attempt the call and explains why it was blocked. See
references/browser-mcp-allow-list.md for the canonical allow-list with regex patterns for
javascript_tool gating.
5. evidence_review
Across all experiments, what do we know? What's still unvalidated? What should we test next?
Input:
mode: "evidence_review"
# No additional input needed — reads everything from venture-brief
Flow:
- Read venture-brief. Load all assumptions, experiments, and evidence.
- Build assumption status matrix:
assumption_matrix:
- id: uuid
claim: string
experiments_run: int
latest_verdict: enum # confirmed | falsified | inconclusive | untested
confidence: enum
evidence_summary: string # 1-sentence summary of what we know
risk_level: enum # high (core viability) | medium (growth) | low (nice-to-have)
next_action: string # "run experiment X" / "sufficient evidence" / "pivot needed"
- Gap analysis:
- Which high-risk assumptions have zero evidence? (HR-V4 — surface honestly)
- Which assumptions have only survey data? (flag as weak)
- Which assumptions have contradictory evidence across experiments?
- Are there enough interviews logged? (HR-V2 check for sprint readiness)
- Sprint readiness check: can the venture advance to the Decision stage?
- Top-3 riskiest assumptions each have >= 1 experiment with recorded evidence
= 1 real interview logged (HR-V2)
- No high-risk viability assumption falsified without pivot or accepted_risk
- Return structured review with the matrix, gaps, sprint readiness verdict, and recommended
next experiments
Output:
evidence_review:
total_assumptions: int
tested: int
confirmed: int
falsified: int
inconclusive: int
untested: int
interview_count: int
sprint_ready: bool
sprint_blockers: list[string] # what's missing for Evidence -> Decision transition
gap_analysis: list[string]
recommended_next: list[string]
risk_flags: list[string]
Evidence Capture Protocol
The skill requires user-reported artifacts to close the loop. Evidence is NOT inferred from
analytics alone — the user must explicitly report what happened.
evidence_artifact:
type: enum # interview | landing_page | ad_test | survey | concierge | other
date: date
assumption_id: uuid # links to venture-brief assumption
method: string # "Mom Test interview" / "fake door landing page" / etc.
raw_data: # user-reported
interviews_completed: int
replies_received: int
objections_heard: list[string]
prepay_asks_made: int
conversion_events: int
qualitative_notes: string
verdict: enum # confirmed | falsified | inconclusive
confidence: enum # high | medium | low
verdict_rationale: string
See references/evidence-capture-protocol.md for the full protocol including verdict logic,
confidence scoring, and edge cases.
Cross-Skill Integration
founder (parent)
| intake populated, route to founder-validation
v
founder-validation (this skill)
| read venture-brief
|
|-- design_experiment --> writes to venture-brief.experiments[]
|-- draft_interview --> returns script to user
|-- capture_evidence --> user reports back, updates venture-brief
|-- read_analytics --> browser MCP Envelope D, feeds capture_evidence
|-- evidence_review --> gap analysis, sprint readiness check
|
v
founder-sprint (Phase 2)
| checks evidence_review.sprint_ready before Evidence -> Decision gate
Failure Modes
| Failure |
Detection |
Response |
| No venture-brief / missing intake |
File missing or intake incomplete |
Return to parent: "intake missing"; parent asks the user |
| Assumption not found |
assumption_id not in venture-brief.assumptions[] |
Return error: "assumption {id} not found in venture-brief" |
| Evidence lacks raw numbers |
capture_evidence validation fails (HR-V5) |
Reject with: "evidence must include raw numbers — how many interviews? how many conversions?" |
| User claims "confirmed" on verbal intent only |
HR-V1 check fails |
Reject verdict, explain why verbal intent is not behavioral evidence |
| Browser MCP unavailable |
Tool call fails or tools not in environment |
Degrade gracefully: "Browser MCP not available — please provide analytics data manually" |
| Browser MCP tool not on allow-list |
Tool name not in Envelope D list (HR-V3) |
Block immediately, explain: "tool X is not permitted in Envelope D (read-only analytics)" |
| Zero experiments for an assumption |
evidence_review surfaces it |
Flag honestly as "untested" (HR-V4), recommend experiment |
| Schema version mismatch |
venture-brief schema_version != 2 |
Error and refuse to proceed (HR-7) |
Anti-Patterns
| Anti-Pattern |
Why It Fails |
Correct Approach |
| Marking "confirmed" because the user said "they loved it" |
Verbal intent is the #1 source of false validation; people are polite, not committed |
Require behavioral evidence: signup, prepay, workaround, switch (HR-V1) |
| Skipping interviews and going straight to landing page tests |
Landing pages test messaging, not problem existence; you need interviews first |
Interview first (Mom Test), then landing page to test positioning |
| Treating survey responses as strong evidence |
Surveys measure stated preference, not revealed preference; gap is massive |
Flag surveys as weak; never mark confirmed from survey alone |
| Running experiments without clear kill criteria |
Without kill criteria, every result is "encouraging" |
Experiment design MUST include kill criteria before execution |
| Using browser MCP to fill out forms or click buttons |
Violates Envelope D (HR-V3); the skill is read-only |
BLOCK any write action; explain the Envelope D boundary |
| Inferring evidence from analytics without user confirmation |
Analytics can be misleading (bot traffic, self-visits, etc.) |
Analytics feed into capture_evidence; user confirms the narrative |
| Advancing to Decision stage with 0 interviews |
HR-V2 violation |
Refuse and surface the gap: "0 interviews logged, need at least 1" |
| Fabricating confidence from lack of disconfirmation |
Absence of evidence is not evidence of absence |
Surface as "untested" or "inconclusive" (HR-V4) |
Reference Files
Read these as needed during validation work:
references/assumption-ledger-schema.md — YAML schema for structured assumptions, linking to
experiments and evidence
references/experiment-design.md — methods matrix (interview / landing page / concierge /
pre-order / ad test / survey), sample sizes, timelines, success criteria templates, cost
estimates
references/interview-scripts-mom-test.md — Mom Test protocol, question templates per
assumption type, red flags, anti-patterns, "the three critical questions"
references/browser-mcp-allow-list.md — Envelope D tool allow-list with regex patterns for
javascript_tool gating, blocked tools with reasons
references/evidence-capture-protocol.md — how to structure user-reported artifacts, verdict
logic per evidence type, confidence scoring, edge cases
When NOT to Use This Skill
- User wants to generate ideas (not validate them) -- use
founder-ideation
- User wants unit economics / pricing -- use
founder-business-model
- User wants to build the product -- hand off to
forge via sprint
- User wants legal / regulatory validation -- REFUSED (HR-1, HR-2); refer to counsel
- User wants to scrape competitor sites -- NOT in scope; Envelope D is read-only analytics
for the user's own properties
- User wants to automate outreach (Envelope B/C) -- deferred to Phase 2.5; Envelope D is
read-only
1---2name: founder-validation3description: Use when the user asks to validate a business idea, design experiments, draft interview scripts, capture evidence from real-world tests, or review assumption status. Phase 2 subskill of the founder family. Validation SUPPORT — designs experiments, drafts interview scripts (Mom Test), captures evidence, reads analytics via browser MCP (Envelope D). You run the experiments and report back. Modes: design_experiment, draft_interview, capture_evidence, read_analytics, evidence_review. Routes via parent `founder` skill. Trigger on: "validate my idea", "design an experiment", "Mom Test", "interview script", "capture evidence", "what do we know", "assumption ledger", "read my analytics", "evidence review".4---56# Founder Validation (Phase 2)78Child of `founder`. Validation support — owns the assumption ledger, experiment design, interview9scripts (Mom Test protocol), browser MCP analytics reading (Envelope D), and evidence capture with10user-reported artifacts. The user is the validator. This skill is the infrastructure.1112**Scope:** Validation infrastructure. Designs experiments, drafts scripts, captures user-reported13evidence, reads analytics, reviews evidence gaps. Does NOT autonomously validate a business. The14user runs the experiments and reports back.1516**Siblings (parent = `founder`):**17- `founder-ideation` — Phase 1 — adversarial brainstorm + data grounding18- `founder-business-model` — Phase 2 — calculator mode unit economics19- `founder-sprint` — Phase 2 — lean gatekeeper stage machine20- `founder-gtm` — Phase 3 (deferred) — positioning, distribution, channel selection2122---2324<HARD-RULE id="HR-V1">25**Never mark assumption `confirmed` based only on "they said they'd buy".** Require behavioral26evidence: signed up, prepaid, built a workaround, switched from a competitor, committed time or27money. Verbal intent is not evidence. "I would definitely use that" is not evidence. Conversion28events, pre-orders, workaround behaviors, and competitive switching are evidence.29</HARD-RULE>3031<HARD-RULE id="HR-V2">32**Refuse to advance to `founder-sprint` Decision stage unless at least 1 real interview is33logged.** Interviews mean conversations with real people (not LLM-simulated users). The34`interview_count` field in venture-brief must be >= 1 and must reference a real35`capture_evidence` entry with type `interview`.36</HARD-RULE>3738<HARD-RULE id="HR-V3">39**Browser MCP tools follow the Envelope D allow-list.** Any tool not on the allow-list is BLOCKED40and the skill refuses with an explanation. See `references/browser-mcp-allow-list.md` for the41canonical list. No exceptions. No "just this once."42</HARD-RULE>4344<HARD-RULE id="HR-V4">45**"Zero evidence" is a valid state.** Surface it honestly as "we don't know yet" rather than46inferring. Never fabricate evidence, never treat absence of disconfirmation as confirmation.47An assumption with no experiments is `untested`, not `plausible`.48</HARD-RULE>4950<HARD-RULE id="HR-V5">51**User-reported evidence must include raw numbers, not just "it went well".** Capture_evidence52mode requires quantitative or specific behavioral data: interviews completed (count), replies53received (count), objections heard (list), prepay asks made (count), conversion events (count).54"Good feedback" without numbers is rejected.55</HARD-RULE>5657**Inherited hard rules (from parent `founder`):** HR-1 through HR-11 all apply. Key inherited58constraints: no valuation/legal/tax advice (HR-1, HR-2), no LLM-generated TAM (HR-3), kill59criteria required on all ideas (HR-4), data citations required (HR-5), founder is pre-execution60only (HR-6), venture-brief is canonical state (HR-7), intake required (HR-8), physical-world61bridge preferred (HR-9), epistemic honesty first-class (HR-10), Reddit privacy (HR-11).6263---6465## Modes6667### 1. `design_experiment`6869Given an assumption from the venture-brief, produce an experiment design.7071**Input:**72```yaml73mode: "design_experiment"74assumption_id: uuid # links to venture-brief.assumptions[]75assumption_claim: string # the claim to test (from assumptions[].claim)76biz_type: enum # from venture-brief intake77niche: string # from venture-brief intake78stage: enum # from venture-brief intake79```8081**Flow:**82831. **Read `venture-brief.yaml`** — load the assumption, existing experiments, intake context.84 Refuse if missing or if assumption_id not found.852. **Select method** from the methods matrix (see `references/experiment-design.md`):86 - Interview (Mom Test) — for problem/need assumptions87 - Landing page (fake door) — for demand assumptions88 - Concierge — for solution assumptions89 - Pre-order — for willingness-to-pay assumptions90 - Ad test — for channel/audience assumptions91 - Survey — for preference/demographic assumptions (weakest method — flag this)923. **Produce experiment design:**93 ```yaml94 experiment:95 id: <uuid>96 assumption_id: <uuid>97 method: <selected>98 hypothesis: string # "If [assumption] is true, then [observable outcome]"99 success_criteria: string # quantitative threshold100 kill_criteria: string # what result would falsify the assumption101 minimum_sample_size: int # method-dependent minimum102 timeline: string # realistic, not aspirational103 steps: list[string] # 5-8 concrete steps the user takes104 tools_needed: list[string] # what the user needs (Calendly, Typeform, etc.)105 cost_estimate: string # $0 / <$50 / <$200 / custom106 risks: list[string] # what could go wrong with this experiment107 ```1084. **Write to venture-brief.experiments[]** with `status: planned`1095. **Return to user** with the full experiment design and "here's what you do next"110111**Output:** Structured experiment design ready for the user to execute.112113### 2. `draft_interview`114115Produce a Mom Test interview script for a specific assumption.116117**Input:**118```yaml119mode: "draft_interview"120assumption_id: uuid # which assumption this interview targets121target_persona: string # who you're interviewing ("UK accountant, 1-5 person practice")122interview_context: string # optional — "first interview" / "follow-up after landing page"123```124125**Flow:**1261271. Read venture-brief. Load assumption and any prior interview evidence.1282. Apply the Mom Test protocol (see `references/interview-scripts-mom-test.md`):129 - Talk about their life, not your idea130 - Ask about the past, not the future131 - Less talk, more listen132 - Never pitch — extract1333. Produce a script with 10-15 questions:134 ```yaml135 interview_script:136 target_assumption: string137 target_persona: string138 warm_up: list[string] # 2-3 context-setting questions139 core_questions: list[140 question: string141 follow_up_prompts: list[string]142 red_flag_answers: list[string] # answers that signal fake validation143 green_flag_answers: list[string] # answers that signal real pain144 ]145 closing: list[string] # 2-3 wrap-up questions including the "ask"146 interviewer_notes:147 - "If they say 'I would definitely use that' — DO NOT count this as validation (HR-V1)"148 - "If they describe a workaround they've built — this is strong behavioral evidence"149 - "If they can't describe the last time they had this problem — the pain may not be real"150 ```151152**Output:** Complete interview script with red/green flag guidance.153154### 3. `capture_evidence`155156User reports what happened. Skill structures it into the assumption ledger.157158**Input:**159```yaml160mode: "capture_evidence"161experiment_id: uuid # links to venture-brief.experiments[]162evidence:163 type: enum # interview | landing_page | ad_test | survey | concierge | other164 date: date165 assumption_id: uuid166 method: string # "Mom Test interview" / "fake door landing page" / etc.167 raw_data:168 interviews_completed: int169 replies_received: int170 objections_heard: list[string]171 prepay_asks_made: int172 conversion_events: int173 qualitative_notes: string174```175176**Flow:**1771781. Read venture-brief. Load the experiment and assumption.1792. **Validate the evidence artifact (HR-V5):**180 - Reject if raw_data has no quantitative fields filled (interviews_completed, replies_received,181 conversion_events, prepay_asks_made — at least one must be > 0 or the user must explain why)182 - Reject "it went well" without numbers183 - Accept zero values if the user explicitly reports "0 conversions out of 50 visitors"1843. **Determine verdict per assumption:**185 - `confirmed` — ONLY with behavioral evidence (HR-V1): signup, prepay, workaround, switch.186 Verbal "I'd buy it" does NOT qualify.187 - `falsified` — experiment ran, results clearly below kill criteria188 - `inconclusive` — experiment ran, results between success and kill criteria, or sample too189 small to conclude1904. **Assign confidence:** `high` (large sample, clear signal) / `medium` (adequate sample, some191 noise) / `low` (small sample or ambiguous signal)1925. **Write to venture-brief:**193 - Update `experiments[experiment_id].evidence` with the artifact194 - Update `experiments[experiment_id].verdict`195 - Update `experiments[experiment_id].status: completed`196 - Update `assumptions[assumption_id].evidence[]` with reference197 - Increment `interview_count` if type is `interview`1986. **Return structured summary** including verdict, confidence, what it means, and what to test next199200**Verdict logic detail:**201202| Evidence type | Confirmed requires | Falsified requires |203|---|---|---|204| Interview | Described workaround, switched from competitor, committed time/money | Could not describe the problem, no workaround, indifferent |205| Landing page | Signup rate > success_criteria, email collection > threshold | Signup rate < kill_criteria after minimum traffic |206| Ad test | CTR > success_criteria, CPC < ceiling | CTR < kill_criteria after minimum impressions |207| Pre-order | Pre-orders > 0 with real payment method | Zero pre-orders after adequate exposure |208| Concierge | Repeat usage, referral, willingness to pay for continued service | Dropped after first session, no referral |209| Survey | WARNING: surveys are the weakest method. Never mark `confirmed` from survey alone. | Can mark `falsified` if strong negative signal |210211### 4. `read_analytics`212213Browser MCP Envelope D. Reads analytics dashboards and pages for evidence capture.214215**Input:**216```yaml217mode: "read_analytics"218target: string # URL or description: "my GA4 dashboard", "landing page at example.com"219metrics_of_interest: list[string] # what to look for: "signups", "bounce rate", "CTR"220```221222**Flow:**2232241. **Verify browser MCP availability.** If browser MCP tools are not available, return a graceful225 degradation message: "Browser MCP is not available in this session. Ask the user to provide226 the analytics data manually."2272. **Navigate to the target** using ONLY Envelope D tools (see `references/browser-mcp-allow-list.md`):228 - `navigate` to load the URL229 - `get_page_text` to extract visible content230 - `read_page` for DOM structure (forms, CTAs, key elements)231 - `read_network_requests` for XHR/Fetch responses (GA4 JSON, GSC JSON)232 - `find` for natural-language element search233 - `javascript_tool` ONLY for read-only expressions (regex-gated — see allow-list)234 - `computer` ONLY for `screenshot` + `scroll` — NO clicks, NO typing2353. **Extract structured metrics:**236 ```yaml237 analytics_snapshot:238 url: string239 captured_at: timestamp240 metrics:241 - name: string # "signup_rate", "bounce_rate", "sessions"242 value: string # "3.2%", "150", "45s"243 source: string # "page_text", "network_xhr", "dom_element"244 observations: list[string] # "Landing page has no clear CTA above the fold"245 raw_data_available: bool # whether XHR captured structured data246 ```2474. **Return for evidence capture.** The analytics snapshot feeds into `capture_evidence` mode.248249**Envelope D enforcement:** Any tool call not on the allow-list is BLOCKED immediately (HR-V3).250The skill does not attempt the call and explains why it was blocked. See251`references/browser-mcp-allow-list.md` for the canonical allow-list with regex patterns for252`javascript_tool` gating.253254### 5. `evidence_review`255256Across all experiments, what do we know? What's still unvalidated? What should we test next?257258**Input:**259```yaml260mode: "evidence_review"261# No additional input needed — reads everything from venture-brief262```263264**Flow:**2652661. Read venture-brief. Load all assumptions, experiments, and evidence.2672. **Build assumption status matrix:**268 ```yaml269 assumption_matrix:270 - id: uuid271 claim: string272 experiments_run: int273 latest_verdict: enum # confirmed | falsified | inconclusive | untested274 confidence: enum275 evidence_summary: string # 1-sentence summary of what we know276 risk_level: enum # high (core viability) | medium (growth) | low (nice-to-have)277 next_action: string # "run experiment X" / "sufficient evidence" / "pivot needed"278 ```2793. **Gap analysis:**280 - Which high-risk assumptions have zero evidence? (HR-V4 — surface honestly)281 - Which assumptions have only survey data? (flag as weak)282 - Which assumptions have contradictory evidence across experiments?283 - Are there enough interviews logged? (HR-V2 check for sprint readiness)2844. **Sprint readiness check:** can the venture advance to the Decision stage?285 - Top-3 riskiest assumptions each have >= 1 experiment with recorded evidence286 - >= 1 real interview logged (HR-V2)287 - No high-risk viability assumption falsified without pivot or accepted_risk2885. **Return structured review** with the matrix, gaps, sprint readiness verdict, and recommended289 next experiments290291**Output:**292```yaml293evidence_review:294 total_assumptions: int295 tested: int296 confirmed: int297 falsified: int298 inconclusive: int299 untested: int300 interview_count: int301 sprint_ready: bool302 sprint_blockers: list[string] # what's missing for Evidence -> Decision transition303 gap_analysis: list[string]304 recommended_next: list[string]305 risk_flags: list[string]306```307308---309310## Evidence Capture Protocol311312The skill requires user-reported artifacts to close the loop. Evidence is NOT inferred from313analytics alone — the user must explicitly report what happened.314315```yaml316evidence_artifact:317 type: enum # interview | landing_page | ad_test | survey | concierge | other318 date: date319 assumption_id: uuid # links to venture-brief assumption320 method: string # "Mom Test interview" / "fake door landing page" / etc.321 raw_data: # user-reported322 interviews_completed: int323 replies_received: int324 objections_heard: list[string]325 prepay_asks_made: int326 conversion_events: int327 qualitative_notes: string328 verdict: enum # confirmed | falsified | inconclusive329 confidence: enum # high | medium | low330 verdict_rationale: string331```332333See `references/evidence-capture-protocol.md` for the full protocol including verdict logic,334confidence scoring, and edge cases.335336---337338## Cross-Skill Integration339340```341founder (parent)342 | intake populated, route to founder-validation343 v344founder-validation (this skill)345 | read venture-brief346 |347 |-- design_experiment --> writes to venture-brief.experiments[]348 |-- draft_interview --> returns script to user349 |-- capture_evidence --> user reports back, updates venture-brief350 |-- read_analytics --> browser MCP Envelope D, feeds capture_evidence351 |-- evidence_review --> gap analysis, sprint readiness check352 |353 v354founder-sprint (Phase 2)355 | checks evidence_review.sprint_ready before Evidence -> Decision gate356```357358---359360## Failure Modes361362| Failure | Detection | Response |363|---|---|---|364| No venture-brief / missing intake | File missing or intake incomplete | Return to parent: "intake missing"; parent asks the user |365| Assumption not found | assumption_id not in venture-brief.assumptions[] | Return error: "assumption {id} not found in venture-brief" |366| Evidence lacks raw numbers | capture_evidence validation fails (HR-V5) | Reject with: "evidence must include raw numbers — how many interviews? how many conversions?" |367| User claims "confirmed" on verbal intent only | HR-V1 check fails | Reject verdict, explain why verbal intent is not behavioral evidence |368| Browser MCP unavailable | Tool call fails or tools not in environment | Degrade gracefully: "Browser MCP not available — please provide analytics data manually" |369| Browser MCP tool not on allow-list | Tool name not in Envelope D list (HR-V3) | Block immediately, explain: "tool X is not permitted in Envelope D (read-only analytics)" |370| Zero experiments for an assumption | evidence_review surfaces it | Flag honestly as "untested" (HR-V4), recommend experiment |371| Schema version mismatch | venture-brief schema_version != 2 | Error and refuse to proceed (HR-7) |372373---374375## Anti-Patterns376377| Anti-Pattern | Why It Fails | Correct Approach |378|---|---|---|379| Marking "confirmed" because the user said "they loved it" | Verbal intent is the #1 source of false validation; people are polite, not committed | Require behavioral evidence: signup, prepay, workaround, switch (HR-V1) |380| Skipping interviews and going straight to landing page tests | Landing pages test messaging, not problem existence; you need interviews first | Interview first (Mom Test), then landing page to test positioning |381| Treating survey responses as strong evidence | Surveys measure stated preference, not revealed preference; gap is massive | Flag surveys as weak; never mark `confirmed` from survey alone |382| Running experiments without clear kill criteria | Without kill criteria, every result is "encouraging" | Experiment design MUST include kill criteria before execution |383| Using browser MCP to fill out forms or click buttons | Violates Envelope D (HR-V3); the skill is read-only | BLOCK any write action; explain the Envelope D boundary |384| Inferring evidence from analytics without user confirmation | Analytics can be misleading (bot traffic, self-visits, etc.) | Analytics feed into capture_evidence; user confirms the narrative |385| Advancing to Decision stage with 0 interviews | HR-V2 violation | Refuse and surface the gap: "0 interviews logged, need at least 1" |386| Fabricating confidence from lack of disconfirmation | Absence of evidence is not evidence of absence | Surface as "untested" or "inconclusive" (HR-V4) |387388---389390## Reference Files391392Read these as needed during validation work:393394- `references/assumption-ledger-schema.md` — YAML schema for structured assumptions, linking to395 experiments and evidence396- `references/experiment-design.md` — methods matrix (interview / landing page / concierge /397 pre-order / ad test / survey), sample sizes, timelines, success criteria templates, cost398 estimates399- `references/interview-scripts-mom-test.md` — Mom Test protocol, question templates per400 assumption type, red flags, anti-patterns, "the three critical questions"401- `references/browser-mcp-allow-list.md` — Envelope D tool allow-list with regex patterns for402 javascript_tool gating, blocked tools with reasons403- `references/evidence-capture-protocol.md` — how to structure user-reported artifacts, verdict404 logic per evidence type, confidence scoring, edge cases405406---407408## When NOT to Use This Skill409410- **User wants to generate ideas** (not validate them) -- use `founder-ideation`411- **User wants unit economics / pricing** -- use `founder-business-model`412- **User wants to build the product** -- hand off to `forge` via sprint413- **User wants legal / regulatory validation** -- REFUSED (HR-1, HR-2); refer to counsel414- **User wants to scrape competitor sites** -- NOT in scope; Envelope D is read-only analytics415 for the user's own properties416- **User wants to automate outreach** (Envelope B/C) -- deferred to Phase 2.5; Envelope D is417 read-only