How it was made, how far it was checked, and how to reuse it
Everything behind the Lab, the Atlas and the evidence gap. Every value here comes from the published data files, with its interval and evidence status.
Overview
Three historical sources, read as recipes: every passage is transcribed, its preparation fields extracted, its plant names resolved to candidate species, and each preparation’s extraction estimated as a range.
Recipes
631
Studies audited
303
Modelled species
19
Names pending check
45
Culpeper, The English Physitian (1652)Source confidence: higher27% of resolved names disputedDisputed share over 223 resolved names. Shown as lower confidence when at least half are disputed.Culpeper, The Complete Herbal (1850 edition)Source confidence: higher27% of resolved names disputedNames in the 1850 edition are resolved through their 1652 entry. Disputed share over 223 resolved names. Shown as lower confidence when at least half are disputed.Pliny the Elder, Naturalis Historia (Bostock & Riley translation)Source confidence: lower84% of resolved names disputedA 19th-century English translation (Bostock & Riley) of a 1st-century Latin text. Disputed share over 608 resolved names. Shown as lower confidence when at least half are disputed.
Extraction is not detection
1 · outside the modelPlant contentHow much the plant held. Varies by species, part, season, storage.
2 · modelledExtractionWhether the preparation would carry it into the liquid. This is what we estimate.
3 · outside the modelLab detectionWhether an assay would find it. Also depends on content and the method’s limit of detection.
Pipeline
Each step shows one of four statuses: independently validated, validated against external data, provisional, or not independently validated. Provisional checks help find problems; they are never a validation.
1IngestNot independently validatedProduced by a rule or model; no independent check. No claim is made either way.TEI and Project Gutenberg parsersCulpeper 1652, Culpeper 1850 and Pliny (Bostock & Riley) into located passages.
2Recipes (M1)Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.Structured extraction, prompt v3; verbatim-quote checkStructured recipes, every field backed by a verbatim quote; failures rejected, never repaired.
3Names (M2)Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.GBIF + WFO, heuristic weightsHistorical name → accepted species (WFO), with candidates, confidence and disputed flags.
4Compounds (M3)Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.LOTUS · RDKitKnown compounds per species (LOTUS via Wikidata), standardised with RDKit.
5Preparation model (M4)Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.RDKit Crippen logP; GFN2-xTB comparedPredicted extraction per compound and preparation, with ranges; solvent, heat, filtration and acidity separate.
6Audit (M5)Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.Rule-based extractor (keyword lexicon)How modern studies prepared each plant, coded with a versioned keyword lexicon; unstated = unknown.
7Ranking (M6)Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.Coupled Monte Carlo drawsHypotheses ranked only on profile gaps that hold across the uncertainty range.
How accurate each step is
Each value is a point with its 95% interval and sample size. A step not yet measured says so.
Step metrics
M1
Measure
Extraction F1 (part) vs an independent referenceawaiting adjudicated gold set (data/gold/annotations/gold.json)
Value
Not measured
n
Unknown
Status
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M1
Measure
Recipes rejected by the verbatim checkrecipes rejected on the single attempt (session extraction, no retries) because a quote was not verbatim; 0 passages failed whole (refusal/max_tokens/schema)
Value
0.00 (interval unknown)share, 0–1
n
151
Status
Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
M1
Measure
Re-annotation agreement (heat)not yet measured
Value
Not measured
n
Unknown
Status
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M2
Measure
Top-1 vs scholarly identificationsawaiting scholarly identifications in data/gold/name_identifications.csv (name + citation per row)
Value
Not measured
n
Unknown
Status
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M2
Measure
Resolved names disputed · all sourcesshare of resolved names whose top candidate is flagged disputed (descriptive)
Value
0.69 (interval unknown)share, 0–1
n
812
Status
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M2
Measure
Resolved names disputed · culpepershare of resolved names flagged disputed, culpeper (Culpeper = the 1652 herbal; the 1850 edition is resolved through its 1652 entry); descriptive
Value
0.27 (95% interval 0.22–0.34)share, 0–1
n
223
Status
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M2
Measure
Resolved names disputed · plinyshare of resolved names flagged disputed, pliny (Culpeper = the 1652 herbal; the 1850 edition is resolved through its 1652 entry); descriptive
Value
0.84 (95% interval 0.81–0.87)share, 0–1
n
608
Status
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M4
Measure
logP error, RDKit Crippen (MAE vs experiment)MAE vs experimental logP (SangsterLogP neutral subset); RMSE 0.8374, Spearman 0.8324 [0.7625, 0.8851]
Value
0.66 (95% interval 0.58–0.74)logP units
n
150
Status
Validated against external dataCompared with an independent, published dataset (for example measured experimental values). No provisional reference is involved.
M4
Measure
logP error, GFN2-xTB (MAE vs experiment)MAE vs experimental logP (SangsterLogP neutral subset); RMSE 1.9244, Spearman 0.688 [0.5961, 0.7616]
Value
1.51 (95% interval 1.32–1.71)logP units
n
150
Status
Validated against external dataCompared with an independent, published dataset (for example measured experimental values). No provisional reference is involved.
M5
Measure
Audit v1: share of studies faithful (as pre-registered)audit v1 as pre-registered (docs/AUDIT_PROTOCOL_v1.md): share of (pair, study) units faithful to a historical preparation, among 67 with a known status (277 unknown); 95% CI bootstrap over pairs. v1's solvent rule makes non-water recipes unmatchable, so this mostly reflects the protocol; audit v2 and the reporting-gap headline are in RESULTS.md (metrics.reportingGap and metrics.auditV2)
Value
0.01 (95% interval 0.00–0.06)share, 0–1
n
67
Status
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M5
Measure
Audit v2: share of studies faithful (re-analysis)share of (pair, eligible study) units faithful to a historical preparation; 11 known, 32 unknown, 4 with no modern analogue; bootstrap 95% CI over pairs
Value
0.00 (95% interval 0.00–0.00)share, 0–1
n
11
Status
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
Step metrics
Measure
Value
Status
M1
Extraction F1 (part) vs an independent referenceawaiting adjudicated gold set (data/gold/annotations/gold.json)
Not measured
Unknown
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M1
Recipes rejected by the verbatim checkrecipes rejected on the single attempt (session extraction, no retries) because a quote was not verbatim; 0 passages failed whole (refusal/max_tokens/schema)
0.00 (interval unknown)share, 0–1
151
Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
M1
Re-annotation agreement (heat)not yet measured
Not measured
Unknown
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M2
Top-1 vs scholarly identificationsawaiting scholarly identifications in data/gold/name_identifications.csv (name + citation per row)
Not measured
Unknown
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M2
Resolved names disputed · all sourcesshare of resolved names whose top candidate is flagged disputed (descriptive)
0.69 (interval unknown)share, 0–1
812
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M2
Resolved names disputed · culpepershare of resolved names flagged disputed, culpeper (Culpeper = the 1652 herbal; the 1850 edition is resolved through its 1652 entry); descriptive
0.27 (95% interval 0.22–0.34)share, 0–1
223
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M2
Resolved names disputed · plinyshare of resolved names flagged disputed, pliny (Culpeper = the 1652 herbal; the 1850 edition is resolved through its 1652 entry); descriptive
0.84 (95% interval 0.81–0.87)share, 0–1
608
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M4
logP error, RDKit Crippen (MAE vs experiment)MAE vs experimental logP (SangsterLogP neutral subset); RMSE 0.8374, Spearman 0.8324 [0.7625, 0.8851]
0.66 (95% interval 0.58–0.74)logP units
150
Validated against external dataCompared with an independent, published dataset (for example measured experimental values). No provisional reference is involved.
M4
logP error, GFN2-xTB (MAE vs experiment)MAE vs experimental logP (SangsterLogP neutral subset); RMSE 1.9244, Spearman 0.688 [0.5961, 0.7616]
1.51 (95% interval 1.32–1.71)logP units
150
Validated against external dataCompared with an independent, published dataset (for example measured experimental values). No provisional reference is involved.
M5
Audit v1: share of studies faithful (as pre-registered)audit v1 as pre-registered (docs/AUDIT_PROTOCOL_v1.md): share of (pair, study) units faithful to a historical preparation, among 67 with a known status (277 unknown); 95% CI bootstrap over pairs. v1's solvent rule makes non-water recipes unmatchable, so this mostly reflects the protocol; audit v2 and the reporting-gap headline are in RESULTS.md (metrics.reportingGap and metrics.auditV2)
0.01 (95% interval 0.00–0.06)share, 0–1
67
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
M5
Audit v2: share of studies faithful (re-analysis)share of (pair, eligible study) units faithful to a historical preparation; 11 known, 32 unknown, 4 with no modern analogue; bootstrap 95% CI over pairs
0.00 (95% interval 0.00–0.00)share, 0–1
11
Not independently validatedProduced by a rule or model; no independent check. No claim is made either way.
Honest findings
Including the ones that did not go our way.
Validated against external dataCompared with an independent, published dataset (for example measured experimental values). No provisional reference is involved.
Does GFN2-xTB predict logP better than RDKit’s Crippen method?
RDKit Crippen logP
0.66 (95% interval 0.58–0.74)MAE, logP units
GFN2-xTB / ALPB
1.51 (95% interval 1.32–1.71)MAE, logP units
Lower is better. Bar scale 0–1.5 log units.
GFN2-xTB had a larger error than RDKit, and the intervals do not overlap.
The descriptor with the lower error is the model’s default; the other is kept as a comparison.
+−View as table
Does GFN2-xTB predict logP better than RDKit’s Crippen method?
Method
Error
Low
High
RDKit Crippen logP
0.66
0.58
0.74
GFN2-xTB / ALPB
1.51
1.32
1.71
Borderlinepositive control · pre-registered check PR-ARTEMISININProvisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
Artemisinin in Artemisiaannua
Expected: Low in cold water, high in a low-temperature nonpolar extract (pre-registered thresholds in the explanation).
Descriptor rdkit (logP 2.40). Endoperoxide heat flag: True. Cold water 0.27 [0.03–0.78]; decoction 0.05 (heat factor 0.23); low-temperature hexane 0.79 [0.23–0.98]. Pre-registered thresholds: cold water < 0.3, nonpolar > 0.6. Exploratory xTB Wiberg bond order of the O–O bond: 0.944. BORDERLINE: the 5th–95th percentile range crosses a threshold (cold water 0.03–0.78 vs < 0.3; nonpolar 0.23–0.98 vs > 0.6). Cold water is filtered (filtration factor 1.00): its value comes from the solvent factor alone. Without straining, the suspension assumption raises it to 0.41 (filtration factor 1.42).
Ranked hypotheses (M6)
The plant–use pairs no retrieved study tested in the historical preparation, ranked on predicted profile gaps that hold across the uncertainty range.
3 ranked hypotheses, each with its caveats, toxicity entry and evidence trail. Ones with toxicity reported are shown for analysis only.
Two places in this project could use quantum methods. In both, a classical method did better at our scale.
Validated against external dataCompared with an independent, published dataset (for example measured experimental values). No provisional reference is involved.
Quantum chemistry for the descriptor
GFN2-xTB (semi-empirical quantum chemistry) against RDKit’s Crippen logP, both compared with measured logP values.
RDKit Crippen logP0.66 (95% interval 0.58–0.74)MAE, logP units
GFN2-xTB / ALPB1.51 (95% interval 1.32–1.71)MAE, logP units
GFN2-xTB had a larger error than RDKit, and the intervals do not overlap.
The descriptor with the lower error is the model’s default; the other is kept as a comparison.
Benchmark against exact optimumA computed comparison of methods against the exact optimum of the same problem. It measures the methods, not the panel; not a validation.
Quantum optimisation for the re-test panel
QAOA with a penalty mixer and with an XY mixer (depths 1–3), simulated, against the exact solver on the same instances (n = 8, 12, 16).
Approximation ratio: exact solver 1.00; QAOA 0.46–0.64; a random feasible panel 0.46–0.52.
n = 8: best P(optimum) 0.105 (xy mixer, p = 2) vs 0.079 for a uniform random panel (1.34×)
n = 12: best P(optimum) 0.011 (xy mixer, p = 2) vs 0.007 for a uniform random panel (1.44×)
n = 16: best P(optimum) 0.001 (xy mixer, p = 2) vs 0.001 for a uniform random panel (0.60×)
Under noise (parametric depolarising noise (Qiskit Aer) on a heavy-hex coupling map; not a device calibration): 0.0% two-qubit error → best P(optimum) 0.187; 0.1% two-qubit error → best P(optimum) 0.099; 0.5% two-qubit error → best P(optimum) 0.020; 1.0% two-qubit error → best P(optimum) 0.009; 2.0% two-qubit error → best P(optimum) 0.007.
Hardware: not used: no IBM Quantum account or token on this machine, and none was created.
What would have to change for quantum to help here
Problems far beyond what exact classical solvers handle; ours solve in seconds.
Ansätze that respect every constraint natively, or better parameter training than these restarts found.
Two-qubit error rates well below those in the sweep, at circuit depths of hundreds of gates.
The contribution is the formulation, the penalty-versus-XY comparison, the noise analysis and a reproducible pipeline; no quantum advantage is claimed.
Pre-registered checks
Criteria fixed before the results were seen. Outcomes are reported as they came out, including fails.
PR-ARTEMISININ · date unknownBorderlineArtemisinin known-case testborderline passProvisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
PR-PREPMODELVSLITERATURE_PREREGISTERED · date unknownThe result is recorded in metrics.json but not graded pass or fail there; see the detail.PRE-REGISTERED literature check, provisional; unverified rule and code, not independently validatedagreement: 1.00 (n = 19)Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
PR-PREPMODELVSLITERATURE_PREREGISTERED_V2 · date unknownThe result is recorded in metrics.json but not graded pass or fail there; see the detail.PRE-REGISTERED v2 (aqueous preparations) literature check, provisional; unverified rule and code, not independently validatedagreement: 0.76 (n = 17)Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
PR-PREPMODELVSLITERATURE_PREREGISTERED_V3 · date unknownThe result is recorded in metrics.json but not graded pass or fail there; see the detail.PRE-REGISTERED v3 (paired, within plant) literature check, provisional; unverified rule and code, not independently validatedmeanPerArticleAgreement: 0.62 (n = 5)Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
Heuristics
Rules of thumb the model applies where no measurement exists. Anywhere one is used, it is marked.
Heuristic · Heat sensitivityHeat is treated as lowering compounds flagged as heat-labile or volatile, with an assumed range; it is not fitted to data.A rule of thumb applied by the model, not a measurement.Heat is treated as lowering compounds flagged as heat-labile or volatile, with an assumed range; it is not fitted to data.
Heuristic · AcidityAcidic vehicles (vinegar, wine) are treated as favouring basic nitrogen compounds, which form salts; a rule of thumb with an assumed range.A rule of thumb applied by the model, not a measurement.Acidic vehicles (vinegar, wine) are treated as favouring basic nitrogen compounds, which form salts; a rule of thumb with an assumed range.
Heuristic · Filtration carry-overUnfiltered preparations are treated as carrying some undissolved material; filtration lowers what is carried over.A rule of thumb applied by the model, not a measurement.Unfiltered preparations are treated as carrying some undissolved material; filtration lowers what is carried over.
Heuristic · Compounds likely to differA compound counts when the 5th–95th range of its predicted difference between the two preparations excludes zero and the median difference reaches an assumed threshold (differ_delta in config/m8_qubo_v2.toml); not fitted to data.A rule of thumb applied by the model, not a measurement.A compound counts when the 5th–95th range of its predicted difference between the two preparations excludes zero and the median difference reaches an assumed threshold (differ_delta in config/m8_qubo_v2.toml); not fitted to data.
Heuristic · Compound classCompound classes come from simple structure rules, labelled “(heuristic)” in the data.A rule of thumb applied by the model, not a measurement.Compound classes come from simple structure rules, labelled “(heuristic)” in the data.
Audited studies
Every modern study, field by field. “Not stated” means the paper does not say; it is never read as “no”. Both pre-registered analyses are reported as they are; the analysis is frozen.
Audit v1 · as pre-registeredShare faithful to the historical preparation: 1% (1 of 67 units with a known status; 95% interval 95% CI 0–6%)277 more units have an unknown status and are not in the share.
Design flaw. v1’s solvent rule makes every non-water recipe unmatchable: only a historical water preparation could ever match a modern solvent. Its share mostly reflects the protocol, not the literature.
Audit v2 · pre-registered re-analysis after v1's design flawShare faithful: 0% (0 of 11 units with a known status; 95% interval 95% CI 0–0%)
Small n. Only 11 (plant–use pair, study) units have a known status: 32 are unknown and 4 have no modern analogue. 43 studies were eligible across 46 of 238 pairs. Too few to estimate a field-wide rate.
Loading 56 study preparations…
Limitations
Extraction is not detection: the model predicts extracted fractions, while studies record detection, which also depends on plant content and detection limits.
One descriptor: the aqueous prediction rests on Crippen logP alone; solubility, melting point, dose and contact time are not modelled.
Heuristic factors (heat, volatility, filtration carry-over, acidity) have assumed ranges and are not fitted to data.
The recipe extraction is provisional: its accuracy against an independent reference annotation is not yet measured.
The audit coding is a keyword heuristic; abstracts often omit preparation details, so many studies stay unknown. Its accuracy has only a provisional check against a second coding of a study sample.
Pliny is lower confidence than Culpeper: a 19th-century translation of a 1st-century text, with far more disputed names.
LOTUS records compounds per organism, not per plant part, so a recipe’s part cannot be matched to the part analysed.
Sources & licences
Each licence carries its own status: validated only once its terms have been independently read.
CC0 1.0 Universal (EEBO-TCP Phase I; TEI header, checked 2026-11-05).Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
Public domain in the USA (Project Gutenberg rights statement, checked 2026-11-05). Status outside the USA not independently verified.Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
Pliny the Elder, trans. John Bostock; H. T. Riley · 1856
Licence
Public domain in the USA (Project Gutenberg rights statement, checked 2026-11-05). Status outside the USA not independently verified.Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
Pliny the Elder, trans. John Bostock; H. T. Riley · 1856
Licence
Public domain in the USA (Project Gutenberg rights statement, checked 2026-11-05). Status outside the USA not independently verified.Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
CC0 1.0 Universal (EEBO-TCP Phase I; TEI header, checked 2026-11-05).Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
Public domain in the USA (Project Gutenberg rights statement, checked 2026-11-05). Status outside the USA not independently verified.Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
Pliny the Elder, trans. John Bostock; H. T. Riley · 1856
Public domain in the USA (Project Gutenberg rights statement, checked 2026-11-05). Status outside the USA not independently verified.Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
Pliny the Elder, trans. John Bostock; H. T. Riley · 1856
Public domain in the USA (Project Gutenberg rights statement, checked 2026-11-05). Status outside the USA not independently verified.Provisional: not independently validatedChecked only by an automated or unverified check. Useful for finding problems; never a validation.
Code: MIT. The project’s derived data: CC BY 4.0, with the exceptions in LICENSE-DATA (Culpeper 1652 CC0; the Gutenberg passages public domain in the USA; short third-party quotes keep their own licences). Illustrations: 19th-century public-domain plates from Wikimedia Commons, listed with author, date and licence on the credits page.
Downloads
The same files that drive every screen, checked against the data contract at build time.
recipes.jsonEvery extracted recipe, with verbatim quotes, provenance and logged corrections.recipes.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
species.jsonSpecies candidates for each recipe’s plant name, with confidence, basis and disputed flags.species.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
profiles/index.jsonThe species with predicted extraction profiles, with their toxicity entries.profiles.index.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
audit.jsonAudit v1, as pre-registered: how modern studies prepared each plant for each use.audit.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
audit_v2.jsonAudit v2, the pre-registered re-analysis after v1’s design flaw.audit_v2.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
hypotheses.jsonRanked hypotheses worth re-testing, with caveats and evidence trails.hypotheses.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
case_studies.jsonDocumented extraction corrections and their effect on the ranking.case_studies.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
metrics.jsonEvery metric with its interval, n and source file, including the reporting gap.metrics.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
sources.jsonThe digitised historical sources, with checksums and licences.sources.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
engine/model.jsonThe preparation model’s parameters and uncertainty settings, for the in-browser engine.engine.model.schema.json · licence CC BY 4.0 (LICENSE-DATA), with the exceptions listed there
plates.jsonBotanical plates: Commons file, author, date and licence as stated on Commons.plates.schema.json · licence Public domain images; record CC BY 4.0