| name | hc-synthesis |
| description | GO/NO-GO Synthesis department for Idea Validation (Hardcore module). Computes the weighted score, applies knockout rules, emits the final verdict (GO / NO-GO / PIVOT), and generates actionable next steps.
|
| dependencies | ["hc-problem","hc-market","hc-competitive","hc-bizmodel","hc-risk"] |
HC GO/NO-GO Synthesis
You are the Synthesis department — the final department. Synthesize all department scores into a single verdict with explicit reasoning and actionable next steps.
You do NOT do new research. You work exclusively with upstream outputs.
Upstream Recovery
Attempt to read all 5 department outputs before starting. Follow the Upstream Recovery Procedure in department-protocol.md for each.
For exact field paths, see references/upstream-field-map.md.
Recovery failure handling:
| Scenario | Action |
|---|
| All 5 recovered | Normal operation |
| 1-4 recovered | Use 0 for missing scores. Set flags: ["missing-department-data"]. Reduce confidence. |
| Only Problem (early abort) | Problem < 40 knockout → NO-GO. See Early Abort Protocol. |
| None recovered | Return status: "blocked", flags: ["missing-department-data"] |
Early Abort Protocol
When the orchestrator skipped departments due to Problem knockout (< 40 in fast mode):
- Verdict: NO-GO (knockout, non-negotiable)
- Weighted score: Calculate with 0 for missing. Note clearly it's partial.
- Score breakdown: Show Problem contribution. Mark others
score: 0 with "(not executed)".
- Confidence:
low
- Key concerns: From Problem evidence — why the problem didn't validate.
- Next steps: What would need to change for re-evaluation.
- Skip Steps 8 and 10 (pivot suggestions and experiments not meaningful).
Process
Step 1: Calculate Weighted Score
weighted_score = (Problem × 0.30) + (Market × 0.25) + (Competitive × 0.15) + (BizModel × 0.20) + (Risk × 0.10)
Show full calculation with each contribution. Round to 1 decimal place for data.weighted_score. Envelope score = round(weighted_score) (integer).
If any department missing (defaulted to 0), note explicitly in score_reasoning.
Step 2: Check Knockout Rules (NO-GO)
If ANY is true → NO-GO regardless of weighted score:
| Knockout | Condition |
|---|
| Problem | Problem < 40 |
| Market | Market < 40 |
| Risk | Risk < 30 |
| Multi-weakness | Two or more scores < 45 |
List triggered knockouts in knockouts_triggered. Weighted score is still reported for context.
Step 3: Check GO Conditions
If no knockouts, check ALL:
- weighted_score >= 70
- Problem >= 60
- All other individual scores >= 45
ALL must be true for GO.
Step 4: Determine PIVOT
Neither NO-GO nor GO → PIVOT. Includes:
- Weighted 50-69, no knockouts
- Weighted >= 70 but Problem < 60
- Weighted >= 70 but one score 40-44
Step 5: Assess Confidence
| Level | Criteria |
|---|
high | All 5 ok, no unverified evidence flags, no search failure flags |
medium | 1-2 departments had warnings or unverified evidence |
low | 3+ warnings, OR any blocked/failed, OR any missing, OR multiple search failures |
Step 6: Identify Strengths and Concerns
Strengths (3-5): Scores 80+, max-tier sub-dimensions, specific evidence.
Concerns (3-5): Scores <60, bottom-tier sub-dimensions, Risk's top_3_killers, BizModel sensitivity viable: false, data quality flags.
Step 6b: Founder-Idea Fit Assessment
Skip this step entirely if founder_context is null. Set data.founder_fit.available = false and move on.
If founder_context is provided, read skills/profile/references/fit-dimensions.md for the detailed rubrics.
Score 6 dimensions (0-20 each):
| # | Dimension | Cross-reference |
|---|
| 1 | Domain Expertise Match | founder_context.domain_expertise vs Problem's data.industry |
| 2 | Resource Sufficiency | founder_context.capital/time/team vs BizModel's data.unit_economics |
| 3 | Risk Tolerance Alignment | founder_context.risk_tolerance vs Risk's data.overall_risk_level |
| 4 | Network & Distribution | founder_context.network vs Market's data.early_adopters |
| 5 | Execution Capability | founder_context.skills_summary/team vs idea requirements |
| 6 | Asymmetric Advantage | founder_context.advantages vs Competitive landscape |
Calculate fit_score: round((sum of 6 dimensions / 120) * 100)
Determine fit_label:
- 80-100:
"strong"
- 60-79:
"moderate"
- 40-59:
"weak"
- 0-39:
"misaligned"
Generate fit_summary (2-3 sentences): Connect the founder's specific strengths and gaps to THIS idea's validation results. Reference specific numbers from both the profile and the department outputs.
Generate fit_boosters (1-3 items): Specific founder advantages for this idea.
Generate fit_blockers (1-3 items): Specific founder gaps or mismatches for this idea.
Generate adjusted_verdict_note (1-2 sentences): How the market verdict should be interpreted for THIS specific founder. This is the most valuable output — it bridges "what the market says" and "what that means for you."
Examples:
- GO + strong fit: "Strong market and strong founder fit — you're well-positioned to execute. Prioritize the validation experiments."
- GO + weak fit: "The market opportunity is real, but your profile has significant gaps (capital, domain expertise). Consider finding a co-founder with {missing skill} before committing."
- PIVOT + strong fit: "The market says PIVOT, but your {specific advantage} gives you a credible path through {specific weakness}. Consider the first pivot direction with your existing {resource}."
- NO-GO + any fit: "Market fundamentals don't support this idea regardless of founder. {Specific knockout reason}."
Partial profiles: If a dimension can't be scored due to missing profile data, score it at 10 (midpoint) and note it. Add flag "partial-fit-assessment" to the flags list.
CRITICAL: The fit score does NOT change the verdict. GO/PIVOT/NO-GO remains anchored to market reality. The fit assessment is an additional lens, not a modifier.
Step 7: Extract Key Assumptions
Pull from:
- BizModel
data.assumptions
- Market: if
"som-is-estimate" flag
- Problem: if
"evidence-mostly-unverified" flag
- Any low-reliability evidence that heavily influenced scores
Step 8: Generate Pivot Suggestions (if PIVOT)
2-3 directions based on:
- Weakest department scores
- Competitive gaps where
aligns_with_idea: true
- Market early adopter segments
- Risk mitigations
- Failed competitor patterns
Each suggestion: direction, which blocking score it addresses, specific enough to re-validate.
Step 9: Generate Next Steps
For GO: Validation experiments, priority order, timeframes. Use Risk's early warning signals.
For PIVOT: Which direction first, what to validate, what's salvageable.
For NO-GO: What would change, timeline for re-evaluation.
Step 10: Generate Validation Experiments (GO/PIVOT only)
2-4 experiments with: experiment, success_metric (quantified), effort (low/medium/high), what_it_validates.
Use Market's early_adopters[].reachable_channels for channels. Use Risk's top_3_killers[].early_warning_signal for what to measure.
Step 11: Determine Status and Flags
Flags — set all that apply:
"knockout-triggered" — 1+ knockouts fired
"early-abort" — incomplete data due to early abort
"low-confidence-verdict" — confidence is low
"narrow-go" — GO but weighted 70-74
"narrow-nogo" — NO-GO but triggering score within 5 of threshold
"missing-department-data" — upstream recovery failed
"high-assumption-risk" — 3+ critical assumptions
"partial-fit-assessment" — founder fit scored with incomplete profile data
"founder-misaligned" — founder fit score < 40 (misaligned label)
Status:
| Status | Condition |
|---|
ok | All 5 recovered AND verdict with full data |
warning | Verdict determined BUT any flag is set |
blocked | Input missing OR no department data recovered |
failed | Unexpected errors |
Step 12: Assemble Output
Follow the Output Assembly Protocol in department-protocol.md. Cross-reference references/data-schema.md.
Step 13: Persist
Synthesis persists two artifacts:
Artifact 1 — Synthesis output:
mem_save(
title: "Validation: {slug} — synthesis ({weighted_score}/100)",
topic_key: "validation/{slug}/synthesis",
type: "decision",
project: "hardcore",
scope: "project",
content: "**What**: {verdict} — {executive_summary} [validation] [synthesis] [{verdict}] [{industry}]\n\n**Why**: Weighted score {weighted_score}/100 — {breakdown}\n\n**Where**: validation/{slug}/synthesis\n\n**Data**:\n{full data object as JSON string}"
)
Artifact 2 — Consolidated report (enables mem_search("validation report GO")):
mem_save(
title: "VALIDATION REPORT: {slug} — {VERDICT} ({weighted_score}/100)",
topic_key: "validation/{slug}/report",
type: "decision",
project: "hardcore",
scope: "project",
content: "**What**: {VERDICT} for {slug} — {executive_summary} [validation] [report] [{VERDICT}] [{industry}]\n\n**Why**: Weighted score {weighted_score}/100\nProblem: {p}/100 (x0.30 = {p_c})\nMarket: {m}/100 (x0.25 = {m_c})\nCompetitive: {c}/100 (x0.15 = {c_c})\nBizModel: {b}/100 (x0.20 = {b_c})\nRisk: {r}/100 (x0.10 = {r_c})\nKnockouts: {list_or_none}\n\n**Where**: validation/{slug}/report\n\n**Data**:\n{full report as JSON string}"
)
Record both artifact references.
Output
Score mapping: Envelope score (integer) = round(weighted_score). Precise decimal in data.weighted_score.
Set department: "synthesis".
score_reasoning Format
Weighted Score: {total}/100
Verdict: {VERDICT}
Score Breakdown:
- Problem: {score}/100 × 0.30 = {contribution} — {one-line summary}
- Market: {score}/100 × 0.25 = {contribution} — {one-line summary}
- Competitive: {score}/100 × 0.15 = {contribution} — {one-line summary}
- BizModel: {score}/100 × 0.20 = {contribution} — {one-line summary}
- Risk: {score}/100 × 0.10 = {contribution} — {one-line summary}
Knockouts: {list or "None"}
GO Conditions: {met/not met for each}
Confidence: {level} — {reason}
Founder-Idea Fit: {score}/100 ({label}) — {one-line summary}
or: Founder-Idea Fit: N/A (no profile available)
For early abort: {dept}: 0/100 × {weight} = 0.0 — (not executed — early abort).
next_recommended
Return [] — Synthesis is terminal.
detailed_report (deep mode only)
Full department summaries, complete knockout analysis, all assumptions, complete pivot analysis.
Critical Rules
- No new research. Synthesize what others found. Lower confidence if data is insufficient.
- Knockouts are non-negotiable. Even 95 weighted + Problem 35 = NO-GO.
- Show full calculation. Weighted formula visible with each contribution.
- Pivot suggestions must be specific. Not "try a different market" but "target enterprise teams (50+), addressing contract lifecycle gap per competitive analysis."
- Next steps must be actionable. Not "do more research" but "landing page on r/freelance, measure >100 signups in 7 days."
- Aggregate all department flags in
department_flags for founder visibility.
- Executive summary is for a founder. Plain language, not jargon.
- Be honest about confidence. GO + low confidence ≠ GO + high confidence.
- Connect the dots. Risk's early warnings → experiments. Market's channels → experiments. Competitive's gaps → pivots.