Steps to Reproduce
When running the [rfdiffusion-end-to-end] pipeline (and likely others) with Nextflow + Singularity on a SLURM cluster, the LigandMpnn process fails with:
Root cause
backbone_metrics.py line 602 creates symlinks in the --filtered-output directory:
This creates a multi-level symlink chain across Nextflow work directories:
LigandMpnn work dir: backbones_filtered/ → symlink to BackboneMetrics output dir (correctly bind-mounted)
Inside that dir: each .pdb → symlink to the RFdiffusion work dir (not bind-mounted in the LigandMpnn container)
Singularity only bind-mounts the directories Nextflow explicitly stages as inputs. It does not recursively follow symlinks to mount their targets. So glob.glob finds the files (directory listing resolves), but open() fails because the symlink target is outside the container's mount namespace.
Files in backbones_filtered/ should be real copies, not symlinks, so they are self-contained within the BackboneMetrics output directory that gets staged into downstream processes.
Suggested fix
Replace line 602 with a copy instead of a symlink:
Environment
Nextflow 25.10.4
Singularity/Apptainer
SLURM scheduler
GPFS filesystem (paths accessible via both projects and 0 mount points)
Expected Behavior
No response
Actual Behavior
No response
Logs / Screenshots
Steps to Reproduce
When running the [rfdiffusion-end-to-end] pipeline (and likely others) with Nextflow + Singularity on a SLURM cluster, the LigandMpnn process fails with:
Root cause
backbone_metrics.py line 602 creates symlinks in the --filtered-output directory:
This creates a multi-level symlink chain across Nextflow work directories:
LigandMpnn work dir: backbones_filtered/ → symlink to BackboneMetrics output dir (correctly bind-mounted)
Inside that dir: each .pdb → symlink to the RFdiffusion work dir (not bind-mounted in the LigandMpnn container)
Singularity only bind-mounts the directories Nextflow explicitly stages as inputs. It does not recursively follow symlinks to mount their targets. So glob.glob finds the files (directory listing resolves), but open() fails because the symlink target is outside the container's mount namespace.
Files in backbones_filtered/ should be real copies, not symlinks, so they are self-contained within the BackboneMetrics output directory that gets staged into downstream processes.
Suggested fix
Replace line 602 with a copy instead of a symlink:
Environment
Nextflow 25.10.4
Singularity/Apptainer
SLURM scheduler
GPFS filesystem (paths accessible via both projects and 0 mount points)
Expected Behavior
No response
Actual Behavior
No response
Logs / Screenshots