# Audit the OCx25 dataset

The 2025 release (`experiments`, `xrf`, `dashboard`) is the basis of every
model built in this Campaign. A second pair of eyes on a dataset of this
size is useful to its authors and to every solver: check it row by row and
report what you find.

## What to examine

Work from `experiments` and `xrf`; use `dashboard` only to cross-check the
team's own cleaning (what it dropped, and whether it should have).

1. **Integrity.** Duplicated rows or sample ids; `rep` labels that do not
   match the ids; summary rows (`avg`, `std`) that disagree with the
   replicates they summarise; missing current densities in a CO₂RR series;
   Faradaic efficiencies that do not sum sensibly (`fe_gas_total`,
   `fe_liquid` as the electron balance); impossible values (negative
   efficiencies, voltages with the wrong sign or magnitude for the
   reaction); HER rows carrying product columns, and the reverse.
2. **Replicate reproducibility.** For each source and reaction, the spread
   between replicates of the same synthesis target (HER voltage at
   50 mA/cm²; CO₂RR efficiencies and production rates at each current
   density and at 3.3 V after `prepare_targets.py`), overall and by batch.
   Compare with the noise floors the paper reports (`reference.md`).
3. **Composition.** Target versus XRF composition: how far they differ by
   source and element, samples with no XRF, elements in `xrf` that never
   appear in a target (contamination or substrate signal), and the
   `dashboard`'s per-element columns against `xrf`.
4. **Batch effects and drift.** Whether a batch or a date is predictive of
   outcome beyond composition; whether identical targets printed in
   different batches agree.
5. **Outliers.** Samples whose outcome is far from every neighbour in
   composition space, with a judgment on whether they look like
   measurement problems or real chemistry.

## What to submit

- `document`: a JSON file satisfying `document_schema`: `counts`, one
  `replicate_reproducibility` row per (source, reaction, quantity),
  `findings` numbered `F001`… with severity, category, the affected sample
  ids, the evidence (a number, a rule, a query) and a suggested action, and
  `recommended_exclusions` that each cite a finding. Be specific enough that
  the team can act on each line without re-deriving it.
- `report`: Markdown, under 4,000 words, written for the experimental team:
  what is solid, what needs a look, what you would change in the release.
- `code`: an archive that regenerates every number in the document from
  the bound inputs; include the per-replicate tables as CSV.

## How it is judged

Schema check, then a campaign reviewer who knows the data. Verified when
the findings are correct (the reviewer spot-checks every `blocking` and
`major` finding against the data, and a sample of the rest), the
reproducibility statistics re-run, and the recommended exclusions are each
justified by a finding. Speculation about mechanisms is not a finding;
a finding is something a row in the data shows. Bound inputs:
`experiments`, `xrf`, `dashboard`, `document_schema`.
