Digest one paper end-to-end into sota/papers/<citekey>/. This is the
atomic unit of SOTA work: it either completes fully or it does not happen.
Never leave a partial digest.
Read First
sota/README.md— synthesis format and digestion rules (the scaffold owns the format)references/bibliography-rules.md— citekeys, version resolution, cross-validation
MCP Preflight (hard gate)
Before anything else, probe the scholarly MCP servers with one trivial query each (e.g., search a known title). The gate is by capability, never by API key — a missing key only throttles, it never blocks:
- Required:
arxiv(full text) must respond, AND at least one bibliographic source —semantic-scholar,dblp, oropenalex— must respond. - If those required capabilities are unavailable: STOP, report which servers failed, and ask the user to fix the MCP setup.
- If a reachable source is down but the gate is met, proceed and note the reduced cross-check in the synthesis.
Never fall back to model memory, web search, or scraping. A citation exists only if an MCP lookup produced it.
Procedure
- Resolve identity: from the given title/DOI/arXiv/PDF, find the paper via semantic-scholar (and dblp for CS work). Ask the user only if the match is genuinely ambiguous.
- Resolve the most authoritative version: published venue > latest arXiv
revision > other preprint, per
references/bibliography-rules.md. Record both DOI and arXiv id when both exist. - Choose the citekey (
<firstauthor><year><topicword>, lowercase) and check it is unused: not inreferences.bib, nosota/papers/<citekey>/folder. - Create
sota/papers/<citekey>/and fetch the full-text PDF aspaper.pdfthrough the fallback pipeline, most-authoritative/legal first: (1) arxiv MCP for arXiv papers; (2) otherwise paper-search, which falls back publisher/DOI open-access → Unpaywall → green-OA repositories (Europe PMC/PMC, CORE, OpenAIRE, Zenodo, HAL, SSRN, …) → Sci-Hub as the last resort. Record the resulting URL inmetadata.yaml(pdf_source). The PDF is only the reading copy: the citation and the authoritative version always come from the scholarly MCPs (reconciled by DOI), never from where the PDF was fetched. If even the last resort yields nothing, stop, remove the folder, and record the candidate insota/queue.mdwith decisionunresolvable-via-mcp. Abstract-only digestion is forbidden. - Read the full paper — the PDF, cover to cover, not the abstract.
- Write
synthesis.mdfollowing the exact section order insota/README.md. Verify every exact number and quotation against the PDF. - Write the BibTeX entry into the SOTA section of
references.bib, built from MCP-sourced fields cross-checked perreferences/bibliography-rules.md. Never write a field from memory. - Fetch citations via semantic-scholar: outgoing references and incoming
citations. Select the relevant ones, not all. Write
metadata.yamlwith every field from the schema insota/README.md, including the mandatoryverified:block. Use citekeys for papers already in the SOTA, external ids otherwise. - Append the row to
sota/index.mdwith statusdigested. - Add in-scope leads from
cites/cited_byand the synthesis "Citation leads" section tosota/queue.mdaspending, with provenance. - Run
make checkfrom the project root and fix anything it reports.
Rules
- All-or-nothing: if any step cannot complete, revert the partial folder
and record the paper in
queue.mdinstead. - One paper = one folder = one bib entry = one index row (1:1:1).
- While digesting, the only edit allowed in other papers' folders is
upgrading an external id to a citekey in their
cites/cited_bylists.
Done When
sota/papers/<citekey>/haspaper.pdf,synthesis.md,metadata.yamlreferences.bibandsota/index.mdeach gained exactly one entrymake checkpasses