Skip to content

v0.7.0

Choose a tag to compare

@nh13 nh13 released this 09 Jul 17:07
60c5913

Added

  • (reference) validate manifest schema/version at load, fail loud on an incompatible reference (#1003)
  • (mosaic) parse predicted-wrapper and whole-entity-LHS =/ forms (#992)
  • (protein) parse insXaa[n] and insTer/ins* inserted sequences (#991)
  • (python) forward the remaining MultiFasta-overridden methods to the Python provider (#977)
  • (python) forward legacy gene-selector resolution to the Python provider (#967)
  • feat(project)+test(conformance): source-scope enumeration & provision Ensembl reference (#933) (#942)
  • (normalize) synthesize the transcript selector on a bare-NG_ c. input (#923) (#932)
  • (python) normalize project_to_genomic output by default; raw via normalize=False (#888)
  • (project) NG_/LRG in-place c./n.→g. projection for compound alleles and UTR coordinates (#881)
  • (project) predict C-terminal extension / stop-loss for CDS→3'UTR-spanning deletion (#880)
  • (reference) provision NM_002001.2 conformance rows (#802) (#849)
  • (prepare) version-aware transcript backfill (#842) (#848)
  • (service/effect) real amino-acid resolution and junction-based NMD (#837)
  • (vcf) RNA→VCF conversion and complex-allele decomposition (#822)
  • (vcf) parse per-sample FORMAT genotype values (#823)
  • (project) translate downstream variants on non-AUG-initiation transcripts (#780) (#796)
  • (reference) provision exon→genome structure for cdot-absent old transcript versions (NM_003002.2) (#790) (#795)
  • (project) resolve legacy GENE_vNNN selectors on NG_(...):c./n./r. projection (#784)
  • (project) predict p.? for an initiation-codon member of a cis compound allele (#778)
  • (normalize) expand r. (RNA) cross-reference insert/delins payloads (#777)
  • (normalize) expand axis-less cross-reference insert payloads (#769)
  • (project) predict protein consequence for whole-exon deletions (#761)
  • (conformance) corpus-driven NG_ placement derivation (#744) (#747)
  • (conformance) hermetic genomic-axis PR gate (#737) (#746)
  • (prepare) produce derived_refseqgene_placements via --derive-ng-placements (#740) (#743)
  • (project) emit the g. axis for NG/LRG/NC-parent c.pter/c.qter inputs (#537) (#739)
  • (conformance) hermetic protein-axis PR gate (#719) (#733)
  • (conformance) hermetic snapshot-backed normalized-axis PR gate (#719 I4) (#729)
  • (reference) provision derived NG_ placements — load + produce (#728) (#732)
  • (reference) derive version-independent NG_ genomic placement — core (#728) (#731)
  • (conformance) pinned version-exact transcript reference snapshot (#719 I2) (#727)
  • (normalize,project) resolve legacy gene-model selectors on genomic references (#709)
  • (reference) cross-build version-exact cdot fallback for c. normalization (#720)
  • (project) curate project_*_all enumeration — collapse superseded versions, prefer curated transcripts (#710)
  • (project,python) --assembly genome-build override for build-agnostic NG_/LRG_ inputs (#723)
  • (reference,project) bundle GRCh37 RefSeqGene alignment + thread build through projection (#721)
  • (reference) build-aware NG_/LRG_ genomic placement (GRCh37 + GRCh38) foundation (#711)
  • (conformance) add reference-gap report tool (#722)
  • (cli,project) ferro project --axis {g,c,n,p,r} multi-axis projection surface (#712)
  • (conformance) add corpus accession inventory (#707)
  • (conformance) add reference_unavailable disposition (#706)
  • (project) add c.→r. RNA consequence prediction surface (#701)
  • (normalize) apply the 3′ rule across exon/intron boundaries (#670) (#700)
  • (normalize) emit the NP_ protein-accession selector for p. on genomic references (#502) (#676)
  • (prepare) add Ensembl reference support (ENST/ENSG/ENSP) (#677)
  • (check) validate CDS start-codon consistency in ferro check (#629) (#674)
  • (normalize) collapse overlapping cis-allele edits into a single delins (#667)
  • (project) extend the direct c.→p. path to bare n./r. transcript inputs (#506) (#661)
  • (project) enumerate + frame c./n./r. inputs with NG_/LRG_ context (#646) (#647)
  • (project) project NG_/LRG_ genomic inputs onto transcripts (#498) (#642)
  • (project) re-anchor NG_/LRG_-parent projections into the parent frame (#480) (#616)
  • (benchmark) perf-matrix engine + measured performance tables (#617)
  • (parser) parse and/or between bracketed alleles (#544) (#563)
  • (parser) parse predicted compound cis allele [(a;b)] (#545) (#569)
  • (parser) parse trans alleles with a mosaic (;) tail (#544) (#559)
  • (perf-table) render README performance tables from a results JSON (#604)
  • (reference) load + index the GRCh37 cdot so multi-build manifests project GRCh37 inputs (#605)
  • (error) emit AlignmentGap (E3007) for variants in a transcript-genome CIGAR indel (Cycle 1c-iii) (#603)
  • (parser) parse N-padded deletion over an uncertain range (#545) (#568)
  • (parser) parse comma products allele [a,b] (#545) (#571)
  • (parser) parse positionless breakpoint insertion in composite alleles (#546) (#584)
  • (tool-support) single source of truth for the tool-comparison tables (#590)
  • (parser) parse the sup supernumerary marker (#546) (#596)
  • (parser) accept pter/qter endpoints in inserted position-ranges (#546) (#597)
  • (parser) parse same-chromosome ring :: deletion-join (#546) (#595)
  • (parser) support inverted insertion of an uncertain-boundary range (#546) (#576)
  • (parser) accept all-identity trans alleles via cross-spell check (#544) (#558)
  • (project) add the c↔n (non-coding transcript) axis to VariantProjection (#592)
  • (parser) parse shared-position repeat trans alleles (#544) (#555)
  • (parser) parse predicted-wrapper members in protein alleles (#544) (#552)
  • (parser) parse residue-level and/or ^ substitutions (#544) (#550)
  • (parser) parse frameshift with alternative new residues (#544) (#557)
  • (parser) parse trans alleles whose members are cis groups (#544) (#549)
  • (parser) extend mosaic =/ to protein + fix RNA case (#544) (#548)
  • (parser) parse the and/or ^ operator (#544) (#547)
  • (conformance) generate failure-patterns.md from cases.json; retire hand-maintained counts (#509) (#538)
  • (reference) reconcile cdot for synthesis-only transcripts via exon-sum length (#520) (#532)
  • (reference) ingest protein FASTAs + get_protein_sequence + translation check (#520) (#530)
  • (reference) apply canonical overrides in MultiFastaProvider + reconcile cdot (#520) (#528)
  • (prepare) canonical-overrides acquisition — ferro prepare --validate-canonical (#520) (#527)
  • (normalize) resolve bare-transcript c. pter/qter telomere markers (#488 Phase 2) (#533)
  • (reference) version-exact correction of transcript metadata (#520) (#524)
  • (reference) offline structural validation of transcript records (#520) (#521)
  • (normalize) resolve genomic pter/qter telomere markers to concrete coordinates (#488) (#526)
  • (project) direct c.→p. path for bare-NM_ inputs; demote 4 bare-NP protein rows (#498) (#508)
  • (reference) strict exact-version transcript resolution (#478 pillar 3) (#490)
  • (error-handling) reject standalone single-member allele brackets uniformly (W3026, closes #493) (#496)
  • (error-handling) add W3023/W3024/W3025 for dup/dup/del soft-prohibition forms (closes #460) (#462)
  • (parser) accept whole-entity edits in protein bracket members (closes #468) (#475)
  • (normalize) expand ins[ACC:g.A_B] cross-reference to flat literal (closes #422) (#437)
  • (normalize) canonicalize p.delins → p.dup and surface W3022 InitiatorMetCanonicalization (closes #92) (#407)
  • contig-length-aware math + wraparound boundary policies for m./o. variants (closes #399) (#411)
  • (normalize,project,python,validate) four misc gaps from #395 (items 1, 4, 5, 6) (#421)
  • (parser) spec-compliant wraparound ranges on m./o. circular refs (#380)
  • (normalize) protein 3'-shifting for deletions and duplications (#377)
  • (normalize) expand ins[...] to flat literal sequence (closes #333) (#365)
  • (normalize) structured info-code surface mirroring W#### warnings (#373)
  • (project) VariantProjector accepts c./n./r. inputs (#379)
  • (error_handling) mutalyzer ↔ ferro error-code mapping table (closes #329) (#362)
  • (error-handling) W5003 VariantExceedsReference, strict-mode rejection (closes #355) (#363)
  • (test/mutalyzer-normalize) accepted_divergence + spec_citation (closes #335) (#359)
  • (parser) canonicalize r. thymine input to u with W3020 soft-warning (closes #282) (#299)
  • (parser) recognize non-human Ensembl accession prefixes (#320)
  • (project) project_to_genomic for c./n./r. inputs (closes #327) (#358)
  • (parser) RNA/TX trans-allele predicted-edit wrapper in compound brackets (closes #287) (#309)
  • (parser) whole-entity predicted forms for m./o./n. variants (closes #288) (#308)
  • (normalize) MultiRepeat partial validation for non-Exact counts (closes #279) (#296)
  • (annotation) populate Transcript.protein_id from GFF/GTF attributes (#321)
  • (parser) whole-entity predicted forms c.(=), c.(?), r.(=), r.(?), r.(0) (closes #245) (#246)
  • (parser) predicted-edit wrapper inside compound brackets (closes #243) (#244)
  • (parser) accept ?con and ?copy on unknown position (closes #286) (#303)
  • (parser) bracket-aware split for chimeric + non-compact mosaic forms (closes #216) (#217)
  • (normalize) validate repeat unit divides reference span and matches bases (closes #214) (#215)

Fixed

  • (ci) satisfy Rust 1.97 clippy lints and pin the toolchain (#1007)
  • (normalize) preserve co-located insertion overlaps instead of a non-idempotent merge (#1005)
  • (normalize) coalesce shift-created cis adjacency into a single delins (#1002)
  • (project) decline c./p./r. on 5′-incomplete-CDS (cds_start_NF) transcripts (#972) (#994)
  • (reference) resolve transcript_genome_span for deferred Ensembl transcripts (#995) (#996)
  • (normalize) render plain past-CDS coordinates in canonical c.*N form (#920/#336) (#987)
  • (spdi) bound exonic c./n./r. positions past the 3' end; resolve coding r.N as CDS-relative (#989)
  • (convert) CDS<->tx is transcript-native across intra-exon CIGAR insertions (#944) (#988)
  • (normalize) canonicalize bracketed inserted-repeat counts >= 2 (#920) (#983)
  • (parser) validate compound-reference accession pairings (outer=gene/genomic) (#981)
  • (effect) stop_retained, codon-based start_lost, and deterministic most_severe (#978)
  • (spdi) reject r.*N/c.*N positions past the transcript 3' end (#970)
  • (spdi) resolve r.-N (5'UTR) through the exon-aware mapper so it agrees with c.-N (#969)
  • (vcf) decline unknown-position/edit c./n./g. variants instead of panicking (#943) (#947)
  • (project) make c.→p. consequence decline observable, not silent (#956)
  • (parser) resolve ENSG(ENST) compound refs; require versions on Ensembl accessions (#933) (#938)
  • (normalize) reconcile MultiRepeat needs_normalization with the shuffle dispatch (#958)
  • (spdi) resolve r.*N through the exon-aware mapper so it agrees with c.*N (#944) (#950)
  • (parser) correct self-cancelling-allele guard docs and fixture classification (#959)
  • (prepare) make --dry-run a true no-op preview (#939) (#940)
  • (normalize) collapse overlapping cis del+ins allele members on the transcript axis (#920) (#929)
  • (normalize) 3'-shift CDS and whole-CDS-spanning del/dup into the UTR per the HGVS 3'-rule (#918) (#935)
  • (normalize) canonicalize degenerate bracketed inserted-repeat counts (#920) (#926)
  • (project) render a codon-straddling single-codon in-frame deletion as del, not empty delins (#931)
  • (benchmark) surface the failure reason when ferro normalize yields zero successes (#916)
  • (project) render premature-stop protein consequences per spec, not a C-terminal delins (#911) (#913)
  • (reference) skip hidden/AppleDouble files when scanning FASTA directories (#915)
  • (project) cis-sort minus-strand compound-allele members on the project_variant genomic axis (#894) (#898)
  • (project) de-anchor bare NG_/LRG_ genomic input on the single-transcript projection paths (#879) (#896)
  • (project) surface the genomic axis for LRG inputs and pter/qter termini on project_variant (#886, #887) (#893)
  • (normalize) keep out-of-phase insertions as ins, not spurious dup/repeat (#882) (#892)
  • (normalize) 3'-align insertion→duplication; guarantee normalization idempotency (#883)
  • (project) preserve LRG_t/LRG_p namespace on projection output (#860) (#874)
  • render in-frame single-codon deletion in a residue run as del, not empty ins (#850)
  • (project) spec-canonical minus-strand genomic repeat projection (#852) (#869)
  • (parser) collapse single-element bracketed literal ins/delins to a plain literal (#863)
  • (project) canonicalize protein consequences (delins→sub, tandem dup, adjacent in-cis delins) (#862)
  • (project) build-scope the predicted-r. allele transcript fetch (#843) (#845)
  • (normalize) treat LRG transcript references as bare for EINTRONIC (#834) (#844)
  • (project) genomic projection of c.* variants in the 3'UTR poly-A region (NM_003002.2; #790 residual) (#839)
  • (project) wire rna_description axis and frame predicted r. from input (#838)
  • (vcf) drop per-sample genotype when splitting multi-allelic records (#841)
  • (reference) apply cdot CIGAR during transcript synthesis, decline on insertions (#831)
  • (project) force initiator Met at residue 1 for non-AUG ref-protein translation (#836)
  • (reference) suppress derived-tx injection for the #790 producer (#835)
  • (reference) cover canonical-sequence reingestion through the provider (#791) (#832)
  • (vcf) correct genomic anchor-base recovery and consolidate NC_→chrom mapping (#821)
  • (vcf) emit RefSeq NC_ accessions on the genomic HGVS axis (#820)
  • (equivalence/service) make unsupported variant classes explicit (#816)
  • (data/cdot) drop frequently-wrong NM_→NP_ protein-accession inference (#815)
  • (vcf) classify coding indels by typed NaEdit and emit Frameshift (#817)
  • (error) give TranscriptVersionNotExact a distinct error code (E2004) (#814)
  • (normalize) resolve legacy GENE_v001 selector against the NG_ parent's hosted transcript (#792) (#793)
  • decline silent transcript version substitution in normalization and projection (#787)
  • (project) report p.? for an initiation-codon variant on a non-AUG transcript (#772)
  • (data) anchor minus-strand intronic offsets to the correct exon end (#766)
  • (convert) map c.*N+offset 3'UTR positions past a transcript terminus (#765)
  • (normalize) resolve the transcript for a genomic-context c. cross-reference payload (#654) (#756)
  • (normalize) reject overlapping insertions in cis alleles (#486 EOVERLAP) (#749)
  • (data) load cdot exons in the HGVS coordinate convention (#748)
  • (project) re-normalize projected genomic variants in their own frame (#741)
  • (normalize) normalize r. edits carrying the RNA base u (#736) (#738)
  • (normalize) extend the exon/intron 3′ rule to n. and r. variants (#704) (#734)
  • (parser) accept a parenthesized gene-selector in a cross-reference insert (#730)
  • (reference) forward dropped methods through Arc/Box provider wrappers (#726)
  • (project) resolve range-reference insertions against the NG_/LRG_ parent before de-anchoring (#708)
  • (reference) resolve cdot version-exact in normalize, never substitute a sibling version (#717)
  • (project) re-anchor the genomic axis on the single-transcript projection path (#702) (#703)
  • (normalize) correct 1-based↔0-based off-by-one in genomic-shuffle fetch (#690)
  • (normalize) keep W4007 on warn-only intronic-bare resolve-failure (#686)
  • (project) error instead of emitting invalid HGVS when an NG_/LRG_ re-anchor declines (#655) (#662)
  • (project) sequence-aware g.↔c. projection across unmodeled exon indels (#644) (#668)
  • (reference) don't abort LRG mapping scan on a malformed earlier <mapping> (#684)
  • (check) warn when refseqgene_alignments file is missing (#683)
  • (python) add missing ErrorType discriminants 41/42 to the type stub (#658)
  • (normalize) spec-compliant repeat normalization — 3' rotation + flank absorption (#649)
  • (reference) resolve bare LRG_N genomic accession to its LRG_Ng record (#638)
  • (benchmark) make setup uta reliable (#623) (#632)
  • (project) decline protein prediction when the CDS frame is inconsistent (#625) (#628)
  • (validate) reject intronic offsets on a bare transcript reference (#486 EINTRONIC) (#577)
  • (project) route stop-disrupting indels to a C-terminal extension (#615) (#621)
  • (benchmark) time normalize tools by subprocess-internal timer (#609) (#612)
  • (validate) reject del/dup/delins numeric length not matching the position span (#486 length mismatch) (#565)
  • (tool-support) assign footnote markers in canonical order (#602)
  • (reference) report the true secondary-build transcript count (#613)
  • (normalize) size the intronic shuffle window to the enclosing intron (#573) (#575)
  • make HashMap-ordered output deterministic (VCF INFO + benchmark reports) (#594)
  • (parser) bring fast path to full parity with the generic parser (ncRNA, U base, positions, panic) (#560)
  • (reference) make cdot base→version fallback deterministic (#583)
  • (conformance) map ECOORDINATESYSTEMMISMATCH to ferro's Parse error (#486) (#579)
  • (tool-support) address CodeRabbit findings on the matrix generator (#601)
  • (bench) make the intronic projection fixture self-consistent (#600)
  • (project) emit nonsense (not fsTer1) for an immediate-stop frameshift (#589)
  • (project) scan the 3'UTR for a frameshift's new stop (fsTer{K}, not fsTer?) (#587)
  • (build) repair test code that broke under non-dev feature flags (#580)
  • (validate) reject delins/del/dup/repeat reference-sequence mismatches in strict mode (#486) (#556)
  • (validate) reject the RNA base U in a DNA-context edit (#486 ENODNA) (#542)
  • (normalize) coerce g. on a mitochondrial accession to m. (#487 mito group) (#541)
  • (validate) reject c./g./m. on a non-coding RNA reference (#486 coord-system mismatch) (#543)
  • (normalize) number coding-transcript r. positions CDS-relative (#469) (#539)
  • (normalize) spec-correct refusal of NG/LRG-parent c. pter/qter flank coordinates (#488 Phase 2b) (#534)
  • (project) mid-codon in-frame insertions render as delins, not a clean ins (#511) (#517)
  • (normalize) guard special/offset genome positions to avoid pterdel overflow panic (#488) (#518)
  • (reference) decline protein prediction for non-version-exact transcripts (#505) (#519)
  • (project) extend stop-loss substitution prediction with extTer notation (#498) (#514)
  • (project) predict p.(Met1?) for CDS-boundary edits reaching the initiation codon (#504) (#513)
  • (hgvs) distinguish frameshift fsTer? from short fs; predict fsTer? for no-stop frameshifts (#498) (#515)
  • (project) report p.(Met1?) for initiation-codon variants (#498) (#512)
  • (project) never emit descending positions in in-frame protein delins (#498) (#510)
  • (normalize) avoid subtract-overflow panic in minus-strand intronic shuffle (#497)
  • (test/mutalyzer-normalize) spec-correct bare-NP protein refs (7 cases) (#495)
  • (reference) flag cdot base-synthesis divergence risk (closes #471) (#482)
  • (error-handling) make detect_swapped_positions axis-aware for m./o. wraparound (closes #467) (#474)
  • (cdot) plumb transcript protein accession from cdot JSON (#483)
  • (test/mutalyzer-normalize) accept infos codes ferro does not model (22→11) (#481)
  • (parser) depth-aware separator scan in expanded allele entrypoints (#476)
  • (error-handling) extend W3009/W3010 corrector to uncertain-stop forms (#461)
  • (parser) reject single-position insertion per insertion.md:95-101 (#446) (#450)
  • (edit) drop brackets on single-payload InsertedSequence::Complex (#443)
  • (service) extend frameshift classifier span_len to Deletion + Duplication (closes #427) (#435)
  • (parser) reject dupins<seq> per duplication.md:92 (#445) (#451)
  • (error-handling) provider-aware W3016 for mixed-shape intronic-endpoint ranges (closes #429) (#436)
  • (error-handling) W3016 detects numeric-length-suffix disagreement on del/dup/inv (closes #439) (#441)
  • (service) inversion is in-frame at DNA level (closes #438) (#440)
  • (validate) tighten validate_multirepeat_tract for nonzero-min middle (closes #428) (#434)
  • (service,validation,spdi) three delins consistency bugs (closes #394) (#419)
  • (normalize) canon boundary-spanning ins + side-aware ins→dup anchor (closes #402) (#413)
  • (normalize) close untracked biocommons-burndown divergences (closes #418) (#420)
  • (normalize) direction-aware tie-break in insertion_to_duplication (closes #403) (#408)
  • fix(spdi)+(error-handling)+(test): six HGVS↔SPDI / W3016 / VCF audit gaps (closes #390) (#406)
  • (project) build-aware cdot lookups + widen fan-out path for c./n./r. (closes #389) (#398)
  • (normalize) extend W4004 PositionPastEnd to intronic offsets (closes #392) (#414)
  • (normalize) preserve spanning duplications in CDS-start canon clamp (closes #401) (#410)
  • (normalize) clamp 3'-canonicalization at CDS-end for c.-axis inputs (closes #387) (#388)
  • (normalize) reject c. positions past CDS-end / transcript-end (W4004 PositionPastEnd, closes #336) (#342)
  • (normalize) clamp 5'-canonicalization at CDS-start for c.-axis inputs (closes #383) (#385)
  • (normalize) apply exon-junction exception to n. and r. axes (#374)
  • (parser) propagate structured chunk-level diagnostics in slash-form alleles (closes #375) (#376)
  • (parser) extend E3006 self-cancelling detection to *-region and intronic ranges (closes #172) (#371)
  • (diagnostics) preserve source span on E3006 SelfCancellingAllele (closes #171) (#369)
  • (preprocessor) accept lowercase IUPAC for r. multi-base subs (closes #170) (#367)
  • (normalize) intronic + boundary normalization with NG/NC-parent inputs (closes #332) (#364)
  • (parser,error-handling) wire W3019 NonSpecMosaicForm for nested + [a/b] mosaic (closes #281) (#298)
  • (normalize) clamp 3'-rule shuffle at CDS↔UTR axis boundary (closes #337) (#343)
  • (normalize) strip explicit deleted-sequence from delins (closes #338) (#344)
  • (parser,error-handling) mito heteroplasmy prose diagnostic + W3017/W3018 SVAs (closes #278) (#295)
  • (normalize) bail gracefully when ref window mismatches HGVS span (closes #339) (#345)
  • (parser,display) preserve parens on inner repeat-count range insN[(150_180)] (closes #285) (#306)
  • (normalize) set RefSeqMismatch.corrected to reflect actual correction (closes #280) (#297)
  • (normalize) direction-aware ins→dup for homopolymers (closes #340 subgroup (i)) (#346)
  • (reference) synthesize transcript bases via cdot exon-alignment when FASTA version is missing (closes #331) (#341)
  • (parser) accept p.(0) whole-entity predicted no-protein (closes #289) (#307)
  • (parser) chain-expand mito = arms to inherit position, not synthesize m.1= (closes #284) (#302)
  • (parser) route [0] inside protein compact trans-allele to NoProtein (closes #277) (#294)
  • (display) canonicalize r. emission T→u in repeat units and bases (closes #276) (#293)
  • (normalize) extend codon-frame exception to r., 3+ chains, and sub+del (closes #275) (#292)
  • (mock) disambiguate genomic vs transcript lookups when ids collide (closes #311) (#312)
  • (parser,error-handling) wire W3021 ProteinBracketedAaInsertion (closes #290) (#305)
  • (fasta) route known-contig lookups in FastaProvider through the FASTA path (closes #315) (#318)
  • (fasta) require version-boundary equality in MmapFastaProvider transcript lookup (closes #314) (#317)
  • (projector) protein prediction for non-RefSeq transcripts + drop (GENE) selector from p. Display (#313)
  • (validation) wire W3016 LengthMismatch soft-validation warning (closes #81 K1 follow-up) (#272)
  • (error-handling) extend W4001 SwappedPositions to offset and *N markers (closes #81 L2 follow-up to #264) (#271)
  • (spdi) preserve inv and m. coord system on SPDI -> HGVS (closes #81 K1 follow-up) (#274)
  • (error-handling) wire W1004 MixedCaseEditType warning into preprocessor (closes #81 L2 follow-up) (#273)
  • (error-handling) wire W4001 SwappedPositions warning into preprocessor (closes #81 L2 remaining) (#264)
  • (parser,display) predicted-edit wrapper c.(<pos><edit>) on every NA coord (closes #241) (#242)
  • (parser,display) single uncertain position range c.(a_b) (closes #237) (#238)
  • (protein) extension Display emits extTerN to match Frameshift Ter canonicalization (closes #224) (#225)
  • (parser) accept ?<edit> on g./r./n. and ?A>G / ?= (closes #239) (#240)
  • (normalize) read dup bases from reference (single-pass idempotency for dup with mismatched stated-ref) (closes #219) (#230)
  • (vcf) classify protein consequences by enum variant, not substring (closes #228) (#229)
  • (normalize) wire window-based normalization for m. variants (#210) (#213)
  • (normalize) exempt introns and UTR from codon-frame gate (#209) (#211)
  • (parser) depth-aware close-bracket lookup in nested HGVS brackets (closes #207) (#208)
  • (normalize) decompose delins to multi-sub canonical form when sub > delins applies (closes #165) (#206)

Other

  • (benchmark) refresh measured performance tables for 0.7.0 (#1006)

  • (spec-fixture) classify the remaining spec-audit parse gaps (#993)

  • (spec-fixture) reassemble spot-split variants, drop harvest noise (#990)

  • (conformance) regenerate stale mutalyzer failure-patterns summary (#998)

  • (conformance) reclassify NM_017668.3 c.CAA[5] repeat as accepted_divergence, not known_bug (#920) (#986)

  • (conformance) reclassify c.235_237delinsTAT as spec_citation, not known_bug (#920) (#984)

  • (conformance) re-bless mutalyzer baseline-failures — all ledgers empty (closes #326) (#982)

  • (reference) defer Ensembl cdot load so RefSeq startup skips the merge (#965)

  • (conformance) document the dormant proj-near-disc + NR2E3 rows (#946) (#949)

  • (conformance) make the whole-CDS-deletion p.0?/p.(Met1?) divergence terminal (#945) (#948)

  • (conformance) reclassify the 8 NG_007485.1 noncoding rows as spec_citation (#921) (#934)

  • (normalize) correct misleading circular o. normalization comments (#957)

  • (benchmark) refresh comparator pins and record verified provenance (#890) (#941)

  • (conformance) reclassify copy-range delins rows as spec_citation (#922) (#937)

  • (conformance) re-home stale-tracker annotations to live issues (#912) (#924)

  • (conformance) disposition residual infos rows; reclassify NM_017668.3 exon-junction rows as spec_citation (#908, #918) (#919)

  • (conformance) disposition the 3 NG_008939 stop-insertion coding_protein rows (#911/#913 follow-up) (#927)

  • (conformance) reconcile the redundant cis-= allele axis inconsistency (#912 action 4) (#928)

  • (conformance) accept hgvs-rs-projection form-currency divergences (#925) (#930)

  • (tool-support) label the support matrix for the ferro 0.7.0 release (#914)

  • (conformance) harden the reference-identity signature (#905) (#910)

  • (conformance) accepted-divergence annotation sweep for the mutalyzer parity corpus (#861) (#909)

  • (conformance) correct insCAT protein_description; demote the 5'UTR-insertion divergence (#891)

  • (benchmark) record comparator provenance in the mutalyzer-normalize corpus header (#890)

  • (conformance) let accepted_rejection disposition an empty-projection Err (#903)

  • (conformance) demote stale known_bug #487 for LRG_303t1 out-of-phase insertion (#906)

  • (project) untangle project_to_genomic_nc — extract the coordinate map and #785 gate (#868) (#902)

  • (conformance) bless genomic-axis rejections via multi-axis accepted_rejection (#870 follow-up)

  • (conformance) route genomic axis through the user-facing project_variant path (#870)

  • (normalize) make normalize_repeat the single source of truth for ins→repeat canonicalization (#866) (#897)

  • remove machine-local paths from committed example and runbook (#889)

  • (conformance) converge NG_-annotated transcript version on RefSeqGene selectors (#859) (#871)

  • (conformance) accept ferro's decline of NM_017668.3 coords outside NG_009299.1 coverage (#853, #865) (#877)

  • (nightly) derive ng_hosted_transcripts + NG_ placements in the nightly reference (#875) (#876)

  • (conformance) cite ferro's spec-correct inserted-inversion resolution (#854) (#878)

  • (conformance) accept ferro's spec-correct refusal of non-standard/absent NG_ selectors (#858) (#873)

  • (conformance) rebless rna_description ledger and protein empty-projection pin (#799) (#846)

  • (normalize) resolve the cigar-aware normalization backlog (#811) (#833)

  • (conformance) allow multiple per-axis spec_citation annotations on a Case (#830)

  • (conformance) disposition bare-NP protein-framing rows as spec_overridden (#826)

  • (spdi) run SPDI roundtrip + rsID tests offline via synthetic fixture (#825)

  • (python_helpers) remove dead edit_type_from_debug {:?}-string matcher (#829)

  • (conformance) cover exon-junction rows in the genomic-axis gate (#751) (#789)

  • (reference) derive accession→assembly from NCBI assembly_report (#716) (#788)

  • (conformance) decrement protein empty-projection budget after #778 (#786)

  • (project) predict VSIR reverse-strand whole-exon frameshift (#774)

  • (conformance) re-bless empty-projection budget on canonical reference (#775)

  • (conformance) disposition pter/qter-in-c flank payloads; green the normalized axis (#770)

  • (conformance) accept coding_protein transcript-set enumeration divergences (#768)

  • (conformance) pin the empty-projection budget to its reference (#767)

  • (conformance) restore clobbered genomic #745 + add accepted_rejection (#654) (#757)

  • (conformance) disposition the normalized-axis Ok-mismatch divergences (#654) (#755)

  • (conformance) forward dropped methods through the ArcProvider wrapper (#726 follow-up) (#754)

  • (conformance) green errors axis — bucket accepted divergences (#486) (#752)

  • (conformance) reclassify #745 homopolymer repeat-contraction as accepted divergence (#750)

  • (reference) NCBI assembly_report parser + data-driven build inference (#716) (#735)

  • consolidate ~230 integration-test binaries into one crate (#725)

  • (annotate-vcf) annotate VCF records in place instead of cloning (#698)

  • (annotate-vcf) parallelize file-input record annotation behind -j/--workers (#696)

  • (parse) parallelize the batch CLI loop behind -j/--workers (#688)

  • (vcf) remove dead batch processors from src/vcf/batch.rs (#699)

  • (annotate) interval-index TranscriptDb::get_by_region (#697)

  • (annotate-vcf) buffer the output writer (#695)

  • (python) parallelize the batch API and release the GIL (#691)

  • (normalize) parallelize the batch CLI loop behind -j/--workers (#687)

  • (pre-commit) bump ruff hook to v0.15.12 to match CI (#705)

  • (normalize) keep IntronicVariant.variant machine-readable (#685)

  • (conformance) add an output-quality signal to the mutalyzer axis harness (#651) (#675)

  • (conformance) classify remaining #487 3′-shift audit rows (#673)

  • (parser) skip Unicode trim when input has no surrounding whitespace (#659)

  • (readme) honest benchmark framing — offline best-case + single-threaded parse (#660)

  • (normalize) pre-size runtime cdot maps when rebuilding from the archive (#666)

  • (normalize) use FxHashMap for the runtime cdot reference maps (#665)

  • (normalize) avoid per-variant allocations and walks in input preprocessing (#664)

  • (normalize) skip reference teardown at process exit (#663)

  • (parser) fast-path identity edits (protein and nucleotide) (#657)

  • (parser) fast-path protein missense substitutions (#650)

  • (parser) fast-path intronic and UTR coding substitutions (#643)

  • (benchmark) refresh measured tables with startup-excluded normalize timing (#648)

  • (parser) fast-path plain deletions and duplications (#641)

  • (conformance) annotate coding non-codon-aligned repeats as spec-overrides (#640)

  • (parser) eliminate per-parse accession allocations (~27% faster parsing) (#639)

  • (conformance) annotate + hermetic-gate the biocommons normalize corpus (closes #325) (#636)

  • (reference) lazily load the GRCh37 secondary cdot until first use (#635)

  • remove committed machine-specific manifest path from benchmark tests (#634)

  • (conformance) disposition the residual signal — fully classify the hgvs-rs dashboard (burn-down PR 3) (#620)

  • add CodeRabbit config (assertive profile + path instructions) (#627)

  • (conformance) quarantine hgvs-rs data-source divergences so red = real (burn-down PR 2) (#614)

  • (conformance) version-insensitive comparator + selection-coverage for the hgvs-rs corpus (#607)

  • fix broken DOI badge in README (#574)

  • (conformance) accept compound-allele SHUFFLE_APPLIED as a tracked divergence (#499) (#572)

  • (conformance) reject position-past-end on the errors axis (#486 EOUTOFBOUNDARY) (#567)

  • (reference) precompute has_genomic_data instead of scanning the index (#610)

  • (cli) format the normalized variant once per output line (#611)

  • (conformance) reject ISCN-only / superseded :: rearrangement forms (#546) (#608)

  • perf-regression gate (cdot load-source structural test + nightly startup budget) (#606)

  • (normalize) resolve intronic transcripts by accession, not a cloned variant (#582)

  • (reference) reuse FASTA file handles with positioned reads (~1.9x normalize) (#570)

  • (parser) route the default parse_hgvs through the fast path (~1.7x on ClinVar) (#562)

  • (reference) memoize resolved transcripts in MultiFastaProvider (#578)

  • (reference) faster, deterministic FASTA index build (FxHashMap + highest-version fallback) (#588)

  • (project) add c→p, c↔n, ref-AA cache, and batch projection microbenchmarks (Cycle 1c-ii) (#599)

  • (conformance) import the hgvs-rs projection corpus as a third oracle (Cycle 1c-i) (#598)

  • (reference) binary cache for the GFF/GTF TranscriptDb (annotate-vcf ~3s → ~0.6s) (#593)

  • (reference) rkyv archive for the cdot cache (zero-copy load, ~0.37s off startup) (#591)

  • (reference) version + self-heal the cdot bincode cache (fix silent JSON fallback) (#585)

  • (tests) stop committing the generated spec-normalization fixture (#586)

  • (normalize) two no-functional-change normalize hot-path wins (shuffle-info + protein-length) (#553)

  • (bench) broaden microbenchmark suite + tag-sweep runner (perf-effort foundation) (#554)

  • fix nightly reference-aware tests (ferro prepare --output-dir) + add nightly badge (#551)

  • (biocommons) mirror the improvement conformance disposition (#503) (#540)

  • (mutalyzer) demote c.41A>C — substitution is a missense, not a frameshift (#498) (#516)

  • (mutalyzer) add improvement disposition; demote NG_ gene-symbol selector divergences (#500) (#501)

  • (mutalyzer) known_bug disposition + XPASS detection (#478) (#489)

  • (biocommons) annotation + XPASS conformance harness (#478 pillars 1-2) (#484)

  • (mutalyzer-normalize) demote ins[...] cases fixed by #333 (49 rows) (#479)

  • (test) prune stale NM_000051.3:c.1_2insCA from biocommons baseline-failures (#477)

  • trans-allele dedup, mixed phase reject, RNA whole-entity in brackets (closes #396) (#425)

  • (protein) pin stop-codon glyph canonicalization (#453) (#454)

  • (protein) pin construct-boundary canonicalization probes (F13) (#458)

  • (allele) pin allele-bracket grammar corner cases (F12) (#457)

  • (parser) pin strict-reject mode for W3011 DelSizeSuffix (#447) (#459)

  • (parser) fix red main — drop obsolete dupins-accept probe (contradicts #445) (#463)

  • (parser) pin input-hygiene & spec-rejected parser behavior (F1+F2) (#444)

  • (spec) pin miscellaneous coverage corners (F6+F7+F10-11+F14-18) (#456)

  • omnibus follow-up: loader + diagnostics + ci polish (closes #397) (#426)

  • (parser) pin strict-whitespace parse mode (#449) (#455)

  • (rna) add r.↔c. consistency + RNA splicing marker coverage (#442)

  • (parser) drop dead 0? clause in protein trans-allele shorthand (closes #424) (#431)

  • (benchmark) wire supplemental_fasta into manifest after patterns fetch (#417)

  • (test) resync biocommons-normalize baseline-failures with manifest-mode xfail (#405)

  • (normalize) 3'-rule completeness — repeat-depth audit + #343 deferred symmetry tests (closes #391) (#409)

  • (test) sync biocommons-normalize baseline-failures with current xfail (#386)

  • (normalize) pin delins → dup canonicalization over downstream tract (closes #382) (#384)

  • (python) migrate PyO3 bindings to abi3 stable ABI (#381)

  • (project) rebuild VariantProjector hot paths (#361)

  • (error-handling) retire W4002 PositionZero duplicate identity (closes #269) (#370)

  • (parser,display) pin c./r. predicted-edit wrapper Display parity (closes #300) (#372)

  • (biocommons) import normalize test corpus (88 cases, stacked on #323) (#324)

  • update stale Display test expectations to HGVS spec-canonical forms (#366)

  • (contributing) defer CHANGELOG.md to release-plz (#360)

  • (reference) impl Default for Transcript to enable spread-update fixtures (#322)

  • (mutalyzer) import normalize test corpus (320 cases, 8 axes) (#323)

  • (normalize) pin r.-axis (transcript-1-relative) convention (closes #291) (#304)

  • (convert) pin c. → r. reference-driven conversion across edit shapes (closes #283) (#301)

  • (audit) HGVS ↔ SPDI round-trip coverage matrix (closes #81 K1 remaining) (#260)

  • (audit) HGVS ↔ VCF conversion surface (closes #81 K2) (#262)

  • (audit) minus-strand intronic position ordering at parse/Display (closes #81 J3) (#258)

  • (audit) n. upstream/downstream * and - markers canonical output (closes #81 J2) (#256)

  • (audit) LRG references full round-trip across edit types (closes #81 I1) (#248)

  • (audit) boundary-spanning del/delins ranges across UTR/CDS (closes #81 J1) (#254)

  • (audit) chromosome alias input + canonical output (closes #81 I4) (#252)

  • (audit) versioned vs unversioned accession policy (closes #81 I2) (#250)

  • (mito) extended heteroplasmy / prose-shape audit and policy doc (closes #235) (#236)

  • (rna) pin r./c. canonicalization parity across edit shapes (closes #233) (#234)

  • (rna) dedicated lowercase enforcement coverage across edit types (closes #231) (#232)

  • protein canonicalization audit umbrella for #81 § D — D1 / D3 / D4 / D8 (closes #226) (#227)

  • 3+ variants in one allele bracket where merging does not apply (closes #221) (#222)

  • dedicated coverage for mixed-accession compound alleles (closes #218) (#220)

  • (parser) accept ?con<src> and ?copy<N> at unknown position, consistent with ?del/?dup/?ins/?inv (closes #286)

  • (fasta) require version-boundary equality in MmapFastaProvider::get_transcript's unversioned-prefix fallback (closes #314)

  • (fasta) route FastaProvider::get_sequence for known contigs through the FASTA path so a transcript registered with a chromosome-colliding id no longer wins over the genomic index (closes #315)

Fixed

  • (project) decline rather than emit invalid HGVS when an NG_/LRG_-parented projection cannot be re-anchored into the parent's own frame: with no chromosomal placement (or an endpoint outside the placed span / an uncertain boundary), project_to_genomic now returns UnsupportedProjection/InvalidCoordinates instead of stamping a chromosome (NC_) coordinate under the parent accession. The cross-isoform enumerate path (project_variant_all, #646) degrades gracefully — dropping only the unframable genomic axis while keeping the parent-framed coding/protein forms (closes #655).
  • (reference) make cdot base→version fallback deterministic; previously, when a cdot file contained multiple versions of the same base accession (e.g. NM_000088.3 and NM_000088.4), base_to_versioned could resolve to any version across runs due to HashMap iteration order, silently shifting CDS coordinates for callers requesting an absent version (closes #583).
  • (edit) drop brackets on single-payload InsertedSequence::Complex Display so e.g. delins[78185355_78199419inv] round-trips as delins78185355_78199419inv, matching HGVS v21 (DNA/insertion.md:22, DNA/inversion.md:39).
  • (normalize) extend HGVS codon-frame exception beyond the two-c.-SNV case (closes #275, follow-up to #79 / #104): the spec's "two variants separated by one nucleotide, together affecting one amino acid" carve-out now also covers (1) r. coding regions, (2) chains of 3+ SNVs where a strict-adjacency merge leaves prev_a as a multi-base delins, and (3) sub+del and del+sub pairs separated by one unchanged nucleotide.