ClinVar expert-review kit¶
Status: ready for reviewers; no reviews collected yet.
The ClinVar case found 95 sampled variants where the validator and NCBI's own 2023-09 review status disagree, almost always because the validator holds back a pathogenic classification that carries a dissenting submission. Three years later those classifications were markedly less stable, but stability is not correctness. This kit asks domain experts directly, following the project's gold-standard protocol:
Given only the submissions ClinVar held in September 2023, is a pathogenic / likely pathogenic classification sufficient for each intended use?
What reviewers get, and what they do not¶
| Reviewers see | Hidden from reviewers |
|---|---|
An opaque case code (e.g. C3F9A21) and the gene symbol |
VariationID and submission accessions (they would reveal the current ClinVar record) |
| Every 2023-09 submission: submitter, assertion criteria / expert panel / practice guideline, classification, collection method, date last evaluated | ClinVar's aggregate review status and stars |
| The rubric defining the three uses in curation terms | Validator decisions, reason codes and which cases are "divergent" |
| 2026-09 outcomes |
Cases: all 95 divergent variants plus 95 agreeing controls matched by review-status
stratum, so reviewers cannot tell which is which. The first 20 cases in code order form a
calibration set (split development), which is discussed and excluded from scoring; the
other 170 are the test set. Each case needs one statement label and three use labels.
Time. Plan for roughly 3–6 minutes per case, i.e. about 10–19 hours per reviewer for all
190. Sizes are adjustable (--controls-per-divergent, --calibration).
Steps¶
Run from the repository root after uv sync --frozen --extra dev.
1. Prepare packets (once):
uv run --frozen python evaluation/clinvar_review/prepare_packets.py --output artifacts/clinvar-review
artifacts/clinvar-review/reviewer_packet/: send the same folder to every reviewer (review_workbook.xlsxwith dropdowns,labels.csv/evidence.csvas a fallback,RUBRIC.md).artifacts/clinvar-review/maintainer/: keep private until all reviews are in.key.jsonmaps codes to variants and holds the secret salt;predictions.csvholds the validator and NCBI decisions to be scored;manifest.draft.jsonstarts the reference-set manifest.
2. Calibration round. Reviewers label only the calibration rows, independently, and
return their workbooks. Import them (step 4; blank rows are skipped), run the agreement
report (step 5), then meet to discuss the calibration cases and clarify the rubric. If the
rubric wording changes, raise its version in RUBRIC.md and prepare_packets.py.
3. Test round. Reviewers complete the test rows independently, without discussion.
4. Import each reviewer's workbook:
uv run --frozen python evaluation/clinvar_review/import_sheets.py reviewer_R1.xlsx \
--key artifacts/clinvar-review/maintainer/key.json --reviewer-id R1 \
--qualification "Clinical molecular geneticist, 8 years of variant curation" \
--annotated-at 2026-10-15 --output artifacts/clinvar-review/annotations.csv
Each case becomes three rows (one per use) in the protocol's annotation format. A half-filled row, an unknown code or a second import of the same reviewer is rejected, and the file is left unchanged.
5. Agreement before adjudication:
uv run --frozen bioevidence review agreement artifacts/clinvar-review/annotations.csv \
--output artifacts/clinvar-review/agreement.json
Krippendorff's α (with a bootstrap 95% interval), Cohen's κ for two reviewers, and raw agreement, per use. Report these whatever they are.
6. Adjudicate disagreements:
uv run --frozen bioevidence review adjudication-sheet artifacts/clinvar-review/annotations.csv \
--output artifacts/clinvar-review/adjudications.csv
One blank row per disagreeing case-use. A third expert, or the reviewers together, fills in
the final labels, adjudicator ID, time and reasons, using both reviewers' rows in
annotations.csv (linked by annotation_ids_json). Original reviews are never edited.
7. Score the validator and NCBI's review status against the resolved labels (test split):
uv run --frozen bioevidence review score --annotations artifacts/clinvar-review/annotations.csv \
--adjudications artifacts/clinvar-review/adjudications.csv \
--predictions artifacts/clinvar-review/maintainer/predictions.csv \
--output artifacts/clinvar-review/score.json
Results are reported for all cases and separately for divergent and control cases. The
key number is on the divergent subset: where the two disagree, which one do experts side with?
8. Freeze and publish:
uv run --frozen bioevidence review freeze --manifest artifacts/clinvar-review/maintainer/manifest.draft.json \
--annotations artifacts/clinvar-review/annotations.csv \
--adjudications artifacts/clinvar-review/adjudications.csv \
--file artifacts/clinvar-review/maintainer/predictions.csv --file artifacts/clinvar-review/maintainer/key.json \
--dataset-id clinvar-germline-expert-review --version 1 --frozen-at 2026-11-01T00:00:00Z \
--output artifacts/clinvar-review/manifest.json
Then commit annotations.csv, adjudications.csv, agreement.json, score.json,
manifest.json and the key into evaluation/clinvar_review/results/, and update the ClinVar
case README, which currently states that no independent expert annotation exists.
Interpreting the result¶
- With two independent reviewers and adjudication this is an independently reviewed
reference set for this task. With one reviewer,
freezelabels it a single-reviewer reference set; say so wherever the numbers are quoted. - It measures agreement with expert judgment of evidence sufficiency for a use, on one sample of one registry. It does not establish variant pathogenicity or clinical validity.
- Do not change the profile in response to the test-set labels. Any later profile version needs a separately reported evaluation.
- Publish reviewer IDs and one-line qualifications only with each reviewer's consent.