Discover and validate research gaps using INSIGHT pipeline + debate validation
Gap-analysis carries ~25% of the total paper/web budget. It performs targeted investigation of identified gaps.
| Metric | Small | Medium | Large |
|---|---|---|---|
| Papers read | 10 | 15 | 25+ |
| Web pages fetched | 10 | 20 | 40+ |
| Search queries | 10 | 20 | 40+ |
| Iteration rounds | 4 | 6 | 8+ |
| Gaps investigated (min) | 3 | 5 | 8+ |
Read the topicSize from state to select the correct column.
These are HARD FLOORS.
| Metric | Current | Target | Remaining | Status |
|---|---|---|---|---|
| Papers read | ?? | [from budget] | ?? | ... |
| Web pages fetched | ?? | [from budget] | ?? | ... |
| Queries issued | ?? | [from budget] | ?? | ... |
| Iterations done | ?? | [from budget] | ?? | ... |
| Gaps identified | ?? | [from budget] | ?? | ... |
| Gaps with evidence | ?? | [from budget] | ?? | ... |
When a tactic returns a Yield Report, ADD its counts to the Current column. </HARD-GATE>
WHILE (unvalidated_gaps AND iteration < MAX_ITERATIONS):
STEP 1 — IDENTIFY GAPS:
From surveyResult.knowledge + surveyResult.gaps, enumerate candidate gaps:
- What problems remain unsolved?
- What methods are missing or underexplored?
- What assumptions are unquestioned?
- What benchmarks or datasets are absent?
STEP 2 — INVESTIGATE (parallel):
Call academic-research tactic: 3 queries targeting each candidate gap's prior work
Call web-research tactic: 3 queries targeting each candidate gap's practical context
Merge new papersRead and urlsVisited into state
STEP 3 — DEEPEN with INSIGHT pipeline:
For each candidate gap with unclear root cause or non-obvious stakeholder need:
Call insight tactic with:
- gap: the candidate gap JSON
- evidence: accumulated evidence string from Steps 1-2
- knowledge: current knowledge string
Collect InsightResult (PASS / REVISE / FAIL verdict)
- PASS: promote gap to validated_gaps[]
- REVISE: refine gap framing, re-queue for next iteration
- FAIL: move to rejected_gaps[] with reason
STEP 4 — VALIDATE via review tactic:
Call review tactic on the set of PASS gaps from this iteration
Review may escalate to multiagent-debate for controversial or high-stakes gaps
Gaps that survive review → confirmed in validatedGaps[]
Gaps that fail review → rejected with reason
If ANY condition fails → CONTINUE iterating. Do NOT evaluate stop conditions. </HARD-GATE>
STEP 5 — STOP CHECK:
- All candidate gaps processed? → STOP (success)
- No new gaps validated for 2 consecutive iterations? → STOP (plateau)
- MAX_ITERATIONS hit? → STOP (budget)
END LOOP
Evidence balance:
Dimension completeness:
Cross-domain hint (optional but encouraged):
If ANY checkbox in the first two sections fails → add 1-3 targeted queries and run ONE MORE iteration. Maximum 2 extra completeness iterations. Cross-domain leads are a bonus, not a requirement here. </HARD-GATE>
knowledge: inherited from lit-survey surveyResult; extended with gap-analysis findings each iterationpapersRead: inherited from lit-survey; deduplicated, extended with new papers read in Steps 2-3urlsVisited: inherited from lit-survey; deduplicated, extended with new URLs visited in Steps 2-3validatedGaps: string[] of gaps that passed INSIGHT + review; grows each iterationrejectedGaps: string[] with rejection reasons; for transparency{
"validatedGaps": [
{
"id": "gap_001",
"description": "Gap description...",
"rootCause": "Why this gap exists...",
"stakeholders": ["who cares and why"],
"evidence": "Supporting evidence from papers/web...",
"insightVerdict": "PASS",
"reviewVerdict": "approved"
}
],
"rejectedGaps": [
{
"id": "gap_002",
"description": "Gap description...",
"rejectionReason": "Already addressed by X et al. (2024)..."
}
],
"papersRead": ["paper1", "paper2", "..."],
"urlsVisited": ["url1", "url2", "..."],
"knowledge": "Extended knowledge string...",
"iterationsUsed": 4,
"stopReason": "all_gaps_processed | plateau | max_iterations"
}