scverse / scverse/rustar-aligner
PR review queue: what is ready, what is stacked, what is waiting on a decision
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 75
- Forks
- 7
- Avg merge
- 8m
- Merged PRs (30d)
- 1
Description
@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
- Block 6: batch merge, clears 8 rows off the list.
- Block 1: nine small PRs, one pass.
- Block 3 in order (#173 to #184): the CellRanger work, and where the behaviour decisions are.
- Block 4: #185, plus a verdict on #186.
- Block 2, by whatever you care about most. #146 last, it is the largest.
- Block 5: #162 decides #109; one word closes #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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the queue in Blocks 1 and 3, then inspect the referenced pull requests in the stated order. Reviewers should use the listed dependencies, test status, benchmarks, and default-behaviour warnings to decide what can merge, what needs a decision, and whether blocked items such as #109 and #148 should proceed or close.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- documentation
- Issue type
- Documentation
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100