\section{Reproducibility statement} \label{app:repro} The complete pipeline is contained in the replication repository (\texttt{wp21\_uqo}, spbgit). Discovery: \texttt{scripts/discovery/} (Semantic Scholar bulk search with resumable logging, Crossref and arXiv harvesters, query file). Screening: \texttt{scripts/screening/} (deduplication and rule-based scoring, keyword file, search audit and PRISMA counts); agent decisions with reasons in \texttt{data/metadata/screening\_batches/}. Retrieval: \texttt{scripts/extraction/fetch\_pdfs.py} (Unpaywall, Semantic Scholar, arXiv; every attempt logged with status and SHA-256 of the file). Extraction: \texttt{prepare\_tables.py} (page scoring and dumps), the written protocol and JSON schema, one JSON per paper in \texttt{data/extracted/json/}, the independent duplicate extractions in \texttt{data/validated/json/} and their comparison (\texttt{scripts/validation/compare\_extractions.py}). Harmonisation: \texttt{scripts/harmonization/} (taxonomy, country mapping, conversion formulas, effects-table builder). Econometrics: \texttt{scripts/econometrics/meta\_models.R} (metafor, clubSandwich) and \texttt{python\_meta.py} (REML, PET-PEESE, Bayesian Gibbs sampler, leave-one-out, grouped machine learning). Figures and tables: \texttt{scripts/visualization/}; every number quoted in the text is a macro in \texttt{paper/tables/numbers.tex} generated from the result files. Software: Python 3.14 (numpy, scipy, pandas, matplotlib, scikit-learn, PyMuPDF), R 4.x (metafor, clubSandwich); random seeds fixed at 20261020. Raw PDFs are not redistributed; the retrieval log allows them to be re-downloaded from the same open-access locations. The screening and extraction steps use large-language-model agents following written protocols; their outputs are deterministic artefacts stored in the repository, and the validation exercise of Section~\ref{sec:extraction} measures their reliability.