Skip to content

Move SigProfiler to the corrected CHM13-T2T payload (SPMG 7894689) - #216

Merged
ljwharbers merged 4 commits into
devfrom
fix/sigprofiler-chm13-payload
Oct 2, 2026
Merged

ljwharbers merged 4 commits into
devfrom
fix/sigprofiler-chm13-payload

Conversation

@ljwharbers

@ljwharbers ljwharbers commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

What and why

A user reported that --download_sigprofiler_genome on CHM13 fails in SIGPROFILER_INSTALL with CHM13-T2T failed the SigProfilerMatrixGenerator checksum verification.

Cause: on 2026-09-25 the CHM13-T2T archive at chm13_release_2026-08/ was replaced by the rebuild that fixes SigProfilerMatrixGenerator#251, which no longer drops inclusive transcript-end bases. The new archive (sha256 fe68e840…dc1d) matches the per-chromosome checksums in #250 commit 7894689. The pipeline image 1.3.6-chm13-28a9ce8 still expected the old ones, so every fresh install failed. The checksum assert did its job.

Already done outside this PR:

  • Tier-1/Globus: the corrected archive now lives at the versioned path chm13_release_2026-09/, and the original (9fe0d9e7…e0ff) is back at chm13_release_2026-08/. Current dev can download again, and older commits stay reproducible. Both URLs were checked over HTTPS.
  • Image: ghcr.io/ljwharbers/sigprofiler:1.3.6-chm13-7894689 and oras://ghcr.io/ljwharbers/sigprofiler-sif:1.3.6-chm13-7894689 were built from the fork container/chm13 (run). The smoke test now asserts the new chr1 checksum, and in the SIF CHECKSUMS["CHM13-T2T"]["1"] reads 8683547c….

This PR:

  • switches the image in SIGPROFILER_INSTALL, SIGPROFILER_MATRIXGENERATOR and SIGPROFILER_ASSIGNMENT to 1.3.6-chm13-7894689
  • points the CHM13 sigprofiler_genome_url at chm13_release_2026-09
  • adds a CHANGELOG entry

CHM13 volumes installed before this change no longer pass verification with the new image and must be reinstalled. The payload change is about 0.1% of bases, almost all strand-label recoding (one strand → both strands transcribed). On real samples only the transcribed-strand matrices move, and only slightly; SBS96 and the COSMIC fit are unchanged (results below).

Validation

All runs on Mindwell with Apptainer, PR head f7a45c4. CI does not cover this: the test profile sets skip_signatures = true.

  • Standalone download test (Slurm job 11649322, 1.5 min). Runs the real PREPARE_SIGNATURES with download_genome = true → SIGNATURES_BCFTOOLS_VIEW → SIGPROFILER_MATRIXGENERATOR on BL1 (ONT) and FL11 (PacBio). SIGPROFILER_INSTALL downloaded chm13_release_2026-09 and passed the checksum assert: 24 chromosome files, chr1 8683547c….

  • Matrices vs the 2026-09-04 run on the old payload. SBS96, DBS78 and ID83 are byte-identical for both samples. SBS288 and SBS384 differ, as expected:

    Sample SNVs Moved strand class B (both strands) T U N
    BL1_ont 24,817 21 (0.08%) 802 → 820 6374 → 6366 6081 → 6070 11560 → 11561
    FL11_newpb 28,435 21 (0.07%) 901 → 921 7490 → 7474 6779 → 6774 13265 → 13266
  • COSMIC v3.6 SBS96 fit of BL1 with the new image (Slurm job 11649326). Assignment_Solution_Activities.txt is byte-identical to the old fit: SBS1 2942, SBS5 21875.

  • CHANGELOG PR number filled in.

Review follow-up (1d3b7c7)

The new image also carries upstream's corrected GRCh38 payload. The AlexandrovLab FTP has served it as GRCh38.tar.gz since 2026-09-25; the old archive is now GRCh38_Legacy. So GRCh38 volumes installed before this PR must be reinstalled too. The old image's GRCh38 download is presumably already broken on dev, since it expects the old checksums.

New SIGPROFILER_VERIFY step: it checks a --sigprofiler_genome_dir volume once, before any sample work, and stops with the checksum table and reinstall instructions. The docs, schema help_text and CHANGELOG now cover both genomes. Slurm array 11649347, 5/5 pass:

  • nf-test modules/local/sigprofiler/verify (--profile=+singularity), 3/3 pass. This new small test runs in PR CI: stale GRCh38 and CHM13-T2T volumes are rejected, and the report lists the chr1 MD5 the image expects for each.
  • CHM13 volume installed from chm13_release_2026-09, passed with --sigprofiler_genome_dir: verified; BL1 SBS96/SBS384/DBS78/ID83 identical to the download-test run.
  • CHM13 chm13_release_2026-08 volume: SIGPROFILER_VERIFY stops the run with the reinstall message; no SIGPROFILER_MATRIXGENERATOR task runs.
  • Old (pre-2026-09-25) GRCh38 volume: stopped the same way.
  • --download_sigprofiler_genome GRCh38 from the FTP with the new image: install verified (chr1 570ba2c0…). C8 (GRCh38, 147 PASS calls), new image + new payload vs old image + old payload: SBS96, SBS288, SBS384 and ID83 identical; no DBS in this sample. That is a small sample, so it is only a light check of the GRCh38 strand matrices.

PR checklist

  • This comment contains a description of changes (with reason).
  • Make sure your code lints (nf-core pipelines lint): 0 failures. The 12 warnings are pre-existing (local subworkflows without meta.yml). prek run --all-files passes.
  • CHANGELOG.md is updated.

🤖 Generated with Claude Code

ljwharbers and others added 2 commits October 2, 2026 14:56
The CHM13 archive at chm13_release_2026-08 was replaced by the rebuild that
fixes SigProfilerMatrixGenerator#251 (sha256 fe68e840...dc1d), while the
1.3.6-chm13-28a9ce8 image still checks the superseded checksums, so
--download_sigprofiler_genome failed verification in SIGPROFILER_INSTALL.

Use the 1.3.6-chm13-7894689 image, which carries the new checksums, and fetch
the payload from the versioned chm13_release_2026-09 path, so the 2026-08
path can keep serving the original archive for older commits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ljwharbers
ljwharbers marked this pull request as ready for review October 2, 2026 13:26
? 'oras://ghcr.io/ljwharbers/sigprofiler-sif:1.3.6-chm13-28a9ce8'
: 'ghcr.io/ljwharbers/sigprofiler:1.3.6-chm13-28a9ce8'}"
? 'oras://ghcr.io/ljwharbers/sigprofiler-sif:1.3.6-chm13-7894689'
: 'ghcr.io/ljwharbers/sigprofiler:1.3.6-chm13-7894689'}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Old CHM13 volumes passed with --sigprofiler_genome_dir are not caught. The PR says volumes installed before this change "no longer pass verification with the new image and must be reinstalled". The only verification, though, is the is_genome_installed assert in SIGPROFILER_INSTALL. When the user passes --sigprofiler_genome_dir, PREPARE_SIGNATURES (subworkflows/local/prepare_signatures.nf:34-41) only checks that tsb/<genome>/ exists and holds 24 .txt files. That includes the published <outdir>/cache/sigprofiler/volume from earlier runs, which docs/usage.md tells users to reuse. A stale chm13_release_2026-08 volume passes that check and goes straight to this image, with one of two results:

  • this process fails late with an unclear checksum error from the tool, or
  • the tool doesn't re-verify, and the strand matrices (SBS288/SBS384 etc.) are built from the old payload without any warning.

Neither result is documented outside the CHANGELOG. Suggested fixes:

  • run the same rgm.ReferenceGenomeManager(...).is_genome_installed(genome) check on the user-supplied volume, either in a small validation step or at the top of this script, so a stale volume fails up front with a "reinstall with --download_sigprofiler_genome" message
  • at the least, add a note to the --sigprofiler_genome_dir help_text in nextflow_schema.json and to docs/usage.md saying that CHM13 volumes installed before this release must be reinstalled

? 'oras://ghcr.io/ljwharbers/sigprofiler-sif:1.3.6-chm13-28a9ce8'
: 'ghcr.io/ljwharbers/sigprofiler:1.3.6-chm13-28a9ce8'}"
? 'oras://ghcr.io/ljwharbers/sigprofiler-sif:1.3.6-chm13-7894689'
: 'ghcr.io/ljwharbers/sigprofiler:1.3.6-chm13-7894689'}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image registry: REVIEW.md asks for custom images to use the oras://docker.io/...-sif / docker.io/... pair, with Docker Hub rather than ghcr for large Apptainer images. This PR builds and pins new 1.3.6-chm13-7894689 tags on ghcr.io in all three SigProfiler modules (install, matrixgenerator, assignment). Since new images are being published anyway, please push them to Docker Hub too and point the singularity/docker ternary at oras://docker.io/ljwharbers/sigprofiler-sif:1.3.6-chm13-7894689 / docker.io/ljwharbers/sigprofiler:1.3.6-chm13-7894689. If that changes, the ghcr.io/ljwharbers/sigprofiler mention in docs/usage.md:392 needs the same update.

Comment thread conf/igenomes.config
// not yet hosted on the AlexandrovLab FTP, so it is fetched from the IntGenomicsLab Globus collection
sigprofiler_genome : "CHM13-T2T",
sigprofiler_genome_url : "https://g-608c0c.273595.03c0.data.globus.org/chm13_release_2026-08/CHM13-T2T.tar.gz",
sigprofiler_genome_url : "https://g-608c0c.273595.03c0.data.globus.org/chm13_release_2026-09/CHM13-T2T.tar.gz",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No CI coverage: No small nf-test runs this code. The test profile sets skip_signatures = true, and all tests are GRCh38 anyway. So CI checks neither the new URL, the new image tags, nor the image's embedded CHM13 checksums against this payload. Before merging, please run the Slurm test array or the standalone CHM13 --download_sigprofiler_genome run listed in the PR's to-do, plus the old-vs-new BL1 matrix/fit comparison. Please also run a GRCh38 signatures run on the new image: the image changed for every genome, not just CHM13, and nothing here tests the GRCh38 checksums in the rebuilt SPMG fork.

@claude

claude Bot commented Oct 2, 2026

Copy link
Copy Markdown

Automated review: 3 findings, posted inline.

  1. Stale CHM13 volumes aren't caught. A volume installed before this change, passed with --sigprofiler_genome_dir, only gets the directory and file-count check in PREPARE_SIGNATURES. There's no checksum check, so it either fails late in SIGPROFILER_MATRIXGENERATOR or silently uses the old payload. The reinstall requirement is also missing from docs/usage.md and the schema help_text.
  2. Registry. The new image tags are on ghcr, but REVIEW.md asks for the Docker Hub oras://docker.io/...-sif / docker.io/... pair.
  3. No CI coverage. No small test runs SigProfiler (skip_signatures = true).

For a human reviewer to run (I can't run tests, so none of this is verified):

  • the Slurm test array or a standalone CHM13 --download_sigprofiler_genome run with the new image and URL, to confirm the install checksum assert passes
  • a GRCh38 signatures run on the rebuilt image
  • the BL1 old-vs-new comparison: SBS96 and the COSMIC fit should be unchanged, with only the strand matrices differing

@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

nf-core pipelines lint overall result: Passed ✅ ⚠️

Posted for pipeline commit f20a2a2

+| ✅ 219 tests passed       |+
#| ❔  21 tests were ignored |#
#| ❔   1 tests had warnings |#
!| ❗  40 tests had warnings |!
Details

❗ Test warnings:

  • nextflow_config - Config manifest.version should end in dev: 1.1.0
  • pipeline_todos - TODO string in nextflow.config: Specify your pipeline's command line flags
  • pipeline_todos - TODO string in nextflow.config: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0
  • pipeline_todos - TODO string in README.md: Include a figure that guides the user through the major workflow steps. Many nf-core
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in lint_log.txt: Named file extensions MUST be emitted for ALL output channels
  • pipeline_todos - TODO string in lint_log.txt: List additional required output channels/values here
  • pipeline_todos - TODO string in meta.yml: #Add a description of the module and list keywords
  • pipeline_todos - TODO string in methods_description_template.yml: #Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline
  • pipeline_todos - TODO string in nextflow.config: Specify any additional parameters here
  • pipeline_todos - TODO string in base.config: Check the defaults for all processes
  • pipeline_todos - TODO string in base.config: Customise requirements for specific processes.
  • pipeline_todos - TODO string in CONTRIBUTING.md: Add any pipeline specific contribution guidelines here, such as coding styles, procedures, checklists etc.
  • schema_description - Ungrouped param in schema: skip_modkit
  • schema_description - No description provided in schema for parameter: generate_gvcf
  • schema_description - No description provided in schema for parameter: autocorrelation
  • schema_description - No description provided in schema for parameter: vep_custom
  • schema_description - No description provided in schema for parameter: vep_custom_tbi
  • schema_description - No description provided in schema for parameter: severus_minsupport
  • schema_description - No description provided in schema for parameter: wakhan_chroms
  • local_component_structure - prepare_vep_plugins.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure
  • local_component_structure - deepsomatic.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure
  • local_component_structure - small_variant_consensus.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure
  • local_component_structure - prepare_reference_files.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure
  • local_component_structure - prepare_annotation.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure
  • local_component_structure - prepare_signatures.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure
  • local_component_structure - phasing_haplotyping.nf in subworkflows/local should be moved to a SUBWORKFLOW_NAME/main.nf structure

❔ Tests ignored:

  • files_exist - File is ignored: CODE_OF_CONDUCT.md
  • files_exist - File is ignored: assets/nf-core-lrsomatic_logo_light.png
  • files_exist - File is ignored: docs/images/nf-core-lrsomatic_logo_light.png
  • files_exist - File is ignored: docs/images/nf-core-lrsomatic_logo_dark.png
  • files_exist - File is ignored: .github/ISSUE_TEMPLATE/config.yml
  • files_exist - File is ignored: .github/workflows/awstest.yml
  • files_exist - File is ignored: .github/workflows/awsfulltest.yml
  • files_exist - File is ignored: .github/CONTRIBUTING.md
  • nextflow_config - Config variable ignored: manifest.name
  • nextflow_config - Config variable ignored: manifest.homePage
  • files_unchanged - File ignored due to lint config: CODE_OF_CONDUCT.md
  • files_unchanged - File ignored due to lint config: .github/ISSUE_TEMPLATE/bug_report.yml
  • files_unchanged - File ignored due to lint config: .github/PULL_REQUEST_TEMPLATE.md
  • files_unchanged - File ignored due to lint config: .github/workflows/branch.yml
  • files_unchanged - File ignored due to lint config: .github/workflows/linting.yml
  • files_unchanged - File ignored due to lint config: assets/email_template.txt
  • files_unchanged - File ignored due to lint config: assets/nf-core-lrsomatic_logo_light.png
  • files_unchanged - File ignored due to lint config: docs/images/nf-core-lrsomatic_logo_light.png
  • files_unchanged - File ignored due to lint config: docs/images/nf-core-lrsomatic_logo_dark.png
  • files_unchanged - File ignored due to lint config: docs/README.md
  • actions_awstest - 'awstest.yml' workflow not found: /home/runner/work/lrsomatic/lrsomatic/.github/workflows/awstest.yml

❔ Tests fixed:

✅ Tests passed:

Run details

  • nf-core/tools version 4.1.0
  • Run at 2026-10-02 14:10:41

@AmberVerhasselt

Copy link
Copy Markdown
Contributor

Checked this against the failing runs on our side (Mindwell jobs 11647055 and 11648551, both failing SIGPROFILER_INSTALL (CHM13-T2T) on checksum verification). The diagnosis holds:

  • chm13_release_2026-08 now serves the original archive again (sha256 9fe0d9e7…e0ff), and its 24 per-chromosome MD5s match the old image and our previously installed volume.
  • chm13_release_2026-09 serves fe68e840…dc1d, and its 24 MD5s exactly match the "actual" values in our failed logs and the CHM13-T2T table in SPMG 7894689.
  • On chr1, the old and new payloads differ only in transcriptional-strand bits (mostly U/T → B, a few N → T/U). There are no base changes, which fits only SBS288/384 moving.

The validation in the description looks good. Fine to merge once the stale --sigprofiler_genome_dir volume handling (finding 1) and the GRCh38 signatures run on the new image (finding 3) are done. We won't be moving the images to Docker Hub (finding 2), so that thread can be closed.

Addresses review points 1 and 3 on #216.

SIGPROFILER_MATRIXGENERATOR already re-checks the payload for every sample
and fails each task with a generic checksum error. The new SIGPROFILER_VERIFY
step checks a --sigprofiler_genome_dir volume once, before any sample work,
and stops with the checksum table and reinstall instructions.

The 7894689 image also carries upstream's corrected GRCh38 payload (the
AlexandrovLab FTP has served it as GRCh38.tar.gz since 2026-09-25; the old
one is GRCh38_Legacy), so GRCh38 volumes installed before this change need
reinstalling as well. The docs, schema help_text and CHANGELOG now say so.

The new small-tagged module test feeds stale GRCh38 and CHM13-T2T volumes
and checks that each is rejected, with the chr1 checksum the image expects,
so CI ties the pinned image to the payload revisions it downloads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ljwharbers

Copy link
Copy Markdown
Collaborator Author

@claude review

// No conda: the image uses CHM13-T2T forks of SigProfilerMatrixGenerator (#250) and SigProfilerAssignment; see meta.yml
container "${(workflow.containerEngine == 'singularity' || workflow.containerEngine == 'apptainer') && !task.ext.singularity_pull_docker_container
? 'oras://ghcr.io/ljwharbers/sigprofiler-sif:1.3.6-chm13-7894689'
: 'ghcr.io/ljwharbers/sigprofiler:1.3.6-chm13-7894689'}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registry convention (still open from the first review). The new SIGPROFILER_VERIFY module and the three bumped modules still pull the custom image from ghcr.io. REVIEW.md asks for the oras://docker.io/...-sif / docker.io/... pair for custom images, and says "Docker Hub, not ghcr, for large Apptainer images". This bundled SigProfiler SIF is one of those large images. Please push 1.3.6-chm13-7894689 to Docker Hub and point all four modules there, or say in the PR why ghcr is acceptable here.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We won't address this in this PR. The SigProfiler image stays on ghcr (ghcr.io/ljwharbers/sigprofiler / oras://ghcr.io/ljwharbers/sigprofiler-sif), the registry it has used since #190.

Comment on lines +33 to +40
if not manager.is_genome_installed("${genome}"):
manager.print_genome_checksum_verification_report("${genome}")
sys.exit(
"ERROR: the ${genome} payload in --sigprofiler_genome_dir does not match the checksums of this pipeline's "
"SigProfilerMatrixGenerator. GRCh38 and CHM13-T2T payloads installed before lrsomatic PR #216 are a "
"superseded revision. Reinstall it with --download_sigprofiler_genome (published to "
"<outdir>/cache/sigprofiler/volume) and pass that directory on later runs."
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error message can name the wrong cause. is_genome_installed returns false for any mismatch: a stale revision, a truncated or corrupted chromosome file, or a genome whose checksums this image doesn't register (for example a non-default --sigprofiler_genome). The message always says the payload "is a superseded revision" from before PR #216. A user with a damaged download, or on a genome that isn't GRCh38 or CHM13-T2T, gets the wrong diagnosis.

Users also see a release, not a PR number. Please word the message (and the matching schema help_text) by cause, for example "does not match the checksums … (stale revision from lrsomatic < 1.2.0, or an incomplete/corrupted install)". If unregistered genomes are meant to be supported, check genome in CHECKSUMS separately.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in f20a2a2. The check now reports one of three causes, using rgm.CHECKSUMS from the pinned image:

  • Genome with no checksums in the image (genome not in CHECKSUMS, tested separately): "this pipeline's SigProfilerMatrixGenerator has no checksums for (registered: …). Set --sigprofiler_genome to one of them or use --skip_signatures."
  • Missing files: "is an incomplete install: N of M chromosome files are missing (…)".
  • All files present, checksums differ: "does not match the checksums … Either it is a stale payload (GRCh38 and CHM13-T2T installed for lrsomatic < 1.2.0 are a superseded revision) or the copy is corrupted."

The reinstall instructions follow in each case. The schema help_text and docs/usage.md now say "lrsomatic < 1.2.0" instead of the PR number, and cover the corrupted/incomplete case.

The module test now covers all three cases. The new mismatch case uses a fixture with all 24 CHM13-T2T files present but empty. The assertions match only the rendered message. Nextflow echoes the script source when a task fails, so plain substrings such as "Reinstall it with" also matched the template text. Results: 5/5 pass under apptainer (Slurm job 11649374).

genome
)
// Hand on the user's directory itself, released only once it has been verified
sigprofiler_volume = SIGPROFILER_VERIFY.out.verified.map { _verified -> volume_dir }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No small test covers this wiring or the image bump. The new small module test only checks the rejection path on a 1-file fixture. Nothing in PR CI runs:

  • the success path, where verified is emitted and this .map hands volume_dir to SIGPROFILER_MATRIXGENERATOR as a value channel, so every sample gets it;
  • PREPARE_SIGNATURES itself;
  • the new image in SIGPROFILER_INSTALL, SIGPROFILER_MATRIXGENERATOR and SIGPROFILER_ASSIGNMENT.

That's because conf/test.config sets skip_signatures = true. The Slurm results in the description are the only evidence for these paths. Please confirm they were run on the current head 1d3b7c7 with more than one sample using --sigprofiler_genome_dir. The GRCh38 C8 check covered only one sample. A stub-mode pipeline or subworkflow test with signatures on would catch future regressions in this wiring.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added stub tests tagged small in f20a2a2, so PR CI now runs them:

  • subworkflows/local/tests/prepare_signatures.nf.test
    • --sigprofiler_genome_dir branch: SIGPROFILER_VERIFY runs and SIGPROFILER_INSTALL does not. volume emits exactly one item, the user's directory itself.
    • Download branch: the reverse.
  • modules/local/sigprofiler/matrixgenerator/tests/main.nf.test: PREPARE_SIGNATURES runs in setup. Its volume is mapped exactly as in workflows/lrsomatic.nf:909 and given to two samples. Both produce sbs96, so the volume reaches every sample.
  • modules/local/sigprofiler/assignment/tests/main.nf.test: stub fit of a single sample.

In the matrixgenerator and assignment tests the versions eval runs inside the pinned image, so the docker and singularity shards each pull 1.3.6-chm13-7894689. SIGPROFILER_INSTALL uses the same tag, and its stub runs in that image too. All 9 SigProfiler tests pass under apptainer (Slurm job 11649374). Docker is checked by CI on this push.

I have not yet run the full Slurm pipeline array on the new head (multi-sample, --sigprofiler_genome_dir, CHM13 and GRCh38). Only test code and the error-message strings changed since 1d3b7c7. That run is still to be done.

@claude

claude Bot commented Oct 2, 2026

Copy link
Copy Markdown

Automated re-review of 1d3b7c7: 3 findings, posted inline.

  1. Registry (still open): the SigProfiler image, including the new SIGPROFILER_VERIFY, is still on ghcr rather than the Docker Hub pair that REVIEW.md asks for.
  2. SIGPROFILER_VERIFY error text: every checksum mismatch is reported as a pre-Move SigProfiler to the corrected CHM13-T2T payload (SPMG 7894689) #216 superseded payload. That is wrong for a damaged install or an unregistered genome, and the text points users to a PR number rather than a release.
  3. CI coverage: PR CI has no small test for the success path of SIGPROFILER_VERIFY, the PREPARE_SIGNATURES wiring, or the image bump in INSTALL, MATRIXGENERATOR and ASSIGNMENT (skip_signatures = true).

The first review's stale-volume finding is addressed by SIGPROFILER_VERIFY.

A human needs to check these (I can't run tests, so none of this is verified):

  • The Slurm test array on the current head 1d3b7c7, including a multi-sample run with --sigprofiler_genome_dir for CHM13 and GRCh38.
  • That the new module test (modules/local/sigprofiler/verify) passes under the docker profile in CI. The PR reports only +singularity. The test also relies on the chr1 MD5 showing up in the Nextflow error output.

🤖 Generated with Claude Code

… chain

SIGPROFILER_VERIFY reported every failed check as a superseded payload from
before PR #216. It now tells apart a genome the image has no checksums for,
an incomplete install (lists the missing chromosome files), and a checksum
mismatch (stale payload from lrsomatic < 1.2.0, or a corrupted copy). The
schema help_text and usage docs say the same.

PR CI ran nothing of the signatures step (conf/test.config skips it). New
stub tests, all tagged small:
- PREPARE_SIGNATURES: the --sigprofiler_genome_dir branch verifies and hands
  on the user's directory; the download branch installs.
- SIGPROFILER_MATRIXGENERATOR: the volume from PREPARE_SIGNATURES, wired as in
  workflows/lrsomatic.nf, reaches two samples.
- SIGPROFILER_ASSIGNMENT: runs in the pinned image.
The versions evals run inside the image, so the image tag is checked under
each CI profile. The verify module test gains the mismatch and unregistered
genome cases and asserts on rendered text only, since Nextflow echoes the
script source on failure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ljwharbers

Copy link
Copy Markdown
Collaborator Author

@claude review

else:
cause = (
"does not match the checksums of this pipeline's SigProfilerMatrixGenerator. Either it is a stale "
"payload (GRCh38 and CHM13-T2T installed for lrsomatic < 1.2.0 are a superseded revision) or the "

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The error points at the wrong version. No released lrsomatic has a SigProfiler payload. Signatures came in with #190, under v1.2.0dev, and manifest.version is still 1.1.0. So "installed for lrsomatic < 1.2.0" describes no real volume.

Stale volumes come from two places: 1.2.0dev builds from before #216 (image 1.3.6-chm13-28a9ce8), and a standalone SigProfilerMatrixGenerator install GRCh38 run before 2026-09-25. Someone who installed their volume from a dev commit last month thinks of it as 1.2.0. They will read this message as "not stale, so my copy must be corrupted", which is the wrong cause.

The same wording is in the sigprofiler_genome_dir help_text in nextflow_schema.json (line 484). Something like this would fit both places:

Suggested change
"payload (GRCh38 and CHM13-T2T installed for lrsomatic < 1.2.0 are a superseded revision) or the "
"payload (GRCh38 and CHM13-T2T volumes installed before SigProfilerMatrixGenerator 7894689 / lrsomatic "
"#216, i.e. with an earlier 1.2.0dev build or an upstream GRCh38 install before 2026-09-25, are a "
"superseded revision) or the "

@claude

claude Bot commented Oct 2, 2026

Copy link
Copy Markdown

Automated re-review of f20a2a2: 1 finding, posted inline.

  1. Version in the SIGPROFILER_VERIFY error and the sigprofiler_genome_dir help_text: both say stale volumes come from "lrsomatic < 1.2.0". No released version had SigProfiler. Stale volumes come from earlier 1.2.0dev builds or from upstream GRCh38 installs made before 2026-09-25.

The earlier findings are now addressed:

  • The error message now names the cause.
  • small stub tests cover PREPARE_SIGNATURES and the volume reaching every sample.
  • The Docker Hub thread was closed by the maintainers.

A human needs to check these (I can't run tests, so none of this is verified):

  • That the modules/local/sigprofiler/verify tests pass under the docker profile in PR CI. The PR reports only +singularity. The asserts depend on the exact upstream text: the order of the CHECKSUMS keys (X, Y)., Y, MT)., (registered: CHM13-T2T, GRCh37,) and on the checksum report printing the chr1 MD5.
  • The non-stub success path of SIGPROFILER_VERIFY on a real volume is still covered only by the Slurm runs in the description. Please run them again on f20a2a2, since the error branches changed after 1d3b7c7.

🤖 Generated with Claude Code

@ljwharbers
ljwharbers merged commit b9e6800 into dev Oct 2, 2026
19 checks passed
@ljwharbers
ljwharbers deleted the fix/sigprofiler-chm13-payload branch October 2, 2026 14:20
ljwharbers added a commit that referenced this pull request Oct 2, 2026
Brings in #216 (SigProfiler CHM13 payload fix).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants