Systematic wiki quality improvement per Morgan's feedback: more inline citations, richer references, more prose, figure hover previews.
Related quests: external_refs_quest_spec.md — WS3 (figure hover citations) and the broader "richer references" goal are now partially delivered by the unified external_refs table and its hover/click viewer framework. Non-paper references (Reactome, UniProt, Wikipedia, ClinicalTrials, etc.) live in that new table; figure hovers reuse its source_kind='pubmed_figure' preview handler.
> Prose improvement (WS2) regenerates entire sections with an LLM prompt enforcing: (1) each claim inline-cited; (2) ≥1 contradictory or nuanced statement per section (not all promotional); (3) ≤2 bullet points per section (prefer prose). Accept only if prose_ratio improves by ≥5% AND citation count increases by ≥50%. Batch regens use parallel agents.
jsonb refs_json values arrive as Python dicts, but score_page() only attempted json.loads(), causing rich-reference counts to fall back to zero for jsonb-backed pages.score_page() to handle both dict and string refs_json values, matching the existing enrichment workers.PGShimConnection.autocommit incompatibility in the shared rate limiter during paper search; added an autocommit property on the PostgreSQL shim and verified rate_limiter.acquire('NCBI') returns {"status": "acquired"}.29dc1bc3-fa9a-4010-bf53-c780a5cde6ab.enrich_wiki_from_paper called json.loads() on refs_json and metadata columns that psycopg returns as already-deserialized Python dicts, causing TypeError. Fixed to handle both str and dict inputs.scripts/paper_figures_extraction.py did not exist, causing figures stage to return import_failed. Created the module with extract_figures_from_pmc(pmc_id) based on existing extract_figure_metadata.py patterns.29dc1bc3-fa9a-4010-bf53-c780a5cde6ab.read queue rows; initial process attempt consumed them but returned read_failed because /data/papers existed yet was not writable in the worker sandbox./tmp without creating repo-local artifacts, then requeue and rerun the failed reads.(pmid, stage, status) unique key; patched queue completion to update existing completed/failed rows and remove transient retry rows.read processed 5 papers (39 extracted claims total), enrich processed 4 retry rows plus the earlier 19731550 enrich, and queue status is clean (pending=0, failed=0 for all paper stages)._mark_failed helpergh auth status shows not logged in; infrastructure fix requiredscore_page() used SQLite ? placeholder instead of PostgreSQL %s; fixed (though the qmark→%s translator in database.py would have caught this anyway).db.commit() in enrich_citations and improve_prose before the LLM call to release the read transaction.IdleInTransactionSessionTimeout and OperationalError to the connection-error retry list in process_queues; guarded db.rollback() calls in _mark_failed against already-dead connections.{
"requirements": {
"analysis": 5,
"coding": 5
},
"completion_shas": [
"c4f4f5413ad77a0c7f800c9773692e875f9d5dc9",
"ca7dbbb05d279c04aea6eb37a8799c7a950bc644",
"6d1b435513a7bbc4fdb713dc5f03088571bd884b"
],
"completion_shas_checked_at": "2026-04-13T06:12:33.158305+00:00",
"completion_shas_missing": [
"c76d419ddde97d9b3cbf4c21e9d2d3521a43e487"
]
}