Repository navigation
Releases
v2.1.0
Guidance only. No change to thresholds, schemes, the guard, or the codes a variant receives — a 2.0.0 and 2.1.0 run on the same payload agree. Safe to upgrade.
Corrected: one pitfall was wrong
The skill claimed "gnomAD version drift moves the number" — that the same variant reads 1.37e-06 in one release and 1.24e-06 in gnomad_r4. Both numbers are gnomad_r4. Same two carriers, different blocks:
| Block | Count | AF |
|---|---|---|
joint |
2/1,613,494 | 1.2395e-06 |
exome |
2/1,461,238 | 1.3687e-06 |
Re-verified against the live API. The error was the subset, not the release. Curate from joint and record the block beside the dataset and date — an unlabelled AF is unreproducible even when correct.
Changed: name the scheme beside the code
D393V fires PP3 under count3 and derives nothing at all under revel. A bare "PP3, 4 of 4" reads as a fact about the variant when it is a fact about the scheme. Quote it as "PP3 under count3, 4 of 4 available", not only in Methods.
v2.0.0
Breaking. A variant can now receive different codes than in v1.0.0. Re-run any v1.0.0 curation you intend to quote.
The lean is points, not a vote count
ClinGen SVI / Tavtigian 2020 weights: Very Strong 8, Strong 4, Moderate 2, Supporting 1. Pathogenic at ≥10, benign at ≥7, otherwise VUS.
The old lean counted codes: one pathogenic code beat zero benign codes and read pathogenic-leaning. Any variant merely absent from gnomAD with no predictors therefore looked pathogenic — synonymous, intronic and UTR variants included. Reported case CD68 NC_000017.11:g.7579817G>C (ClinVar Benign, CADD 6.68) now returns VUS, 1 point, with CONFLICT WITH CLINVAR printed.
The 6-point ceiling is deliberate. The seven public-data codes cannot reach 10 points; a test pins that so it is not fixed into over-calling.
The guard can no longer pass silently
It parsed only c. HGVS, so a ClinVar record filed as NC_000017.11:g.7579817G>C left clinvar_hgvs: null and returned ok: true having compared nothing. Now parses c./g./n., cross-checks ClinVar against VEP's resolved locus, and returns not ok when no cross-check was possible. consistency.checks lists the comparisons actually performed.
Also fixed
- Accession prefix no longer causes a false mismatch (compares parsed coordinates, not strings).
- A wrong MANE transcript silently emptied VEP — now
vep.transcript_mismatch. - CNVs / SVs rejected with exit 2, the variant type and size, and a pointer to Riggs 2020. They live in ClinVar
obj_type;variant_typeis null and a check against it never fires.
Added
Genomic (g.) and non-coding (n.) HGVS. Offline guard tests. 19 assertions, no network.
v1.0.0
First public release.
Seven codes derivable from public data: BA1, BS1, PM2, PP3, BP4, PS3, BS3 — each printed with the number that triggered it. Two declared PP3 schemes (count3, revel).
Not covered deliberately: PS4, PM6, PP1, PS2 (need case-level data); CNVs, structural variants, somatic curation.
The guard that matters: a mistyped gnomAD id returns Variant not found, which is indistinguishable from a genuinely ultra-rare allele. PM2 is a pathogenic code, so it is refused unless the ClinVar / gnomAD / VEP identifiers are proven to describe one variant.
Requires Python 3.10+ (stdlib only) and outbound HTTPS. CI validates spec conformance and the engine tests on 3.10 and 3.12.
Scope: research evidence assembly. Not a clinical classification, and not validated against a ClinGen expert-panel set.