fix: MA-refactor fallout — qc, track-decorators, filter expressions, mock-fire, stale legacy tags - #123
Merged
Merged
Conversation
mrvollger
force-pushed
the
fix/fire-extract-ma
branch
from
August 13, 2026 16:39
7b7b8cb to
c9ad8ba
Compare
…IRE MSPs Same bug class as the fire --extract fix: since the MA-spec refactor (0.10), FIRE quals live on the `fire` annotation type, not the MSPs. `ft qc --m6a-per-msp` read the MSP qual directly, so is_fire was always false, and `ft track-decorators` iterated only fire-type annotations, so precision-0 MSPs (the majority) lost their LINKER decorations relative to 0.6 output. Factor the overlay into FiberseqData::msp_fire_quals() and use it in all three consumers (extract, qc, decorator). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
mrvollger
force-pushed
the
fix/fire-extract-ma
branch
from
August 13, 2026 16:42
c9ad8ba to
111abd1
Compare
…legacy tags Three more instances of the 0.10 MA-refactor bug class, found by a systematic sweep: - -x 'qual(msp)' compared against MSP quals, which are always 0 post-MA (the fire-qual path was gated on fire count == msp count, but fire is the p>0 strict subset). '>N' dropped everything including called FIREs; '<N' kept them. Overlay fire quals by molecular start and drop msp/fire by a shared kept-start set; len(msp) now also drops paired fire entries instead of orphaning them. - mock-fire emitted fire-only annotations, invisible to msp-driven consumers; it now writes the msp set alongside fire, matching real fire-scored records. - MA-writing subcommands left consumed legacy tags (ns/nl/as/al/aq, fibertig fs/fl/fa) on the record, so legacy readers saw stale calls forever and convert-tags could never clean them. write_record now strips exactly the tags the reader consumed, with type-checked provenance gates shared with read_record: wrong-typed or un-gated foreign tags reusing the same names are never touched, and records already carrying MA are left alone. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…A:Z) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ne in MA:Z) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Keeps this PR scoped to the FIRE-qual overlay fixes (qc, decorators, filter expressions, mock-fire). The write_record legacy-tag hygiene and its tests move to fix/legacy-tag-hygiene, where they ship together with the Ma/Aq/An read-tolerance work. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Merged
mrvollger
pushed a commit
that referenced
this pull request
Aug 13, 2026
… branch Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> # Conflicts: # tests/regression/fire.rs
mrvollger
pushed a commit
that referenced
this pull request
Aug 13, 2026
## 🤖 New release * `molecular-annotation`: 0.0.2 -> 0.0.3 (✓ API compatible changes) * `fibertools-rs`: 0.12.1 -> 0.13.0 (✓ API compatible changes) <details><summary><i><b>Changelog</b></i></summary><p> ## `molecular-annotation` <blockquote> ## [0.0.3](molecular-annotation-v0.0.2...molecular-annotation-v0.0.3) - 2026-08-13 ### Fixed - [**breaking**] write MA-family tags as Ma/Aq/An (SAM local-use spelling) + legacy-tag hygiene ([#124](#124)) - leading soft clips double-counted in pyMA liftover ([#126](#126)) - MA-refactor fallout — qc, track-decorators, filter expressions, mock-fire ([#123](#123)) </blockquote> ## `fibertools-rs` <blockquote> ## [0.13.0](v0.12.1...v0.13.0) - 2026-08-13 ### Fixed - [**breaking**] write MA-family tags as Ma/Aq/An (SAM local-use spelling) + legacy-tag hygiene ([#124](#124)) - make the Read the Docs (py-ft) build independent of the pyft Rust build ([#127](#127)) - MA-refactor fallout — qc, track-decorators, filter expressions, mock-fire ([#123](#123)) ### Other - cache cargo artifacts, parallelize jobs and tests ([#128](#128)) </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Systematic sweep for the 0.10 MA-refactor bug class (FIRE quals moved off MSPs onto the
firetype). This PR fixes the FIRE-qual overlay consumers:ft qc --m6a-per-msp:is_firewas always false (read MSP quals directly). Now uses the sharedFiberseqData::msp_fire_quals()overlay.ft track-decorators: precision-0 MSPs lost their LINKER decorations vs 0.6 (only thefireview was iterated). All MSPs decorate again, and output ordering is now deterministic (was HashMap-ordered).-x 'qual(msp)'filter expressions: compared against always-zero MSP quals, so>Ndropped every MSP including called FIREs and<Nkept them;len(msp)orphaned paired fire entries. Fire quals are overlaid by molecular start and msp/fire are dropped by a shared kept-start set.ft mock-fire: emitted fire-only annotations invisible to msp-driven consumers; now writes the msp set alongside fire, matching real fire-scored records.AL/separate-lengths references (lengths are inline inMA:Z).Every fix has regression coverage: insta snapshots pin the extract/qc/decorator FIRE rows, plus assertion tests for the filters and mock-fire tag layout. 20 regression tests pass; fmt/clippy clean.
Related PRs: #124 carries the legacy-tag hygiene (provenance-checked stripping of consumed
ns/nl/as/al/aq+ fibertig tags) and theMa/Aq/Anread-tolerance helper, split out of this PR. Still outstanding for their own PRs: the py-ft port (compile-dead since 0.10) and the molecular-annotation python soft-clip liftover offset.🤖 Generated with Claude Code