Skip to content

eidolon v3.2.0

Choose a tag to compare

@joshfactorial joshfactorial released this 30 Aug 03:02
· 384 commits to main since this release
ba90d76

v3.1.0 shipped with insertion limitations listed as known and documented. This release closes them, together with the wider defect they belonged to: records that reached the truth VCF and never reached the reads. Seven issues turned out to be one shape.

Fixed

#516 insertions longer than a read are sequenced end to end, not just their first ~150 bp
#589 the golden BAM CIGAR describes them, instead of recording junction reads as pure M
#590 literal deletions live on the haplotype, so they remove coverage
#498 BND ALTs carrying novel junction sequence splice it into the reads
#500 symbolic <INS> is realized; unpaired breakends are refused instead of destroying 41% of local coverage
#625 one 5 kb deletion no longer silences 22% of a contig
#603 supplied SVs come out of the de novo budget instead of adding to it
#591 REF == ALT and no-call genotypes are refused or normalized
#599 chimeric read generation is deterministic again
#583 a failing validation run can explain itself again

The first three are one architectural change: build the altered haplotype, then read from it. Insertions and deletions now share a coordinate map in which inserted bases occupy real space and deleted bases occupy none, so a fragment can begin inside an insertion and can never be placed across sequence that does not exist on the molecule.

Validated

Delta jobs 21575385 and 21603825 — chr20+21+22, 30x, purity 0.6, SV_RATE_SCALE=30, both exit 0:

  • 11/11 insertions present in the reads, 9 longer than the 151 bp read, largest 968 bp
  • 76/76 deletions with junction sequence present, 76/76 removing coverage, flank ratios 0.33–0.77
  • no coverage holes at genome scale; scorer selftests pass on 153 + 78 records

Known limitations

  • Insertion sequence is random, not mobile-element (#580). It is unique in the genome by construction, so every supporting read maps at MAPQ ≥ 30, where real Alu and L1 map ambiguously. INS recall measured against eidolon insertions is optimistic.
  • INS denominators are thin. Both campaigns planted 9 at-risk insertions against a floor of 20. Those 9 worked; that is not insertion realization at scale.
  • Single breakends are refused, not supported (#623) — a legitimate VCF 4.2 call.
  • The CIGAR clip gate sits near its detection floor for somatic deletions (#630).
  • Copy-number depth accuracy is size-dependent (#584). Accurate at 10 kb; biased high on kb-scale events, because junction reads are emitted on top of coverage-multiplied reads.

Validation harness

Most of the above was found by the harness, and several harness defects were found by its own gates disagreeing with each other. Four read-level evidence gates now run per campaign before BAMs are pruned — insertion sequence, deletion junction sequence, deletion coverage against flanks, and CIGAR clip support against flanking controls. Clippy is a blocking CI gate and the Rust toolchain is pinned.

Full changelog: 3.1.0...v3.2.0