Skip to content

PR review queue: what is ready, what is stacked, what is waiting on a decision #195

Description

@BenjaminDEMAILLE

@Psy-Fer, you asked which PRs are ready for you to review. Here is the whole open queue in one place, grouped by what it costs you to look at, with the merge order for the stacked ones.

State of the queue as of 2026-08-01: 30 open PRs from me, plus 8 Dependabot bumps. Every one of them is MERGEABLE / CLEAN against main and green on CI (10 checks; 20 on #185 and #186). Nothing here is waiting on me except where I say so below.

If you only have time for one block this week, take Block 1 (nine small independent PRs, ~1 000 lines total) or the first four of Block 3 (#173 to #176, the CellRanger correctness fixes). Both stand alone.


Block 1: ready, independent, small. Best first pass.

No dependency on each other or on anything below. Each is one self-contained change.

PR Size What it is
#166 +12 / -5 --runThreadN 1 ran on every logical core. One-line fix.
#170 +6 / -99 Drop Transcript::read_seq, a public field nothing reads (a full read copy per finalised alignment).
#171 +148 test/bench_ab.sh: interleaved A/B bench harness that drops the rounds it could not measure honestly.
#152 +88 / -2 --soloUMIfiltering MultiGeneUMI_All does what it documents. Closes #144.
#151 +185 / -2 --outBAMsortingBinsN spills the coordinate sort to disk bins.
#167 +268 / -16 Slide the splice-motif window across the junction scan. Output-neutral perf.
#169 +395 / -53 The unmapped-reason test re-implemented the logic it was testing.
#159 +342 / -15 --runMode soloCellFiltering: cell-call an existing raw matrix without re-aligning.
#157 +429 --soloCellReadStats CB writes CellReads.stats.

Block 2: ready, independent, larger. One sitting each.

PR Size What it is
#165 +564 / -13 Barcode resolution: cbMinP posterior threshold, oneExact guard, adapter-anchored geometry. Replaces the closed #150.
#149 +600 / -49 --chimMultimapNmax enumeration and --chimFilter banGenomicN.
#156 +604 / -27 EmptyDrops_CR on CellRanger's actual statistics (SGT ambient profile, libc++ sampler).
#158 +727 / -3 --soloFeatures Transcript3p, with --soloClusterCBfile.
#161 +795 / -7 --genomeType SuperTranscriptome.
#116 +810 / -22 STARlong binary plus the long-read window-coverage filter.
#160 +1032 / -19 --genomeTransformOutput SAM reports original coordinates.
#147 +1068 / -67 CLI and output parity: 31 STAR 2.7.11b parameters, plus a test that makes the parameter surface machine-checkable.
#146 +1812 / -218 Aligner core: annotated-junction stitching, alignEndsType, in-recursion genomic-length penalty. The heaviest read in the queue and the one closest to STAR's core.

Block 3: the CellRanger stack. Review in order, merge in order.

Each PR contains its parents' commits, so the diff line count GitHub shows is cumulative. The incremental change per step is 1 to 3 commits, and that is what actually needs reviewing at each step.

#173 -> #174 -> #175 -> #176 -> #178 -> #179 -> #182 -> #184
# Step Incremental Note
#173 MultiGeneUMI_CR was inert: a tied UMI goes to nobody, not everybody 2 commits Correctness fix, base of the stack
#174 --soloOutRawBarcodes Observed, a CellRanger-shaped raw matrix +1 Our raw matrix shared 0 of 27 396 entries with a real cellranger count
#175 MultiGeneUMI_CR decides ownership on corrected UMIs +1 Finishes the rule started in #173
#176 CellRanger behaviour by default on 10x geometry +3 ⚠️ changes default output on 10x
#178 --soloOutLayout CellRanger +1 ⚠️ changes output paths on 10x
#179 metrics_summary.csv under the CellRanger layout +2
#182 --soloCellFilter OrdMag, CellRanger's cell call +1 First item of #181. Rebased clean after #180 was closed
#184 Count intronic reads by default on 10x +1 ⚠️ changes default counts on 10x. Closes 30 of the 32 points vs CellRanger, measured on pbmc_1k_v3, 20 M read pairs

Three of these change default behaviour (#176, #178, #184). Those are the decisions in this block; the rest is arithmetic. If you want to reject a default change but keep the flag behind it, say so and I will invert the default in place rather than re-cutting the stack.

#180 (CellRanger .h5 without libhdf5) was closed after #177. Nothing downstream depended on it, and the stack was rebased off it.

Block 4: perf, stacked on Block 3. Read after, or take #185 alone.

PR Result Note
#185 -7% median, output-neutral Reuses cluster_seeds' window-bin map across reads. Touches only src/align/stitch.rs and rebases off the solo stack cleanly if you want it alone.
#186 +0.5% Batched prefetching MMP search, roadmap P3's lead item, whose own benchmarks claimed 2.09x. I do not recommend merging it as it stands. It is open so you can disagree with the measurement, not so it gets merged. Close it if you agree.

Block 5: waiting on you, not on me.

PR / issue What is blocked
#109 (+547 / -22) genomeGenerate via libsais. Blocked on the dependency call in #162, which has no comments yet. CONTRIBUTING asks for the issue first; #109 predates that rule. Your call on the vendored C dependency decides whether this merges or gets rewritten in-tree.
#148 (+329 / -3) CellRanger4 3' poly-A trim. You said this belongs in your deterministic SIMD Smith-Waterman library rather than in rustar. I have not touched it since. Happy to close it: say the word and it goes.

Block 6: Dependabot, no review needed.

#187, #188, #189, #190, #191, #192, #193, #194. All green, all one-file bumps (actions/setup-node, bitflags, docker/login-action, rustc-hash, actions/checkout, thiserror, docker/metadata-action, anyhow). Batch-merge whenever.


Suggested order

  1. Block 6: batch merge, clears 8 rows off the list.
  2. Block 1: nine small PRs, one pass.
  3. Block 3 in order (fix(solo): MultiGeneUMI_CR was inert — a tied UMI goes to nobody, not everybody #173 to solo: count intronic reads by default on 10x (closes 30 of the 32 points vs CellRanger, stacked on #182) #184): the CellRanger work, and where the behaviour decisions are.
  4. Block 4: perf(align): reuse cluster_seeds' window-bin map across reads (-7% median, output-neutral) #185, plus a verdict on perf(seed): batched prefetching MMP search — measured at 0.5%, not recommended #186.
  5. Block 2, by whatever you care about most. aligner core: annotated-junction stitching, alignEndsType, in-recursion length penalty #146 last, it is the largest.
  6. Block 5: Dependency discussion: libsais (vendored C via cc) for suffix-array construction #162 decides genomeGenerate: libsais suffix-array builder, selected by --limitGenomeGenerateRAM #109; one word closes clip: CellRanger4 3' poly-A trim #148.

I will keep this list updated as things merge. If a different grouping is easier to work through, tell me and I will re-cut it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions