Summary

  • Add a 328-read public HG00733 BAM/BAI fixture spanning STRC and STRCP1.
  • Add a same-input expected result from Paraphase v3.5.0.
  • Add strc_ok, which checks copy number, depth, phasing sites, haplotype classes, copy assignment, and complete variant lists.
  • Require every emitted STRC/STRCP1 label to agree with both configured identity markers: (1,1) for STRC and (2,3) for STRCP1.

The test keys haplotype comparisons by sequence. Python v3.5.0 and Rust assign the two STRC hap1/hap2 labels in opposite order while preserving the same sequences and variants.

Rationale

The Rust integration suite lacks an STRC fixture or test. It covers SMN1, AMY1A, AGAP9, and F8. The existing HG00733.json.xz came from m64076_2021 reads, while the public aligned BAM available from HPRC contains m54329U_2019 reads. I generated the v3.5.0 expectation from that public BAM to keep the sequencing campaign fixed.

The marker assertions are deliberately closed-world: an unfamiliar haplotype label can no longer fall through and count as STRC in the test.

Validation

I ran v3.5.0, v4.0.0, and current main twice on identical fixture and reference bytes. All six normalized calls matched:

  • total CN 4 and STRC CN 2
  • genome/intergenic depth 31 and region depth 71/82
  • two STRC haplotypes and one two-copy STRCP1 haplotype
  • 128 phasing sites and complete variants keyed by haplotype sequence

I found one primary MAPQ-60 alignment in each phased HG00733 assembly. Both alignments cover the full STRC and STRCP1 targets.

HG38=<GRCh38-no-alt.fasta> cargo test --workspace --all-targets
cargo test: 144 passed (5 suites, 33.77s)

Provenance

  • Source BAM: https://s3-us-west-2.amazonaws.com/human-pangenomics/working/HPRC_PLUS/HG00733/analysis/aligned_reads/hifi/GRCh38/HG00733_aligned_GRCh38_winnowmap.sorted.bam
  • Source BAM MD5: 871ee1d8f75241a9087fc08845a46c9d
  • Reference: GCA_000001405.15 GRCh38 no-alt analysis set
  • Reference FASTA MD5: 30f1a99359a5993edbf8c8bc885825a7
  • Fixture BAM SHA-256: 5921d64fc38ed81b99624b1eacfd557f28edf65b1cde624ee09fb2daf917cfc6
  • Fixture BAI SHA-256: bbde38b71970c41ad68da4c81bc299711f9a537d1f941186210254090d810a92
  • Oracle producer: Paraphase v3.5.0 commit c8016dff40d105501868719bdae0defd9937abfe
  • Oracle JSON SHA-256 before compression: 8429a32ec7f2990480f5a0803b21b0f32db891a7f6a483da347e2fcbd2680156

Scope

This PR remains test-only and changes no production code. It measures Python-to-Rust parity on one public sample. Clinical validation requires a separate study. The production abstention fix and an independent HG005 truth fixture are proposed separately in #84.