Snapshot of open pull requests that no longer merge cleanly into main (abf2ab7), checked locally with git merge-tree --write-tree origin/main <pr-head> for each of the 45 open non-dependabot PRs. Review order and stacking are discussed in #195 ; this issue only tracks the merge conflicts.
22 of them conflict. Most of the churn comes from three merges: the bounded-memory BAM sort (#214 , in #290 ), the batch-1 fixes (#289 ), and the retirement of CLAUDE.md (#251 ).
Conflicts in source code (needs a real rebase)
fix(chimeric): well-formed single-end WithinBAM records with STAR's hard-clip rules #282 fix(chimeric): well-formed single-end WithinBAM records with STAR's hard-clip rules: src/chimeric/detect.rs, src/chimeric/output.rs, tests/alignment_features.rs
perf(io): encode SAM/BAM records on the align workers (stacked on #276) #278 perf(io): encode SAM/BAM records on the align workers (stacked on perf(io): parallel order-preserving BGZF compression for BAM output #276 ): src/io/bam.rs, src/io/sam.rs, src/lib.rs
perf(io): parallel order-preserving BGZF compression for BAM output #276 perf(io): parallel order-preserving BGZF compression for BAM output: src/io/bam.rs
feat(io): detect input compression by magic bytes, optional bz2/zstd/xz #272 feat(io): detect input compression by magic bytes, optional bz2/zstd/xz: Cargo.toml, DIVERGENCE.md, src/io/fastq.rs
fix(align): pair-subset dedup requires same chromosome and strand (stacked on #254) #271 fix(align): pair-subset dedup requires same chromosome and strand (stacked on fix(align): a soft-clipped variant of a pair is not a second locus #254 ): CHANGELOG.md, src/align/read_align.rs
fix(align): a soft-clipped variant of a pair is not a second locus #254 fix(align): a soft-clipped variant of a pair is not a second locus: CHANGELOG.md, src/align/read_align.rs
feat: output anndata #237 feat: output anndata: Cargo.lock, src/junction/sj_output.rs, src/solo/count.rs, src/solo/mod.rs
feat(io): optional pure-Rust parallel gzip input decoding (rapidgzip-core) #225 feat(io): optional pure-Rust parallel gzip input decoding (rapidgzip-core): CHANGELOG.md, Cargo.toml, src/io/fastq.rs
feat(io): native CBQ input support #213 feat(io): native CBQ input support: Cargo.toml, src/io/fastq.rs, src/lib.rs, src/params/mod.rs, src/solo/whitelist.rs
genome: --genomeTransformOutput SAM reports original coordinates #160 genome: --genomeTransformOutput SAM reports original coordinates: CHANGELOG.md, src/chimeric/detect.rs, src/params/mod.rs, tests/alignment_features.rs
aligner core: annotated-junction stitching, alignEndsType, in-recursion length penalty #146 aligner core: annotated-junction stitching, alignEndsType, in-recursion length penalty: src/align/score.rs, src/align/seed.rs, src/align/stitch.rs, src/chimeric/detect.rs, src/junction/gtf.rs, tests/parameter_surface.rs
genomeGenerate: libsais suffix-array builder, selected by --limitGenomeGenerateRAM #109 genomeGenerate: libsais suffix-array builder, selected by --limitGenomeGenerateRAM: Cargo.toml, src/lib.rs
Conflicts only in CHANGELOG, Cargo manifests, docs or tests
These are usually mechanical: keep both sides.
Already rebased
Merge clean today: #297 , #296 , #295 , #294 , #293 , #283 , #274 , #255 , #253 , #248 , #243 , #226 , #184 , #182 , #179 , #178 , #176 , #174 , #165 . Some of them are stacked and only clean against their own base.
Status (2026-10-09)
main was merged into 11 of these branches (checked boxes above), each with fmt, clippy -D warnings and the full test suite passing. A few needed more than conflict markers:
The remaining 11 (#282 , #278 , #276 , #272 , #271 , #237 , #225 , #213 , #160 , #146 , #109 ) are left to the maintainer. Note on #146 : it overlaps heavily with #295 and the parity stack (#301 , #302 , #304 ) in stitch.rs/score.rs/seed.rs, so it is worth deciding which approach supersedes the other before rebasing it.
Status (2026-10-09, after main moved to b5a70d0 , #307 )
Re-checked every open PR against the new main and merged it into all that conflicted, except the ones below. Each merge passes fmt, clippy -D warnings and the full test suite (with the PR's cargo feature when it has one).
fix(align): stitch annotated junctions like STAR; drop covered PE sub-alignments #295 , fix(align): never stitch same-diagonal seeds; port STAR's PE junction consistency walk #301 , fix(align): STAR's seed-overlap order, insertion with overlapping seeds, sjdb overhang per side #302 , fix(align): STAR's window formation and per-window dedup for long splices #304 (parity stack): main merged into fix(align): stitch annotated junctions like STAR; drop covered PE sub-alignments #295 and propagated; the stack still fixes 350 mates and breaks none against the new main.
fix(quant): filter TranscriptomeSAM pairs as a unit, like STAR (#292) #293 , fix(align): a soft-clipped variant of a pair is not a second locus #254 , fix(solo): port STAR's actual CellRanger4 clip rules #241 , fix(align): pair-subset dedup requires same chromosome and strand (stacked on #254) #271 : CHANGELOG only.
feat(io): detect input compression by magic bytes, optional bz2/zstd/xz #272 : its magic-byte detector already used MultiGzDecoder (main's GzDecoder truncates multi-member gzip input: reads are silently dropped #217 fix); main's multi-member test kept. DIVERGENCE.md section renumbered §4.4 (note: feat(degnorm): DegNorm-style transcript degradation normalization #232 's DegNorm section is also §4.4; whichever lands second needs §4.5).
feat(io): optional pure-Rust parallel gzip input decoding (rapidgzip-core) #225 : rapidgzip path kept with main's MultiGzDecoder fallback.
genomeGenerate: libsais suffix-array builder, selected by --limitGenomeGenerateRAM #109 : main's "limitGenomeGenerateRAM accepted but not enforced" warning dropped since the branch uses it; the yeast index it builds is byte-identical to STAR's.
genome: --genomeTransformOutput SAM reports original coordinates #160 : --genomeTransformOutput SAM now also refuses --chimSegmentMin > 0 (the PR never mapped chimeric output back; main's Port STAR's WithinBAM output (supersedes #282); PE nM is the pair's #307 WithinBAM would have mixed coordinate spaces).
perf(io): parallel order-preserving BGZF compression for BAM output #276 : main's external sort with perf(io): parallel order-preserving BGZF compression for BAM output #276 's parallel BGZF (spill runs too); records md5-identical to main, including a 331-run spill.
aligner core: annotated-junction stitching, alignEndsType, in-recursion length penalty #146 : 239 mates fixed, 0 newly differing on 200k yeast pairs with main merged. Overlaps fix(align): stitch annotated junctions like STAR; drop covered PE sub-alignments #295 (both add sj_a to window/exon blocks and stitch annotated junction halves directly) and contradicts it on three points: the sj_a type, whether the short-exon early rejection is skipped for junction halves, and how annotated non-canonical junctions are shifted back. Only fix(align): stitch annotated junctions like STAR; drop covered PE sub-alignments #295 drops covered PE sub-alignments; only aligner core: annotated-junction stitching, alignEndsType, in-recursion length penalty #146 has alignEndsType, the in-recursion length penalty, the mismatch-over-read cap, alignInsertionFlush and flagDirMap. One of the two should be rebased on the other.
Still open: #278 (being merged onto the updated #276 ), #237 , #213 . #294 is superseded : main's #307 already makes paired-end nM the pair total, which is all #294 does.
Snapshot of open pull requests that no longer merge cleanly into
main(abf2ab7), checked locally withgit merge-tree --write-tree origin/main <pr-head>for each of the 45 open non-dependabot PRs. Review order and stacking are discussed in #195; this issue only tracks the merge conflicts.22 of them conflict. Most of the churn comes from three merges: the bounded-memory BAM sort (#214, in #290), the batch-1 fixes (#289), and the retirement of CLAUDE.md (#251).
Conflicts in source code (needs a real rebase)
src/chimeric/detect.rs,src/chimeric/output.rs,tests/alignment_features.rssrc/io/bam.rs,src/io/sam.rs,src/lib.rssrc/io/bam.rsCargo.toml,DIVERGENCE.md,src/io/fastq.rsCHANGELOG.md,src/align/read_align.rsCHANGELOG.md,src/align/read_align.rsanndata#237 feat: outputanndata:Cargo.lock,src/junction/sj_output.rs,src/solo/count.rs,src/solo/mod.rsCHANGELOG.md,Cargo.toml,src/io/fastq.rsCargo.toml,src/io/fastq.rs,src/lib.rs,src/params/mod.rs,src/solo/whitelist.rsCHANGELOG.md,src/chimeric/detect.rs,src/params/mod.rs,tests/alignment_features.rssrc/align/score.rs,src/align/seed.rs,src/align/stitch.rs,src/chimeric/detect.rs,src/junction/gtf.rs,tests/parameter_surface.rsCargo.toml,src/lib.rsConflicts only in CHANGELOG, Cargo manifests, docs or tests
These are usually mechanical: keep both sides.
Cargo.toml,tests/alignment_features.rsCargo.tomlCargo.tomlCHANGELOG.mdtests/parameter_surface.rsCLAUDE.md,DIVERGENCE.mdCargo.toml,tests/alignment_features.rsCHANGELOG.md,tests/alignment_features.rstests/alignment_features.rs,tests/parameter_surface.rstests/parameter_surface.rsAlready rebased
main. Because feat(io): bound coordinate-sort memory with an external merge #214 replaced the in-memory sort, CB/UB are now filled as records leave the sort.Merge clean today: #297, #296, #295, #294, #293, #283, #274, #255, #253, #248, #243, #226, #184, #182, #179, #178, #176, #174, #165. Some of them are stacked and only clean against their own base.
Status (2026-10-09)
mainwas merged into 11 of these branches (checked boxes above), each with fmt, clippy-D warningsand the full test suite passing. A few needed more than conflict markers:--quantMode GeneCoverageadded to the--quantModevalidation main gained in feat(quant): unspliced targets in TranscriptomeSAM, splicing-status tag and GeneSplicing counts for bulk total RNA-seq #283; the DegNorm section of DIVERGENCE.md renumbered to §4.4 (main's §4.3 is the sort budget, referenced from code).test_run_mode_solo_cell_filtering_calls_cells_from_a_raw_matrix; restored.stitch_align_to_transcript; the long-read stitcher now passes one.The remaining 11 (#282, #278, #276, #272, #271, #237, #225, #213, #160, #146, #109) are left to the maintainer. Note on #146: it overlaps heavily with #295 and the parity stack (#301, #302, #304) in
stitch.rs/score.rs/seed.rs, so it is worth deciding which approach supersedes the other before rebasing it.Status (2026-10-09, after main moved to b5a70d0, #307)
Re-checked every open PR against the new main and merged it into all that conflicted, except the ones below. Each merge passes fmt, clippy
-D warningsand the full test suite (with the PR's cargo feature when it has one).MultiGzDecoder(main's GzDecoder truncates multi-member gzip input: reads are silently dropped #217 fix); main's multi-member test kept. DIVERGENCE.md section renumbered §4.4 (note: feat(degnorm): DegNorm-style transcript degradation normalization #232's DegNorm section is also §4.4; whichever lands second needs §4.5).MultiGzDecoderfallback.--genomeTransformOutput SAMnow also refuses--chimSegmentMin > 0(the PR never mapped chimeric output back; main's Port STAR's WithinBAM output (supersedes #282); PE nM is the pair's #307 WithinBAM would have mixed coordinate spaces).sj_ato window/exon blocks and stitch annotated junction halves directly) and contradicts it on three points: thesj_atype, whether the short-exon early rejection is skipped for junction halves, and how annotated non-canonical junctions are shifted back. Only fix(align): stitch annotated junctions like STAR; drop covered PE sub-alignments #295 drops covered PE sub-alignments; only aligner core: annotated-junction stitching, alignEndsType, in-recursion length penalty #146 has alignEndsType, the in-recursion length penalty, the mismatch-over-read cap, alignInsertionFlush and flagDirMap. One of the two should be rebased on the other.Still open: #278 (being merged onto the updated #276), #237, #213. #294 is superseded: main's #307 already makes paired-end nM the pair total, which is all #294 does.