v0.7.0
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_alignmentsfile 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 utareliable (#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-
devfeature 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.variantmachine-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)
-
(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_sequencefor 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_genomicnow returnsUnsupportedProjection/InvalidCoordinatesinstead 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.3andNM_000088.4),base_to_versionedcould resolve to any version across runs due toHashMapiteration order, silently shifting CDS coordinates for callers requesting an absent version (closes #583). - (edit) drop brackets on single-payload
InsertedSequence::ComplexDisplayso e.g.delins[78185355_78199419inv]round-trips asdelins78185355_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 leavesprev_aas a multi-base delins, and (3)sub+delanddel+subpairs separated by one unchanged nucleotide.