surveying-literature · git:20261013.b1594da · 2026-10-13 · sha256 6b41d91c48dbd6f9
surveying-literature git:20261013.b1594daA
Immutable. This exact content never changes and is served at /api/v1/blob/6b41d91c48dbd6f9.
--- name: surveying-literature description: Use when finding related work a draft may have missed, checking whether a contribution has already been published, or mapping what a research area looks like. Triggers on "what related work did we miss", "has this been done before", "is our contribution novel", "map this field", "survey the literature on X", or a paper draft whose related-work section looks thin. --- # Surveying Literature ## Overview **Gap sweep**: from a draft, find the work it should have cited. The gap sweep is a search method run by you, with web search; a script for the citation graph and for field maps is optional (`reference/running-the-script.md`). What a draft misses is mostly recent, topically adjacent rather than linked to its citations, and indexed late. Measured on held-out drafts: nearly every hard reference that was found came from a query naming a specific method, system or author; queries made of general words plus a year found almost nothing, and searches past the eighth found almost nothing. Web search is also the whole cost of a sweep: each `WebSearch` is a model call of its own. So the work is eight precise queries, written from what you know, run four at a time, and candidates confirmed against free indexes rather than searched for again. ## The method 1. **Know the contribution.** Read `main.tex` and its section files. The method section names the technical ingredients, the experiments name the baselines and benchmarks, the related-work section shows what is already cited. Write the contribution in one sentence and list its three to five ingredients. 2. **List what you know.** The closest prior work you can name: methods, systems, acronyms, the authors or groups you associate with this problem. Note why each is close. This list is the raw material for the queries; a reference the draft does not cite is a candidate already. 3. **Write 8 queries.** Every query has one of these three shapes, and the set has at least two of each: | Shape | Example | |---|---| | A method, system or acronym you know + the problem | `NASWOT MeCo zero-cost proxy ensemble neural architecture search` | | An author or group you associate with the problem + the ingredient | `Sutton Whitley Howe mutation rates (1+1)-EA pseudo-boolean` | | A technical ingredient + the problem as the community names it | `determinantal point process client selection federated learning` | The specific name is what makes a query find something; the problem words keep it on topic. 4. **Run the eight queries, four `WebSearch` calls per message.** Read the titles and collect every plausible candidate as the result shows it. These eight searches are the paid part of a sweep: each web search is a model call of its own, about a tenth of a dollar. 5. **Confirm the candidates offline.** Write the candidate titles, one per line, to `candidates.txt` and run ```sh python3 ~/.claude/skills/surveying-literature/assets/lookup-titles.py candidates.txt ``` It asks Crossref and arXiv, free, about three seconds per title, and prints one line per title: `FOUND` with the exact title, first author, year, venue and DOI or arXiv id, or `NOT FOUND`. Then check the draft's `.bib` for each `FOUND` title: a cited one is not a gap. 6. **Rank by closeness to the contribution**, most threatening first: same problem and same method family, then same problem with a different method, then shared ingredients. `FOUND` candidates come first, each with the identifiers the lookup printed; `NOT FOUND` candidates come after them, marked unconfirmed, with the author and year the search showed. A sweep is two search messages, one lookup call and the answer. The script's output, when you ran it, is a list of additions you confirm like any other candidate. ## Field map From a topic rather than a draft: `run-survey.py . --field-map "<topic>"` clusters the area into lines of work and orders them chronologically. See `reference/running-the-script.md`. ## Measured result Held-out benchmark on recent arXiv drafts with six real citations removed each, scoring Recall@30 on removed key prior work the model could not name from memory. Protocol A (2026-10-09, script-first version): 0.38 with the skill, 0.40 without. Protocol B (2026-10-10, 12-query search method, same 20 drafts): 0.52 against 0.34-0.40. Protocol B2 (2026-10-11, 20 new drafts): 0.26 against 0.20; over both sets 0.40 against 0.31, and the skill almost never missed a reference the bare agent found. Estimate: +6 to +9 points on the references a user is least likely to know, at 2.5 times the cost per run. Run cost was 0.36 $ plus 0.11 $ per web search (R² 0.99), and that version made 19 searches per run, half of them to confirm candidates. The method above makes eight and confirms offline; its own measurement is protocol B3. Details: `_evals/surveying-literature/`. ## Limits - **A gap sweep finds topically adjacent work. It cannot judge whether a paper actually threatens the claim.** That is the reviewer's job: "cite and distinguish, or narrow the claim", not "you were scooped". - **Recall is bounded by what you can name.** On the held-out drafts, the references no run found were classics outside the model's memory and preprints a few weeks old. If the user knows the area, ask for the two or three names they would search; one named query beats four general ones. - **Anonymous and non-indexed work is invisible.** Workshop papers and preprints outside arXiv are often in no index. ## See also - `assets/lookup-titles.py`: confirms a list of titles against Crossref and arXiv (`--json` for records) - `reference/reading-a-gap-report.md`: what each grade in the script's report obliges you to do - `reference/running-the-script.md`: the citation-graph sweep, its engines, grading and failure modes - `reviewing-paper-sources`: Phase 0 offers this skill as an optional module - `comparing-papers`: consumes the shortlist - `verifying-bibliography`: shares the retrieval layer in `_shared/scholarly`