From 4cf627b960bd419a201a50b73bcdf9a596c9a383 Mon Sep 17 00:00:00 2001 From: moose-lab Date: Wed, 3 Jun 2026 09:05:38 +0800 Subject: [PATCH] feat: add launch materials map validation --- .../data/growth-experiment-evidence.csv | 1 + .../data/growth-experiment-registry.csv | 1 + .../data/search-ai-baseline-prompts.csv | 2 + .../2026-06-03-launch-materials-map.md | 25 ++++++++ ...ickfork-growth-lifecycle-prioritization.md | 64 +++++++++++++++++++ ...aunch-materials-map-validation-contract.md | 60 +++++++++++++++++ .../growth-experiment-report.test.ts | 16 +++++ src/marketing/growth-experiment-report.ts | 19 ++++++ src/marketing/growth-experiments.test.ts | 18 ++++++ src/marketing/growth-experiments.ts | 15 +++++ src/marketing/search-ai-baseline.test.ts | 36 +++++++++++ src/marketing/search-ai-baseline.ts | 46 +++++++++++++ 12 files changed, 303 insertions(+) create mode 100644 docs/superpowers/plans/2026-06-03-launch-materials-map-validation-contract.md diff --git a/docs/marketing/data/growth-experiment-evidence.csv b/docs/marketing/data/growth-experiment-evidence.csv index cceb4ad..c8301d2 100644 --- a/docs/marketing/data/growth-experiment-evidence.csv +++ b/docs/marketing/data/growth-experiment-evidence.csv @@ -3,3 +3,4 @@ experiment_id,status,window_start,window_end,control_page_views,control_cta_clic 2026_q2_source_backed_assets_intent_validation,pending_evidence,,,,,,,,,,,pending,pending,insufficient_data,ga4_page_view_and_cta_clicked_and_generation_started_and_generation_failed_14_day_window_and_search_console_query_baseline_and_ai_answer_audit 2026_q2_readme_cards_intent_validation,pending_evidence,,,,,,,,,,,pending,pending,insufficient_data,ga4_page_view_and_cta_clicked_and_generation_started_and_generation_failed_14_day_window_and_search_console_query_baseline_and_ai_answer_audit 2026_q2_cold_start_materials_intent_validation,pending_evidence,,,,,,,,,,,pending,pending,insufficient_data,needs_14_days_of_ga4_page_view_cta_clicked_generation_started_generation_failed_search_console_query_baseline_and_ai_answer_audit_before_deciding +2026_q2_launch_materials_map_intent_validation,pending_evidence,,,,,,,,,,,pending,pending,insufficient_data,needs_14_days_of_ga4_page_view_cta_clicked_generation_started_generation_failed_launch_materials_map_copied_search_console_query_baseline_and_ai_answer_audit_before_deciding diff --git a/docs/marketing/data/growth-experiment-registry.csv b/docs/marketing/data/growth-experiment-registry.csv index 79dc9a0..4d34751 100644 --- a/docs/marketing/data/growth-experiment-registry.csv +++ b/docs/marketing/data/growth-experiment-registry.csv @@ -3,3 +3,4 @@ experiment_id,status,lifecycle_stage,target_user,control_path,variant_path,prima 2026_q2_source_backed_assets_intent_validation,active,validation,product_marketer,/product/github-repo-to-launch-package,/product/source-backed-launch-assets,generate_launch_card,cta_clicked_per_page_view,generation_failed_per_generation_started,higher_cta_rate_with_no_significant_guardrail_regression,14_days,ga4_page_view_and_cta_clicked_and_generation_started_and_generation_failed_and_search_console_query_baseline_and_ai_answer_audit 2026_q2_readme_cards_intent_validation,active,validation,design_lead,/product/github-repo-to-launch-package,/product/readme-marketing-cards,generate_launch_card,cta_clicked_per_page_view,generation_failed_per_generation_started,higher_cta_rate_with_no_significant_guardrail_regression,14_days,ga4_page_view_and_cta_clicked_and_generation_started_and_generation_failed_and_search_console_query_baseline_and_ai_answer_audit 2026_q2_cold_start_materials_intent_validation,active,validation,ai_project_builder,/product/github-repo-to-launch-package,/product/cold-start-launch-materials,generate_launch_card,cta_clicked_per_page_view,generation_failed_per_generation_started,higher_cta_rate_with_no_significant_guardrail_regression,14_days,ga4_page_view_and_cta_clicked_and_generation_started_and_generation_failed_and_search_console_query_baseline_and_ai_answer_audit +2026_q2_launch_materials_map_intent_validation,active,validation,ai_project_builder,/product/cold-start-launch-materials,/product/github-repo-launch-materials-map,generate_launch_card,cta_clicked_per_page_view,generation_failed_per_generation_started,higher_cta_rate_with_no_significant_guardrail_regression,14_days,ga4_page_view_and_cta_clicked_and_generation_started_and_generation_failed_and_search_console_query_baseline_and_ai_answer_audit_and_launch_materials_map_copied diff --git a/docs/marketing/data/search-ai-baseline-prompts.csv b/docs/marketing/data/search-ai-baseline-prompts.csv index bc62558..604dfc8 100644 --- a/docs/marketing/data/search-ai-baseline-prompts.csv +++ b/docs/marketing/data/search-ai-baseline-prompts.csv @@ -5,3 +5,5 @@ readme_cards_control,2026_q2_readme_cards_intent_validation,control,/product/git readme_cards_variant,2026_q2_readme_cards_intent_validation,variant,/product/readme-marketing-cards,design_lead,README marketing cards,readme_marketing_cards,google_search_console|chatgpt_search|perplexity|google_ai_overview|gemini|claude,QuickFork|GitHub repository|README|marketing cards|social preview|launch visuals|source-backed,pricing|rankings|revenue|customer_count|conversion_lift|product_hunt_outcome|guaranteed_launch|validated_ai_citation,check whether README marketing card intent is visible and accurately described cold_start_materials_control,2026_q2_cold_start_materials_intent_validation,control,/product/github-repo-to-launch-package,ai_project_builder,GitHub repo to launch package,github_repo_to_launch_package,google_search_console|chatgpt_search|perplexity|google_ai_overview|gemini|claude,QuickFork|GitHub repository|launch package|source-backed|README|social|deck|outreach,pricing|rankings|revenue|customer_count|conversion_lift|product_hunt_outcome|guaranteed_launch|validated_ai_citation,compare generic launch-package category demand against cold-start launch-materials demand cold_start_materials_variant,2026_q2_cold_start_materials_intent_validation,variant,/product/cold-start-launch-materials,ai_project_builder,cold start launch materials,cold_start_launch_materials,google_search_console|chatgpt_search|perplexity|google_ai_overview|gemini|claude,QuickFork|GitHub repository|cold-start|launch materials|README|social|deck|visual|outreach,pricing|rankings|revenue|customer_count|conversion_lift|product_hunt_outcome|guaranteed_launch|validated_ai_citation,check whether full launch-materials intent is visible and accurately described +launch_materials_map_control,2026_q2_launch_materials_map_intent_validation,control,/product/cold-start-launch-materials,ai_project_builder,cold start launch materials,cold_start_launch_materials,google_search_console|chatgpt_search|perplexity|google_ai_overview|gemini|claude,QuickFork|GitHub repository|cold-start|launch materials|README|social|deck|visual|outreach,pricing|rankings|revenue|customer_count|conversion_lift|product_hunt_outcome|guaranteed_launch|validated_ai_citation,compare full launch-materials category demand against channel-map planning demand +launch_materials_map_variant,2026_q2_launch_materials_map_intent_validation,variant,/product/github-repo-launch-materials-map,ai_project_builder,GitHub repo launch materials map,github_repo_launch_materials_map,google_search_console|chatgpt_search|perplexity|google_ai_overview|gemini|claude,QuickFork|GitHub repository|launch materials map|channel plan|README|social|deck|visual|outreach,pricing|rankings|revenue|customer_count|conversion_lift|product_hunt_outcome|guaranteed_launch|validated_ai_citation,check whether AI answers explain the source-backed channel map without inventing proof diff --git a/docs/marketing/research/2026-06-03-launch-materials-map.md b/docs/marketing/research/2026-06-03-launch-materials-map.md index 7882102..5d54504 100644 --- a/docs/marketing/research/2026-06-03-launch-materials-map.md +++ b/docs/marketing/research/2026-06-03-launch-materials-map.md @@ -78,3 +78,28 @@ Guardrails: ## Next Validation Step Run a 14-day comparison against `/product/github-repo-to-launch-package` and `/product/cold-start-launch-materials`. Prioritize this slice only if visitors who see or copy the map show stronger generation completion, artifact export, or full-package request behavior. + +## 2026-06-03 Validation Contract Update + +The launch materials map now has a formal validation contract: + +- Experiment id: `2026_q2_launch_materials_map_intent_validation`. +- Control route: `/product/cold-start-launch-materials`. +- Variant route: `/product/github-repo-launch-materials-map`. +- Primary metric: `cta_clicked_per_page_view`. +- Guardrail metric: `generation_failed_per_generation_started`. +- Required activation evidence: `launch_materials_map_copied`. +- Required discovery evidence: Search Console query baseline and AI-answer audit. + +This contract compares the broader cold-start launch materials category against the narrower channel-map planning job. It does not validate demand by itself. + +Additional verification: + +- RED registry test failed first because the launch materials map experiment did not exist. +- RED evidence test failed first because no pending evidence row existed. +- RED Search/AI test failed first because no control or variant prompt rows existed. +- GREEN focused registry, evidence, and Search/AI baseline tests passed after adding the contract rows. +- Related verification passed: `npm test -- src/marketing/growth-experiments.test.ts src/marketing/growth-experiment-report.test.ts src/marketing/search-ai-baseline.test.ts` returned 3 files passed and 23 tests passed. +- Full verification passed: `npm test` returned 24 files passed and 163 tests passed. +- Build verification passed: `npm run build` completed TypeScript build and Vite production build. +- Diff hygiene passed: `git diff --check` returned no whitespace errors. diff --git a/docs/plans/2026-06-01-quickfork-growth-lifecycle-prioritization.md b/docs/plans/2026-06-01-quickfork-growth-lifecycle-prioritization.md index 474021d..2377481 100644 --- a/docs/plans/2026-06-01-quickfork-growth-lifecycle-prioritization.md +++ b/docs/plans/2026-06-01-quickfork-growth-lifecycle-prioritization.md @@ -1582,3 +1582,67 @@ Decision: Next action: - Run full verification, merge, production smoke, then compare `/product/github-repo-launch-materials-map` behavior against `/product/github-repo-to-launch-package` and `/product/cold-start-launch-materials` over a 14-day window. + +## 2026-06-03 Launch Materials Map Validation Contract Slice + +Hypothesis: + +- If QuickFork compares the broad `/product/cold-start-launch-materials` route against the narrower `/product/github-repo-launch-materials-map` route, the team can learn whether AI project builders value source-backed channel planning enough to click the CTA, complete generation, copy the materials map, export artifacts, or request a reviewed launch package. + +Lifecycle stage: + +- Validation, with activation evidence required. + +Target user: + +- AI project builders preparing cold-start GitHub launches. +- Open-source maintainers and DevRel/product-marketing operators who need source-backed planning for README, social, deck, visual, and outreach materials. + +Changed surface: + +- `src/marketing/growth-experiments.ts` +- `src/marketing/growth-experiments.test.ts` +- `src/marketing/growth-experiment-report.ts` +- `src/marketing/growth-experiment-report.test.ts` +- `src/marketing/search-ai-baseline.ts` +- `src/marketing/search-ai-baseline.test.ts` +- `docs/marketing/data/growth-experiment-registry.csv` +- `docs/marketing/data/growth-experiment-evidence.csv` +- `docs/marketing/data/search-ai-baseline-prompts.csv` +- `docs/marketing/research/2026-06-03-launch-materials-map.md` +- `docs/superpowers/plans/2026-06-03-launch-materials-map-validation-contract.md` + +Metric: + +- Primary: `cta_clicked_per_page_view`. +- Guardrail: `generation_failed_per_generation_started`. +- Required activation signal: `launch_materials_map_copied`. +- Required discovery evidence: Search Console query baseline and AI-answer audit. + +Guardrail: + +- Do not treat a published page, prompt coverage, or a copied artifact as validated demand. +- Do not claim pricing, rankings, revenue, customer count, conversion lift, Product Hunt outcome, guaranteed launch results, or validated AI citation. +- Keep evidence rows free of email, raw repo text, tokens, secrets, raw artifact bodies, private notes, or unsupported proof. + +Evidence observed: + +- Baseline `npm test` passed before changes: 24 test files, 160 tests passed. +- RED registry test failed first because `2026_q2_launch_materials_map_intent_validation` did not exist. +- RED evidence test failed first because no pending evidence row existed for the launch materials map experiment. +- RED Search/AI test failed first because no control or variant baseline rows existed for the launch materials map experiment. +- GREEN focused registry verification passed: `npm test -- src/marketing/growth-experiments.test.ts -t "launch materials map|mirrors|references published|decision-ready"`. +- GREEN focused evidence verification passed: `npm test -- src/marketing/growth-experiment-report.test.ts -t "launch materials map|evidence row|mirrors|registry experiment|privacy-safe"`. +- GREEN focused Search/AI verification passed: `npm test -- src/marketing/search-ai-baseline.test.ts -t "launch materials map|covers every|mirrors|published|claim-safe"`. +- Related verification passed: `npm test -- src/marketing/growth-experiments.test.ts src/marketing/growth-experiment-report.test.ts src/marketing/search-ai-baseline.test.ts` returned 3 files passed and 23 tests passed. +- Full verification passed: `npm test` returned 24 files passed and 163 tests passed. +- Build verification passed: `npm run build` completed TypeScript build and Vite production build. +- Diff hygiene passed: `git diff --check` returned no whitespace errors. + +Decision: + +- Treat this as a P0 measurement contract for the launch materials map slice, not a demand result. The contract defines what evidence must be collected before deciding whether the channel-map product angle deserves more landing page, packaging, or paid-offer work. + +Next action: + +- Run full verification, merge, production smoke, then use `2026_q2_launch_materials_map_intent_validation` for 14 days of GA4, Search Console, and AI-answer evidence collection. diff --git a/docs/superpowers/plans/2026-06-03-launch-materials-map-validation-contract.md b/docs/superpowers/plans/2026-06-03-launch-materials-map-validation-contract.md new file mode 100644 index 0000000..b4d0334 --- /dev/null +++ b/docs/superpowers/plans/2026-06-03-launch-materials-map-validation-contract.md @@ -0,0 +1,60 @@ +# 2026-06-03 Launch Materials Map Validation Contract + +## Objective + +Add a measurement contract for the launch materials map product page and generated artifact. The contract should make `/product/github-repo-launch-materials-map` comparable against `/product/cold-start-launch-materials` and require activation, Search Console, and AI-answer evidence before QuickFork treats the page or feature as validated. + +## Hypothesis + +If QuickFork compares the broader cold-start launch materials route against the narrower launch materials map route, the team can learn whether builders value channel planning enough to copy the map, complete generations, export artifacts, or request a reviewed launch package. + +## Lifecycle Stage + +- Validation. +- Activation evidence is required through `launch_materials_map_copied`. + +## Target User + +- AI project builders preparing cold-start GitHub launches. +- Open-source maintainers and DevRel/product-marketing operators who need source-backed channel planning for README, social, deck, visual, and outreach materials. + +## Implementation Scope + +- Add `2026_q2_launch_materials_map_intent_validation` to the typed growth experiment registry. +- Mirror the experiment in `docs/marketing/data/growth-experiment-registry.csv`. +- Add a pending evidence row to `growthExperimentEvidence`. +- Mirror the evidence row in `docs/marketing/data/growth-experiment-evidence.csv`. +- Add Search/AI baseline rows for the control and variant routes. +- Mirror the baseline rows in `docs/marketing/data/search-ai-baseline-prompts.csv`. +- Update the launch materials map research note, lifecycle plan, and Obsidian strategy mirror. + +## Metrics + +- Primary comparison metric: `cta_clicked_per_page_view`. +- Guardrail metric: `generation_failed_per_generation_started`. +- Required activation evidence: `launch_materials_map_copied`. +- Required discovery evidence: Search Console query baseline and AI-answer audit. + +## Guardrails + +- Do not treat prompt coverage, a published page, or a copied artifact as validated demand. +- Do not claim pricing, rankings, revenue, customer count, conversion lift, Product Hunt outcome, guaranteed launch results, or validated AI citation. +- Keep evidence rows and analytics requirements free of email, raw repo text, tokens, secrets, raw artifact bodies, and private notes. + +## Verification Notes + +- Baseline `npm test` passed before changes: 24 test files, 160 tests. +- RED registry test failed first because `2026_q2_launch_materials_map_intent_validation` did not exist. +- RED evidence test failed first because no pending evidence row existed for the launch materials map experiment. +- RED Search/AI test failed first because no control or variant baseline rows existed for the launch materials map experiment. +- GREEN focused registry verification passed: `npm test -- src/marketing/growth-experiments.test.ts -t "launch materials map|mirrors|references published|decision-ready"`. +- GREEN focused evidence verification passed: `npm test -- src/marketing/growth-experiment-report.test.ts -t "launch materials map|evidence row|mirrors|registry experiment|privacy-safe"`. +- GREEN focused Search/AI verification passed: `npm test -- src/marketing/search-ai-baseline.test.ts -t "launch materials map|covers every|mirrors|published|claim-safe"`. +- Related verification passed: `npm test -- src/marketing/growth-experiments.test.ts src/marketing/growth-experiment-report.test.ts src/marketing/search-ai-baseline.test.ts` returned 3 files passed and 23 tests passed. +- Full verification passed: `npm test` returned 24 files passed and 163 tests passed. +- Build verification passed: `npm run build` completed TypeScript build and Vite production build. +- Diff hygiene passed: `git diff --check` returned no whitespace errors. + +## Next Action + +Run full verification, merge, production smoke the public route and context assets, then use the new rows for 14 days of GA4, Search Console, and AI-answer evidence collection. diff --git a/src/marketing/growth-experiment-report.test.ts b/src/marketing/growth-experiment-report.test.ts index 7c458d3..60b06ba 100644 --- a/src/marketing/growth-experiment-report.test.ts +++ b/src/marketing/growth-experiment-report.test.ts @@ -124,6 +124,22 @@ describe("growth experiment evidence report", () => { } }); + it("keeps launch materials map evidence pending until activation and search data exists", () => { + const evidence = getGrowthExperimentEvidenceById("2026_q2_launch_materials_map_intent_validation"); + + expect(evidence).toEqual( + expect.objectContaining({ + status: "pending_evidence", + searchConsoleStatus: "pending", + aiVisibilityStatus: "pending", + decision: "insufficient_data", + }), + ); + expect(evidence?.nextEvidenceNeeded).toContain("launch_materials_map_copied"); + expect(evidence?.nextEvidenceNeeded).toContain("search_console_query_baseline"); + expect(evidence?.nextEvidenceNeeded).toContain("ai_answer_audit"); + }); + it("renders a route comparison report without inventing validation", () => { const report = renderGrowthExperimentComparisonReport("2026_q2_landing_page_intent_comparison"); diff --git a/src/marketing/growth-experiment-report.ts b/src/marketing/growth-experiment-report.ts index f47d3fe..c86dc4a 100644 --- a/src/marketing/growth-experiment-report.ts +++ b/src/marketing/growth-experiment-report.ts @@ -99,6 +99,25 @@ export const growthExperimentEvidence: readonly GrowthExperimentEvidence[] = [ nextEvidenceNeeded: "needs_14_days_of_ga4_page_view_cta_clicked_generation_started_generation_failed_search_console_query_baseline_and_ai_answer_audit_before_deciding", }, + { + experimentId: "2026_q2_launch_materials_map_intent_validation", + status: "pending_evidence", + windowStart: "", + windowEnd: "", + controlPageViews: undefined, + controlCtaClicks: undefined, + variantPageViews: undefined, + variantCtaClicks: undefined, + controlGenerationStarts: undefined, + controlGenerationFailures: undefined, + variantGenerationStarts: undefined, + variantGenerationFailures: undefined, + searchConsoleStatus: "pending", + aiVisibilityStatus: "pending", + decision: "insufficient_data", + nextEvidenceNeeded: + "needs_14_days_of_ga4_page_view_cta_clicked_generation_started_generation_failed_launch_materials_map_copied_search_console_query_baseline_and_ai_answer_audit_before_deciding", + }, ]; export function getGrowthExperimentEvidenceById(experimentId: string) { diff --git a/src/marketing/growth-experiments.test.ts b/src/marketing/growth-experiments.test.ts index 55aa802..dc1a5b3 100644 --- a/src/marketing/growth-experiments.test.ts +++ b/src/marketing/growth-experiments.test.ts @@ -101,6 +101,24 @@ describe("growth experiment registry", () => { ); }); + it("adds the launch materials map page to page intent validation", () => { + expect(getGrowthExperimentById("2026_q2_launch_materials_map_intent_validation")).toEqual( + expect.objectContaining({ + status: "active", + lifecycleStage: "validation", + targetUser: "ai_project_builder", + controlPath: "/product/cold-start-launch-materials", + variantPath: "/product/github-repo-launch-materials-map", + primaryCta: "generate_launch_card", + primaryMetric: "cta_clicked_per_page_view", + guardrailMetric: "generation_failed_per_generation_started", + minimumWindow: "14_days", + evidenceRequired: + "ga4_page_view_and_cta_clicked_and_generation_started_and_generation_failed_and_search_console_query_baseline_and_ai_answer_audit_and_launch_materials_map_copied", + }), + ); + }); + it("mirrors the editable CSV registry", () => { const { headers, rows } = parseRegistry(); diff --git a/src/marketing/growth-experiments.ts b/src/marketing/growth-experiments.ts index fd1c0f7..c1cd281 100644 --- a/src/marketing/growth-experiments.ts +++ b/src/marketing/growth-experiments.ts @@ -81,6 +81,21 @@ export const growthExperimentRegistry: readonly GrowthExperiment[] = [ evidenceRequired: "ga4_page_view_and_cta_clicked_and_generation_started_and_generation_failed_and_search_console_query_baseline_and_ai_answer_audit", }, + { + id: "2026_q2_launch_materials_map_intent_validation", + status: "active", + lifecycleStage: "validation", + targetUser: "ai_project_builder", + controlPath: "/product/cold-start-launch-materials", + variantPath: "/product/github-repo-launch-materials-map", + primaryCta: "generate_launch_card", + primaryMetric: "cta_clicked_per_page_view", + guardrailMetric: "generation_failed_per_generation_started", + decisionRule: "higher_cta_rate_with_no_significant_guardrail_regression", + minimumWindow: "14_days", + evidenceRequired: + "ga4_page_view_and_cta_clicked_and_generation_started_and_generation_failed_and_search_console_query_baseline_and_ai_answer_audit_and_launch_materials_map_copied", + }, ]; export function getGrowthExperimentById(id: string) { diff --git a/src/marketing/search-ai-baseline.test.ts b/src/marketing/search-ai-baseline.test.ts index 33c64ec..ab79493 100644 --- a/src/marketing/search-ai-baseline.test.ts +++ b/src/marketing/search-ai-baseline.test.ts @@ -128,6 +128,42 @@ describe("search and AI baseline contract", () => { ); }); + it("covers the launch materials map page with control and variant prompts", () => { + const rows = getSearchAiBaselineRowsForExperiment("2026_q2_launch_materials_map_intent_validation"); + + expect(rows).toHaveLength(2); + expect(rows).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: "launch_materials_map_control", + routeRole: "control", + canonicalPath: "/product/cold-start-launch-materials", + targetUser: "ai_project_builder", + query: "cold start launch materials", + queryCluster: "cold_start_launch_materials", + }), + expect.objectContaining({ + id: "launch_materials_map_variant", + routeRole: "variant", + canonicalPath: "/product/github-repo-launch-materials-map", + targetUser: "ai_project_builder", + query: "GitHub repo launch materials map", + queryCluster: "github_repo_launch_materials_map", + expectedTerms: expect.arrayContaining([ + "QuickFork", + "GitHub repository", + "launch materials map", + "README", + "social", + "deck", + "visual", + "outreach", + ]), + }), + ]), + ); + }); + it("renders a manual runbook without claiming visibility", () => { const runbook = renderSearchAiBaselineRunbook("2026_q2_source_backed_assets_intent_validation"); diff --git a/src/marketing/search-ai-baseline.ts b/src/marketing/search-ai-baseline.ts index 322afe5..5a8b92d 100644 --- a/src/marketing/search-ai-baseline.ts +++ b/src/marketing/search-ai-baseline.ts @@ -140,6 +140,52 @@ export const searchAiBaselineRows: readonly SearchAiBaselineRow[] = [ forbiddenClaims: allForbiddenClaims, decisionUse: "check whether full launch-materials intent is visible and accurately described", }, + { + id: "launch_materials_map_control", + experimentId: "2026_q2_launch_materials_map_intent_validation", + routeRole: "control", + canonicalPath: "/product/cold-start-launch-materials", + targetUser: "ai_project_builder", + query: "cold start launch materials", + queryCluster: "cold_start_launch_materials", + surfaces: allSurfaces, + expectedTerms: [ + "QuickFork", + "GitHub repository", + "cold-start", + "launch materials", + "README", + "social", + "deck", + "visual", + "outreach", + ], + forbiddenClaims: allForbiddenClaims, + decisionUse: "compare full launch-materials category demand against channel-map planning demand", + }, + { + id: "launch_materials_map_variant", + experimentId: "2026_q2_launch_materials_map_intent_validation", + routeRole: "variant", + canonicalPath: "/product/github-repo-launch-materials-map", + targetUser: "ai_project_builder", + query: "GitHub repo launch materials map", + queryCluster: "github_repo_launch_materials_map", + surfaces: allSurfaces, + expectedTerms: [ + "QuickFork", + "GitHub repository", + "launch materials map", + "channel plan", + "README", + "social", + "deck", + "visual", + "outreach", + ], + forbiddenClaims: allForbiddenClaims, + decisionUse: "check whether AI answers explain the source-backed channel map without inventing proof", + }, ]; export function getSearchAiBaselineRowsForExperiment(experimentId: string) {