Skip to content

Releases

v2.1.0

Choose a tag to compare

@darshak26 darshak26 released this 26 Oct 05:23

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

Choose a tag to compare

@darshak26 darshak26 released this 26 Oct 04:28

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_type is 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

Choose a tag to compare

@darshak26 darshak26 released this 26 Oct 03:47

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.