PR catalog
The single, consolidated record of every change carried in bwa-mem3 main on
top of upstream bwa-mem2 — its bwa-mem3 PR, a one-line description, its class,
and its upstream bwa-mem2 disposition (PR/issue and status). The narrative
What’s Different pages (correctness, performance, features, architecture
support, build & infrastructure) explain the why; this page is the flat,
scannable what.
Note — generated table; do not hand-edit between the markers
The table below is consolidated from the per-area change history (
git log --reverse --no-merges master..mainfor the change list, merged with the upstream-disposition tracking). Every PR that adds a fork-carried commit must add its row here (theFG-MAIN-TABLErule — see Contributing). “Upstream status” of fork-only means no upstream PR exists; open means an upstream PR/issue existed at implementation time but was unmerged.
Fork-carried changes
| PR | Change | Class | Upstream PR / issue | Upstream status |
|---|---|---|---|---|
| #1 | feat(arm64): make Linux aarch64 build + CI-test on every fg-main push | Architecture support | bwa-mem2#288 | open PR |
| #2 | chore: configure CodeRabbit to review PRs against fg-main | Build & infrastructure | — | fork-only |
| #3 | docs: add FG-MAIN.md documenting the fork’s relationship to upstream | Build & infrastructure | — | fork-only |
| #4 | ci: pin GitHub Actions to full-length commit SHAs | Build & infrastructure | — | fork-only |
| #5 | fix(hdr): align bwamem.h declarations with bwamem.cpp definitions | Correctness | — | fork-only |
| #6 | feat(hdr): export mem_infer_dir for external consumers | Features | — | fork-only |
| #7 | chore: move profiling globals out of main.cpp | Build & infrastructure | — | fork-only |
| #8 | feat: expose worker_alloc/worker_free, the core worker_t pre-allocation helpers | Features | — | fork-only |
| #9 | feat: split mem_sam_pe into mem_pair_resolve + thin emission wrapper | Features | — | fork-only |
| #10 | ci: pin dwgsim seed (-z 42) to stop parity-test flakiness | Build & infrastructure | — | fork-only |
| #12 | feat: –bam[=LEVEL] output flag for direct BAM emission | Features | — | fork-only |
| #13 | feat(meth): –meth + index --meth — bwameth.py-equivalent bisulfite mode | Features | — | fork-only |
| #16 | build(make): add explicit arch=avx512bw target | Architecture support | — | fork-only |
| #17 | fix: compute no_pairing 0x2 flag from the emitted alignment | Correctness | — | fork-only |
| #18 | [proto] NEON kswv mate-rescue — correctness + perf harness | Architecture support | — | fork-only |
| #19 | feat: vendor mimalloc v3.3.0 and link by default | Features | — | fork-only |
| #20 | [proto] AVX2 kswv mate-rescue — stacked on PR 18 | Architecture support | — | fork-only |
| #21 | fix(kswv): apply NEON score2-scan fixes to AVX-512BW kernel | Correctness | — | fork-only |
| #22 | fix: zero bseq1_t in kseq2bseq1 so realloc’d entries don’t carry garbage | Correctness | — | fork-only |
| #23 | test(ci): add unit-test harness, fixtures, and ARM build support | Build & infrastructure | — | fork-only |
| #24 | ci: expand workflow matrix + add canonical deep-test row | Build & infrastructure | — | fork-only |
| #26 | fix(kswv): gate AVX2 arch dispatch on !AVX512BW | Correctness | — | fork-only |
| #28 | fix(kswv): consolidate score2 plateaus per-lane to match scalar ksw_align2 | Correctness | — | fork-only |
| #29 | fix(kswv): port score2 plateau consolidation to NEON + AVX-512BW | Correctness | — | fork-only |
| #30 | fix(kswv): apply score2 plateau fix + missing filters to kswv_512_16 | Correctness | — | fork-only |
| #31 | fix(kswv): rewrite kswv_neon_16 — real SIMD kernel with correct table + score2 | Correctness | — | fork-only |
| #33 | perf(seed): lockstep SMEM batching across N reads | Performance | — | fork-only |
| #34 | test: doctest-based test framework scaffolding + Codecov | Build & infrastructure | — | fork-only |
| #35 | chore: port four nh13 lh3/bwa PRs into bwa-mem2 (-z, -u/XB, MQ, @HD order) | Features | lh3/bwa#330 | merged (lh3 only) |
| #42 | feat(mem): emit HN:i tag with total hit count per primary | Features | lh3/bwa#438 | analogous to bwa aln; no direct upstream port |
| #49 | perf(header): batch -H ingestion to fix O(n^2) header read (closes #37) | Performance | bwa-mem2#204 | open PR |
| #50 | build(make): forward user CXXFLAGS/CPPFLAGS/LDFLAGS to final link steps | Build & infrastructure | bwa-mem2#290 | open upstream PR |
| #51 | fix(kswv): guard post-loop rowMax store on nrow==0 batches | Correctness | bwa-mem2#289 | open PR (upstream covers AVX-512BW only) |
| #52 | chore(version): stamp PACKAGE_VERSION from git describe at build time | Build & infrastructure | bwa-mem2#283, bwa-mem2#284 | open issue + open PR |
| #53 | chore: normalize CRLF line endings to LF (#43) | Build & infrastructure | — | fork-only |
| #54 | fix(sam): sanitize whitespace in -R when embedding into @PG CL: field | Correctness | bwa-mem2#293 | open issue |
| #55 | fix(smem): size SMEM buffers from observed max read length (closes #44) | Correctness | bwa-mem2#238, bwa-mem2#210 | PR closed without merge; issue open |
| #56 | feat(mapq): add –supp-rep-hard-cap opt-in supp MAPQ rescoring | Features | bwa-mem2#260 | open issue |
| #57 | feat(index): libsais-based memory-bounded FM-index construction | Performance | — | fork-only |
| #58 | perf: consolidated mapping speedups (ksw2, SMEM, SAL, SAM) | Performance | — | fork-only |
| #59 | feat(makefile): parameterize PGO targets by arch + profile dir | Build & infrastructure | — | fork-only |
| #60 | feat(cli): wire up –help across commands; add -h to top-level and index | Features | — | fork-only |
| #63 | ci(proto-neon-kswv): split into fan-out/fan-in jobs with caching | Build & infrastructure | — | fork-only |
| #65 | feat(shm): port bwa shm from bwa-mem v1 | Features | — | fork-only (v1 feature port) |
| #67 | feat(shm): add bwa-mem2 shm --meth for symmetric meth UX | Features | — | fork-only |
| #68 | chore: rename shell vars BWAMEM2/BWA_MEM2[*] to BWAMEM3/BWA_MEM3[*] | Build & infrastructure | — | fork-only |
| #70 | perf(kswv): add per-strip L1 prefetches to all u8/16 kernels | Performance | — | fork-only |
| #71 | docs: add comprehensive mdbook on Read the Docs | Build & infrastructure | — | fork-only |
| #72 | fix(test/meth): alias bwa-mem2 -> bwa-mem3 on PATH for bwameth.py oracle | Build & infrastructure | — | fork-only |
| #73 | fix(fmi): parenthesize SA_COMPX_MASK precedence in sampled-SA prefetch | Correctness | — | fork-only |
| #74 | fix(bntseq): bound .alt parse buffer to prevent stack overflow | Correctness | — | fork-only |
| #75 | perf(fmi): bump SMEM_LOCKSTEP_N from 8 to 16 | Performance | — | fork-only |
| #76 | feat(bns): convert mem_matesw_batch_{pre,post} to bns_fetch_seq_v2 | Architecture support | — | fork-only |
| #77 | perf(ungapped): closed-form HIT for total_mis == 0 | Performance | — | fork-only |
| #78 | perf(ksort): replace per-call malloc with on-stack buffer for small n | Performance | — | fork-only |
| #79 | Update index.md | Build & infrastructure | — | fork-only |
| #80 | perf(libsais_build): skip wasted zero-init on unpack + SA buffers | Performance | — | fork-only |
| #81 | fix(profiling): clamp display_stats nthreads to LIM_C | Correctness | — | fork-only |
| #82 | feat(shm): serialize /bwactl RMW with a POSIX named semaphore | Features | — | fork-only |
| #83 | feat(simd): replace multi-binary execv launcher with single-binary in-process dispatch | Architecture support | — | fork-only |
| #84 | perf(build): default x86 single-binary baseline to avx2 (was sse41) | Architecture support | — | fork-only |
| #85 | fix(matesw): copy ref slice before ksw_align2 to avoid SIGSEGV on shm-backed ref_string | Correctness | — | fork-only |
| #86 | perf(x86): cap avx512bw autovec at 256-bit; bwa_shm /dev/shm preflight | Features | — | fork-only |
| #88 | perf(fmi): inline backwardExt to recover gcc 12+ wall-clock regression | Performance | — | fork-only |
| #89 | ci: migrate parity tests from dwgsim/phiX174 to holodeck/chr22 | Build & infrastructure | — | fork-only |
| #90 | feat(meth): emit Bismark-compatible XR/XG/XM auxiliary tags | Features | — | fork-only |
| #93 | docs(install): list autoconf/automake/libomp/zlib system prereqs | Build & infrastructure | — | fork-only |
| #94 | docs(install): fix RHEL/Fedora package name pkgconfig → pkgconf-pkg-config | Build & infrastructure | — | fork-only |
| #95 | feat(simd): add SIMD host-floor precheck for multi-arch deployment | Features | — | fork-only |
| #96 | docs: pre-release documentation pass for v0.2.0-pre | Build & infrastructure | — | fork-only |
| #97 | chore(release): prep v0.2.0 release notes and metadata | Build & infrastructure | — | fork-only |
| #123 | Stable tie-breaks + pdqsort | Performance | — | fork-only |
| #128 | FASTQ reader fast path | Performance | — | fork-only |
| #140 | Recover 8-bit banded SW (≥128 bp) | Performance | — | fork-only |
| #141 | Gotoh gaps from H | Performance | — | fork-only |
| #143 | Drop dead qlen[] param | Performance | — | fork-only |
| #144 | Long-read kernel parity test | Performance | — | fork-only |
| #147 | Short-circuit re-baseline scan | Performance | — | fork-only |
| #148 | Remove dead SW code paths | Performance | — | fork-only |
| #149 | Vectorize epilogue side-channel | Performance | — | fork-only |
| #150 | Bound getScores prefetch reads | Performance | — | fork-only |
| #151 | Unsigned 8-bit h0-prefix seed | Performance | — | fork-only |
| #152 | --profile stage timing | Performance | — | fork-only |
| #153 | zlib-ng inflate + 3rd worker | Performance | — | fork-only |
| #157 | Right-size SA staging buffers | Performance | — | fork-only |
| #158 | gtle contract test | Performance | — | fork-only |
| #160 | NEON SW tuning | Performance | — | fork-only |
| #161 | AVX2 SW tuning | Performance | — | fork-only |
| #162 | AVX2 16-bit kswv256_16 | Performance | — | fork-only |
| #164 | NEON movemask parity test | Performance | — | fork-only |
Upstream issues tracked but not yet fixed
These upstream issues are tracked in the bwa-mem3 issue list but do not yet have
a corresponding fix in main:
| Issue | Upstream reference | Notes |
|---|---|---|
| Split-alignment evidence loss vs bwa 0.7.17 | bwa-mem2#273 | issue #47 — under investigation |
| MAPQ/coordinate parity vs bwa mem 0.7.18 | bwa-mem2#262, bwa-mem2#246, bwa-mem2#239 | issue #48 — tracking only |
See also: What’s Different — Overview · Correctness fixes · Performance improvements · Features · Architecture support · Build & infrastructure