Iterative literature survey — search, read, discover gaps, until sufficient coverage
Lit-survey carries ~60% of the total paper/web budget. It is the primary discovery engine.
| Metric | Small | Medium | Large |
|---|---|---|---|
| Papers read | 20 | 40 | 60+ |
| Web pages fetched | 20 | 50 | 120+ |
| Search queries | 15 | 35 | 70+ |
| Iteration rounds | 6 | 8 | 12+ |
Read the from state (set by /dare Phase 0.5) to select the correct column. These are HARD FLOORS — the strategy may NOT exit until the Budget Gate passes.
<HARD-GATE> Print this table BEFORE EVERY iteration of the lit-survey loop. Update counts after each tactic call returns its Yield Report. Skipping the ledger print is a protocol violation. <HARD-GATE> Before evaluating any stop condition (plateau, saturation, etc.), check: <HARD-GATE> After the Budget Gate passes AND the stop check says "stop," answer honestly:topicSize| Metric | Current | Target | Remaining | Status |
|---|---|---|---|---|
| Papers read | ?? | [from budget] | ?? | ... |
| Web pages fetched | ?? | [from budget] | ?? | ... |
| Queries issued | ?? | [from budget] | ?? | ... |
| Iterations done | ?? | [from budget] | ?? | ... |
| Sub-areas covered | ?? | 3+ | ?? | ... |
| Research communities found | ?? | 2+ | ?? | ... |
When a tactic returns a Yield Report, ADD its counts to the Current column. </HARD-GATE>
WHILE (gaps.length > 0 AND iteration < MAX_ITERATIONS):
STEP 1 — QUERY GENERATION:
Generate 3 academic queries + 3 web queries based on:
- Current gaps (from previous reflection)
- Research brief initial queries (first iteration only)
- Knowledge accumulated so far
STEP 2 — SEARCH + READ:
Call academic-research tactic with 3 academic queries
Call web-research tactic with 3 web queries (in parallel)
STEP 3 — REFLECT:
Use prompts/reflect-gaps.md to discover new gaps from what was just read
Update knowledge with key findings
STEP 4 — EVALUATE:
Use prompts/evaluate-answer.md to judge sufficiency
Remove gaps that are now answered
If ANY condition fails → CONTINUE iterating. Do NOT evaluate stop conditions. The Budget Gate takes absolute priority over convergence signals.
Only when ALL three conditions pass may you proceed to the stop check. </HARD-GATE>
STEP 5 — STOP CHECK:
- All gaps cleared? → STOP (success)
- No progress for 3 iterations? → STOP (plateau)
- Target paper count reached? → STOP (coverage)
- MAX_ITERATIONS hit? → STOP (budget)
END LOOP
Sub-area coverage:
Citation tracing:
Research community diversity:
Depth check:
If ANY checkbox fails → add 1-3 targeted queries and run ONE MORE iteration. Maximum 2 extra completeness iterations allowed. </HARD-GATE>
knowledge: cumulative string, grows each iterationpapersRead: string[] of paper titles, deduplicate across iterationsurlsVisited: string[] of URLs, deduplicate across iterationsgaps: string[] discovered via reflection, removed when answered{
"knowledge": "Accumulated knowledge string...",
"papersRead": ["paper1", "paper2", ...],
"urlsVisited": ["url1", "url2", ...],
"gaps": ["remaining gap1", ...],
"facets": [...],
"iterationsUsed": 7,
"stopReason": "all_gaps_cleared | plateau | target_reached | max_iterations"
}