After upgrading, run allelix db update. This release changes how
Allelix reads ClinVar (version 5 → 9, shown as iv:9), so existing
ClinVar caches are invalidated and the next db update rebuilds them
(about 860 MB to download). Until then allelix analyze
skips ClinVar, says so on the console ("Skipping ClinVar: out of date
(built for iv:5, needs iv:9). Run allelix db update."), and puts a
warning at the top of the report.
Added
scripts/check_reference_sample.py, an independent release gate on the
reports of a healthy reference sample (the HG002 benchmark, the CC0
arrays): no ClinVar Pathogenic or Likely pathogenic row is called
homozygous, and none sits on a variant whose ClinVar aggregate is not
Pathogenic or Likely pathogenic, except a row the report marks
outside_aggregate(an outranked P/LP submission kept on purpose because
the aggregate is not a disease classification, ADR-0045); such a row is
counted and listed, and the homozygous rule still applies to it. It reads
report JSON only and imports nothing from Allelix, so it does not depend
on the tool's earlier output being right. Run it on reports made with the
default filters.--counts-onlyprints no row. Not a CI job.- Every GWAS Catalog row says which way the study's effect allele points
(ADR-0024): JSONeffect_direction(increases,decreases,unknown;
empty on other sources), and plain words in the HTML detail panel and
after the significance in the terminal ("C lowers odds"). The words say
when the effect allele is the reference allele, so a person homozygous
for a protective reference allele sees that it is protective. The odds
ratio, or the beta's "unit increase/decrease", decides; anything else is
unknown. - Genes for Good's 23andMe-style text download is read (
genesforgood
parser). The imputed file is marked as imputed in every report (JSON
input.methodarray-imputed), and the HTML's imputation note now
says how each imputed input was made instead of always describing
low-pass sequencing. - deCODEme raw data (
deCODEme_scan.csv) is read (decodemeparser).
Calls on the minus strand are complemented to the plus strand; the
file's Build 36 coordinates are detected from known-SNP positions and
run on the GRCh36 path (position lookups off, ADR-0025). - Every report names every source and its part in the run (ADR-0049).
JSONsourceslists each registered source asused,
ready_not_used, orskippedwith a reason: the cache's state
(missing,outdated,unreadable,corrupt,wal,
readonly_wal) or the user's choice (disabled,license,
excluded,flag,not_applicable_build). The HTML lists the
sources whose cache could not be used, with the fix, and the ones
turned off in one line.annotatorsstill lists only the sources that
ran. - When ClinVar did not run, the report says so at the top: a warning in
the HTML, on the console and in JSONreport_warnings
({code, message, count}, codeclinvar_skipped). Before, a report
without ClinVar read as complete. - A report warning when three or more variants on chromosomes 1 to 22
are called homozygous for an allele ClinVar classifies as Pathogenic or
Likely pathogenic and are rare in gnomAD or have no gnomAD frequency
(multiple_homozygous_plp, with the count). It is counted before the
display filter. Several such calls in one file usually point to a
genotyping or file problem (ADR-0050). - A call whose plausibility was not assessed is marked: a muted ○ with the
reason in the HTML and the terminal. - The two warnings about a compressed input file as a whole, a bgzipped
file that may be truncated and bytes ignored after the compressed data,
are also report warnings: the HTML shows them at the top and JSON
report_warningslists them (codesinput_possibly_truncatedand
input_trailing_bytes). Before, they were on the console only. - The annotated VCF (
--vcf-out, schema 0.4.0) has a
##ALLELIX_SkippedSources=line naming each skipped source and its
reason, ornone. - Zip downloads are read as they are, when they hold one genotype file:
every format, the file streamed from the zip (never unpacked to disk),
gzipped or not. 23andMe and AncestryDNA deliver their raw data as a zip;
before, a zip stopped with "No parser recognized". A zip with several
files, a password, a compression method Python cannot read, or another
zip inside stops with a message saying to unzip it first. A file over
4 GiB once unzipped (a gzipped file counts at its.gzsize) stops,
saying to unzip it or gzip it instead. A damaged zip, including a file
whose data is longer or shorter than its zip entry declares, gets the
"looks truncated or damaged" error. macOS archive
entries (__MACOSX/,.DS_Store) and folders are not counted as files. - Array reports say how many calls could not be checked against ClinVar
(ADR-0051): vendor probes without an rsID (23andMei5000123) at a
locus where ClinVar's own classification is Pathogenic or Likely
pathogenic, and calls written asDorI(a deletion or an
insertion), with how many are at such an rsID. The console and the HTML
input-quality notice print them; JSON hasinput.probe_classes
(i_probes_at_plp_loci,di_calls_at_plp_rsids) and
input.array_quality(di_calls, plusunreadable_genotypes,
not_genotypedandwrong_column_rows, 0 until a parser counts them).
Both are null for VCF input;probe_classesis also null when ClinVar
did not run. Nothing new is matched.
Changed
- The top of the HTML report is shorter. Still in view: a two-sentence
disclaimer, and the warnings that change what to do (ClinVar not used or
out of date, a file that may be cut short, a build warning, three or more
rare homozygous Pathogenic calls, a forced--format, a source that could
not be used, high-value no-calls, and the caution for imputed input).
ClinVar's reason for not being used is said once, in its warning, not
again under the sources not used. One line then names only what the
section below holds: calls that could not be checked, and how many ClinVar
rows were scored down or not shown; when it holds only general notes, the
line says so. Every other notice (input quality, ClinVar rows scored down
or not shown, strand, sources turned off, the full disclaimer) sits word
for word in a collapsed "Technical details" section. Open it before
printing or saving the page as PDF to include those notices. JSON and
terminal output are unchanged. - A file no reader recognises is rejected with a message that puts the
original file first: "Allelix doesn't recognise the format of …. Use the
original file exactly as your testing company provided it, not edited
or re-saved."--format <name>still reads such a file, at the user's
own risk. It now gets a warning before anything else in the terminal
and on every report (the terminal summary, the top of the HTML report,
JSONreport_warningscodeforced_format): Allelix cannot check a
forced file's layout, strand or build label, so its results may be
wrong.--formatwith a reader that recognises the file is not warned.
Every command that takes--formatbehaves this way, andcompare
checks each of its two files on its own. Before, the rejection's only
advice was to force a format, and a forced file was read without a
word.docs/formats.mdhas a "Forcing a format" section. - GWAS Catalog risk alleles and SNPedia genotypes are read on the forward
strand against the site's alleles in the rsID identity table (ADR-0024).
A risk allele that is among them is compared as written, else its
complement is. A/T and C/G sites, rsIDs the table does not place at the
call, and genotypes that fit neither reading abstain. Before, GWAS
compared the letters as written, so at an A/T or C/G site a risk allele
given on the other strand matched the wrong carriers. SNPedia pages with
a stated orientation keep it, now checked against the site's alleles.
One-row SNPedia sites of unknown orientation could not show they were
palindromic and matched as plus. The JSONstrand_abstentionsblock
counts what abstained, per source and reason (GWAS association rows,
SNPedia sites), and the console and HTML say so. Without the identity
table, GWAS risk-allele rows and single-base SNPedia sites abstain, and
so does GRCh36 input, which the identity table does not place: a GRCh36
report loses those GWAS and SNPedia findings and says how many. - Panel coverage (
--filter-file) puts each requested rsID in one of
four states (ADR-0051):annotated,typed_no_annotation,no_call
ornot_on_chip("not in file" for VCF input). A no-call was counted as
genotyped with no findings. A half call with a shown finding is
annotated. JSONpanel_coverageis{requested, counts, variants}:
countshas the four states and sums torequested, and each entry of
variantsgivesrsid,gene,state,genotypeand
annotation_count.found,missingandno_findingsare gone. The
HTML lists every requested rsID with its gene, genotype, state and
number of annotations (a VCF half call's genotype isT/., as in the
annotations), and the terminal report prints the four counts, then the
no-call and not-on-chip rsIDs. - JSON values are machine codes (ADR-0050).
zygosityishomozygous,
heterozygous,hemizygous,half_callorno_call(it was
"Homozygous", "Heterozygous", "Half call", "No Call").plausibilityis
not_assessedwhere it was empty, and the newplausibility_reason
says why:no_frequency,gnomad_not_run,chromosome,half_call
orno_allele. HTML and the terminal show the display words; "No Call"
is now "No call". - A call the file declares as one copy, a one-letter array call (23andMe
writes a male's X calls this way) or a one-index VCF genotype, is shown
as Hemizygous with its one allele (T), not as HomozygousTT, and its
plausibility counts one copy (ADR-0050). Findings do not change. A male
X call written as two letters (AncestryDNA, FTDNA) is still Homozygous:
Allelix does not infer sex. - ClinVar rows are scored against ClinVar's own classification of the
variant (ADR-0045). A Pathogenic or Likely pathogenic submission on a
variant ClinVar calls "Conflicting classifications of pathogenicity" is
capped at 4.0, so it leaves the default report; under a Benign or Likely
benign classification the cap is 1.0 to 2.0. Drug response, risk factor
and similar rows are not capped. JSON and the HTML detail panel show
ClinVar's classification and how many submitters agree; the terminal
shows it after a row that was scored down, for example
pathogenic (1 of 10; ClinVar: conflicting). Each report says how
many Pathogenic or Likely pathogenic rows were scored down: 9 to 29 on
three of the openSNP array files intest_data/realand the HG002
benchmark VCF (TYR rs1042602, BBS2
rs4784677 and HFE rs1799945, where 40 of 45 submitters say Pathogenic
and 43 of 45 Pathogenic or Likely pathogenic, among others).
These rows are still shown at--min-magnitude 4or lower. - A ClinVar Pathogenic or Likely pathogenic row whose own submission has
zero stars ("no assertion criteria provided" or "no classification
provided") is scored 4.0, below the default floor, when gnomAD gives
ClinVar's allele a frequency of 5% or more, the ACMG/AMP BA1 level
(ADR-0052). The frequency is looked up for ClinVar's own REF and ALT at
the rsID's GRCh38 locus, so it applies to GRCh37 files too. An
allele that common does not cause a rare disease: CDKN2B-AS1 rs1063192,
Likely pathogenic for a breast tumour from one zero-star submission, with
a gnomAD frequency of about 0.65, was a homozygous Likely pathogenic
finding in the HG002 benchmark report. The row says why, and each report
counts these rows ("N ClinVar Pathogenic or Likely pathogenic rows not
shown: zero-star classification on a common allele"). Rows with one star
or more are unchanged, HFE C282Y among them. So is a row whenever the
lookup is in doubt (no rsID, a locus or allele that does not agree
between the identity table and both ClinVar builds, no gnomAD row) or
gnomAD, the identity table or a ClinVar build is not installed. - ClinVar classifications beside the five-tier scale have their own
magnitude instead of 5.0: Pathogenic, low penetrance 7.5 (SERPINA1
rs17580 and HFE rs1800562, for example); Likely pathogenic, low
penetrance 6.5; established risk allele and confers sensitivity 6.0;
likely risk allele, Affects and protective 5.0; the three VUS
subdivisions 4.5, 4.0 and 3.5; uncertain risk allele 4.0. A
classification with no magnitude is not shown, and the report counts
it. - JSON report
schema_version8 → 9. Each annotation gains
clinvar_aggregate,submitters_same,submitters_total,
aggregate_capped,outside_aggregate,common_allele_cappedand
clinvar_allele_af,
pluschromosome,positionandref, so a finding without an rsID
still names its variant. A top-levelclinvarobject gives
pathogenic_rows_scored_down,unrecognised_rows_hiddenand
common_allele_rows_scored_down. For a VCF,
input.vcf_qualitygainsspanning_deletion_sites,half_calls,
malformed_rows,no_genotype_rows,unusable_genotype_calls,
symbolic_allele_callsandtrimmed_matches.
Fixed
--filter-file: a#after an entry now starts a comment, as a#at
the start of a line already did, sors1801133 # MTHFRkeeps
rs1801133. Before, the whole line was taken as a gene name that matched
nothing, and the entry left the report with no warning. The help says
so. A list saved with a byte order mark is still read in full.analyze --categorytakes onlyclinical,pharmaortrait(in any
case). A typo such asclinicalsnow stops with a message listing the
three. Before, it gave an empty report with exit 0 and no warning. The
help listed only two of the three.config get --help,config set --helpanddb path --helpshow their
key lists and examples line by line. Before, they ran together into one
paragraph with a stray\b, and thedb pathexample did not run as
shown.- The GRCh36 warning said GWAS Catalog and SNPedia still run. It now says
that ClinPGx still runs, and that GWAS Catalog risk alleles and
single-base SNPedia genotypes are not assessed on GRCh36, as the counts
printed with it show. - A VCF whose header declares an imputation tool's field (Minimac's
IMPUTED,TYPEDorR2; Beagle'sDR2orIMP; the per-call dosage
DSthat Minimac, Beagle and GLIMPSE write; GLIMPSE'sHS) is now marked
imputed, as Genes for Good's and MyHeritage's imputed files already are.
Before, it was read as measured with no caution. Every report now says
the genotypes are imputed and to confirm any finding by direct
genotyping, and the HTML's "Reading This Report" explains imputation in
place of the note on array probes. JSONinput.methodisvcf-imputed.
Only the header's declarations count, never the values; genotype
probabilities (GP) alone do not count. Measured VCFs (benchmark call
sets, GATK and DeepVariant gVCFs) are unchanged. - Four ways a file could be read wrongly with no warning are fixed:
- A no-call written
00orNN(or0orNin a one-letter or
two-column file) is now a no-call in every array reader, as--is.
Before, it was read as a call of "0" or "N": it matched nothing, but
statscounted it as a homozygous call and the warning for
clinically important SNPs with no call did not fire. - A
--filter-filelist saved with a byte order mark (as some
Windows editors and spreadsheet "CSV UTF-8" exports do) lost its
first entry. It is now read in full. - Genes for Good's imputed VCF download is marked imputed, as its text
download already is, so every report gives the caution for imputed
genotypes. It is recognised by its##Genes_for_Good_versionheader
line together with phased calls. - In a GRCh37 VCF, a mitochondrial record named
chrMorM(UCSC
hg19's names for a 16,571 bp sequence that is not the reference ClinVar
uses) is now left out, counted, with a note, unless the file declares
that same name with the reference length (16,569). Before, it was read
as the reference whenever no hg19 length was declared. Records named
MTorchrMTare read as before, and a declared hg19 length still
leaves out every mitochondrial record.
- A no-call written
- The HTML report's "Understanding Magnitude Scores" legend now states the
scores Allelix assigns. Its ClinVar, ClinPGx and GWAS sections dated from
1.4.0 and disagreed with the scoring in many rows: for example, it said a
single-submitter Pathogenic call scores 8 (every Pathogenic submission
scores 9, whatever its review status), uncertain and conflicting 5 (4),
risk factor and drug response 4 (6 and 6.5), and ClinPGx Level 2A 6 (7).
The three sections are now generated from the scoring tables. They add the
GWAS odds-ratio step and the 3.0 cap for an unnamed risk allele, ClinVar's
own classification capping a submission, the zero-star rule for common
alleles, and that a classification without a score is not shown. Scores
and findings do not change. --vcf-outstamps, for each source, the row the report lists first at
that variant (highest magnitude, then rsID). It used to stamp the last
row, so a site the report shows as Pathogenic could carry a VUS in the
annotated VCF (ADR-0036).export plinkno longer reads a call on the other strand. A call whose
alleles are not gnomAD's REF and ALT at the site, as written, is
exported as missing and counted on the console ("N call(s) fit neither
gnomAD allele at their site"). Before, such a call could be written as
its complement: A/A at a C>T site came out as T/T.- With VCF input, a person homozygous for a variant allele the reference
genome itself carries (Factor V Leiden TT on GRCh37, and about 170 other
ClinVar sites) now gets the finding. Their file has a0/0call or a
reference block there, never a variant record. Allelix watches these
sites and assesses a hom-ref call that passes the GQ gate as the
homozygous variant genotype (JSONinput.vcf_quality.reference_carried_calls).
A plain VCF with no record at such a site cannot say which it is: the
report counts those sites (reference_carried_not_in_file) and says a
gVCF or an all-sites VCF would. - A ClinVar normal-allele record now reads the same on both builds. A
CASP12 rs497116 carrier of the normal allele G got the risk-factor row
on GRCh38, where the record is written A>G, but not on GRCh37, where it
is written G>G and was dropped at load. Such records are now kept on
both builds (still without Pathogenic or Likely pathogenic
classifications, as before). With a VCF on GRCh37, the GG genotype is a
0/0call there, which the site watch above assesses. This changes the
ClinVar cache (interpreter version 9). Such a record written G>G does
not make a homozygous-reference call a ClinPGx or SNPedia non-finding:
the reference allele there can be the one ClinVar classifies, so those
sources show their rows for that call, as 2.4.2 did. - A VCF record whose REF is the complement of ClinVar's REF no longer
matches ClinVar. A VCF is forward strand, so such a record is
mis-coordinated input. One-base records whose REF is none of ClinVar's
at the position are counted (input.vcf_quality.clinvar_ref_mismatches),
and the report asks you to check the file's build and coordinates. - ClinPGx and SNPedia treat a call as homozygous reference by ClinVar's REF
only where ClinVar places the rsID at the call's own position. Before, an
rsID placed elsewhere could hide a finding. - A ClinVar match from a multi-allelic or untrimmed VCF record carries the
matched row's own rsID where the record's ID column names another rsID
ClinVar holds at that site. A merged or alias rsID is kept, as before. - A homozygous one-base deletion (
AC>A, 1/1) is shown asA/A, no longer
asAA, which looked like an SNV genotype. --gwas-min-magnitudereplaced--min-magnitudefor GWAS rows instead
of taking the larger of the two, as ADR-0024 says. A GWAS floor
set below the global one let GWAS rows in below the floor asked for. The
must-include rsIDs keep their exemption from the GWAS floor and never go
below--min-magnitude.- A 23andMe export whose rows were re-saved with spaces instead of tabs
(by a text editor or spreadsheet) is read. Before, the file was
recognised as 23andMe by its banner and then every row was skipped, so
the run stopped with "contains no genotype records". A row without a
tab is now split on runs of spaces. - With one ClinVar build installed (
allelix db update --build grch37),
analyzeused no ClinVar at all and said it was not installed. It now
uses the installed build; input on the other build skips ClinVar and
names the missing build's cache (ADR-0049). - With one ClinVar build installed, a person who does not carry Factor V
Leiden (CC at F5 rs6025 on GRCh37) got a ClinPGx row for hormonal
contraceptives and thrombosis (level 2B), and ClinPGx and SNPedia rows
at other sites where the GRCh37 reference carries the variant allele
read the wrong allele as the variant. The normal allele at those sites
came only from the other build's ClinVar cache. Without that cache it
now comes from the rsID identity table's reference base on the other
build. With both ClinVar builds installed nothing changes. - A source turned off in config, excluded, or turned off by a
--no-
flag is no longer reported as "not installed" when its cache is absent. - The HTML note on source-specific magnitude thresholds named sources
that did not run. analyze --no-updatewrites nothing to the data directory, so the
directory can be read-only (ADR-0048). Before, it could add a column,
stamp or rebuild a cache, build an index, createconfig.toml, or leave
WAL side files. A gnomAD, AlphaMissense or CADD cache, installed in WAL
mode, could not be read at all in a read-only directory. Every cache now
opens read-only, and a WAL cache is never opened. The installer stores
caches in rollback-journal mode, and the nextallelix db update
converts ones already installed, in place and without downloading, as
doesanalyzewithout--no-update. Until thenanalyze --no-update
skips a WAL cache with that reason, anddb statusshows it instead of
a version.db updatedoes not download a WAL cache again when it
cannot convert it. Local migrations (a legacy version stamp, the GWAS
re-ingest from its cached file, the SNPedia parse) run in the update
step:db update, oranalyzewithout--no-update.- A source that cannot be used is named on the console with its reason
and the fix: not installed or out of date (runallelix db update),
cannot be read (check the file's permissions), damaged (run
allelix db update, which replaces only that source), in WAL mode from
an older Allelix (runallelix db updateonce to convert it; nothing is
downloaded), or in WAL mode in a data directory you cannot write (run
allelix db updateonce with write access). Before, every case said
"runallelix db update". A cache whose main table has no rows is now
damaged; before, ClinVar, ClinPGx, GWAS, gnomAD, AlphaMissense, CADD and
rsID-identity caches with a current version tag and no rows were used as
ready. - A GRCh38 VCF without rsIDs no longer stalls on Ubuntu 24.04's SQLite
(3.45). The lookup that finds rsIDs in gnomAD by position searched the
cache by chromosome only. It now searches by chromosome and position,
one chromosome per statement, and needs 4,063 statements instead of
8,886. On the HG002 GRCh38 benchmark VCF with default settings, on a
2-vCPU machine, the analysis did not finish in 30 minutes before this
change and now takes about 7 to 8.5 minutes. Allelix also no longer
builds an index on the gnomAD cache when it opens it, so a read-only
cache built without that index no longer fails with "attempt to write
a readonly database". - VCF calls are no longer dropped without a word (ADR-0047). On the
HG002 GRCh37 benchmark VCF (2026-10-10 ClinVar data) the unfiltered
report gains 1,331 ClinVar rows on 978 variants, none removed; the
default report gains one, OPRM1 rs71021021 (drug response, Tramadol).- A homozygous VCF deletion to one base (
AC>A1/1) now matches
ClinVar. The indel-anchor rule meant for array calls also blocked it.
HG002: 831 variants, among them NR2E3 rs11351249 (Likely pathogenic,
shown at 4.0 under ClinVar's Conflicting classification) and OPRM1. - An allele written with bases it shares with REF (
GTT>GT,G,
CA>TA, orATG>ATGTG,A2/1) is trimmed, per carried allele, before
ClinVar matching. HG002: 147 variants, among them a CFTR TG-tract
Pathogenic submission (4.0, Conflicting). Indels are not left-aligned,
so one the file places at a different position from ClinVar's still
does not match. - A half call (
./1) is assessed on its called allele by ClinVar and
the GWAS Catalog, shown asT/.with zygosity "Half call"; ClinPGx and
SNPedia, which need both alleles, skip it. - The calls the parser drops are counted with their reason on the
console, in HTML and in JSON: malformed rows, rows without a genotype,
genotypes naming an allele the record lacks or a symbolic allele such
as<NON_REF>beside a real ALT, and spanning-deletion (*) calls,
which are counted on one or both haplotypes and listed by position
(516 in HG002). A no-call
written./.is still reported as a no-call, not counted as a drop. A
genotype naming the only ALT of a gVCF reference block (<NON_REF>or
<*>alone) is not checked.
- A homozygous VCF deletion to one base (
- VCF users now see ClinVar variants that have no rsID (ADR-0046).
Allelix dropped them when building the ClinVar cache, so a VCF carrying
one at the exact position got nothing. In the 2026-10-10 data they hold
98,211 GRCh37 Pathogenic or Likely pathogenic rows on 91,391 variants,
23.4% of the Pathogenic or Likely pathogenic variants ClinVar gives VCF
alleles for. They are matched by chromosome, position, REF and
ALT, for VCF input only: an array call's reference allele comes from a
table keyed by its own rsID, which says nothing about a variant without
one. Reports name such a finding by its position, for example
1:1000 A>G, and--vcf-outwrites.for its rsID. --vcf-outstamps ClinVar on multi-allelic records with no ID. It
placed annotations by rsID, so a record with ID.whose ClinVar rows
have an rsID got no stamp; it now finds the record by its position and
the carried ALT, and stamps the right ALT (8 such records in HG002).- Factor V Leiden (F5 rs6025) carriers see its Pathogenic submissions
again. ClinVar's classification of the variant is an expert panel's
"drug response", which outranks every disease submission, so Allelix
showed only the drug response row. Where ClinVar's classification is
not a disease classification, the outranked Pathogenic and Likely
pathogenic submissions are kept, judged in their strongest review tier
as ClinVar judges a variant: shown as submitted when that tier agrees
(F5: 22 Pathogenic and 1 Pathogenic, low penetrance), capped at 4.0
when it conflicts (MTHFR rs1801133), and not shown when it holds no
Pathogenic or Likely pathogenic submission (VKORC1 rs9923231). In the
2026-10-10 data this affects 46 GRCh37 variants with an rsID: 38 keep
their Pathogenic and Likely pathogenic submissions and 8 show none. allelix db updateno longer replaces a working ClinVar cache with an
empty one when ClinVar changes the layout of its files. The update
checks the column names in both ClinVar files and stops with an error
that names the changed column. It builds the new cache beside the old
one and replaces the old one only when the build finishes with records.
Before, an inserted or renamed column made every record unreadable, and
the update installed an empty cache that reported ready.- A ClinVar placeholder such as "covers 10 genes, none of which curated
to show dosage sensitivity" is no longer shown as the gene (rs4124874,
for example). - Submissions that ClinVar has flagged are no longer reported. They
appeared only where every submission on a variant is flagged: 120 rows
in the 2026-10-10 ClinVar data, all but one Pathogenic or Likely
pathogenic. - Array files (23andMe, AncestryDNA, Family Tree DNA, Living DNA,
MyHeritage, MyHappyGenes) are read when gzipped, when they start with a
UTF-8 byte order mark, or when their first line is blank. Before, these
stopped with "No parser recognized" (some formats accepted one or two of
the three). Family Tree DNA delivers its raw data as a.csv.gz, which
can now be passed as it is, without unpacking it first. - A compressed genotype file that was cut short or damaged is no longer
read as complete or stopped with a bare "Aborted!". A file that ends in
the middle of its compressed data, or holds corrupt data, stops with an
error naming the file ("looks truncated or damaged"). A bgzipped VCF cut
exactly between two blocks, which raised no error and was analysed with
the records after the cut silently missing, now gets a warning that its
end-of-file block is missing and the file may be truncated. Bytes after
the end of the compressed data that are not compressed data (such as a
web page saved onto the end of a download) are ignored with a warning
instead of stopping the run after every record was read. - A VCF whose chrM is declared with the hg19 length (16,571 bp) no longer
gets mitochondrial findings at reference-sequence (rCRS) positions when
its build comes from--build, the assembly header or the known-SNP
positions. Its mitochondrial records are now left out with the same note
as when the contig lengths decide the build. - A file that states its build but carries none of the known-SNP positions
(for example a 23andMe mtDNA-only export labelled build 37, or a small
panel VCF with only anassembly=line) no longer runs on the label
alone, which could attach another build's ClinVar records by position.
It stops, names the label and the missing positions, and asks for
--build. An array file labelled GRCh36 (Build 36) is exempt, as
--build grch36is: it runs on the GRCh36 path, with position-keyed
lookups off, so it cannot attach another build's records. --build grch37or--build grch38no longer skips the file's own
evidence. Contig lengths of the other build, or confident known-SNP
positions for it, stop the run and the message names both builds.
Contrary positions that are not confident (fewer than three, or under
an 80% majority) print a "Build warning" instead, as does a tie that
leaves out the forced build.--build grch36is
not checked, because it turns position-keyed lookups off. Arrays run
under--buildnow take the same known-SNP pre-scan as without it.
Documentation
- The README no longer says to pass
--caddto an analysis:analyzehas
no such flag. CADD runs once it is downloaded (allelix db update --cadd)
and enabled in config (allelix config set sources.cadd true);
--no-caddturns it off for one run. - The README roadmap no longer lists cross-source conflict surfacing,
risk-allele display and a structured MTAG flag as shipped in v2.2. None
of them has shipped. - The README's IL10 rs1800896 example is removed. Current ClinVar has no
Pathogenic classification for it, only "Uncertain risk allele" for
leprosy susceptibility. docs/formats.mddescribes the 23andMe file, including thefile_id,
signatureandtimestamplines that current v5 exports put before the
"generated by 23andMe" banner. These files were already read correctly;
a test now covers that layout.docs/formats.mdsays what happens when a MyHeritage file's preamble is
deleted: the rest of the file has the same layout as a Family Tree DNA
file, so it is read as one, and a low-pass export is then no longer
marked as imputed.docs/formats.mdsays that every format reads Windows (CRLF), Linux
(LF) and classic Mac OS (CR only) line endings, plain or gzipped. This
was already the case; tests now cover each format with each ending.- Test files: the AncestryDNA, FTDNA, Living DNA and MyHeritage test
fixtures are rewritten from scratch with invented genotypes, and the
exome VCF and the 23andMe lookalike intest_data/edge_cases/are
replaced by synthetic files of the same shape. Reading is unchanged.
The Sequencing.com structural-variant test VCF's##fileDateis a
placeholder.