Running fmriprep_v25.1.2 x Singularity via Snakemake Troubleshooting?

Hi NeuroStars! I am trying to run fmriprep 25.1.2 with Singularity using Snakemake. I continually encounter the following error message when trying to dry-run a single subject:

(snakemake) jknight@rick:/DATA_CNS/PROJECTS/EPILEPSY/machine_learning/snakemake$ snakemake --cores 1 -np
host: rick
Building DAG of jobs...
MissingInputException in rule all in file "/DATA_CNS/PROJECTS/EPILEPSY/machine_learning/snakemake/Snakefile", line 15:
Missing input files for rule all:
    affected files:
        /DATA_CNS/PROJECTS/EPILEPSY/machine_learning/deriv/fmriprep/sub-005.html
(snakemake) jknight@rick:/DATA_CNS/PROJECTS/EPILEPSY/machine_learning/snakemake$

I am under the impression there is an input/output file mismatch between the Snakefile, the .smk file and fmriprep but have struggled to find the solution. fmriprep runs normally with Singularity in the terminal, so I am sure the problem lies with Snakemake.

Below I have attached the entire code for the Snakefile, .smk and config file.

Snakefile

from os.path import join
from pathlib import Path

# Config
configfile: 'config/config.yml'

# Wildcard constraints
wildcard_constraints:
    subject = r'sub-\d{5}'

# Subject list
subjects = ['sub-005']  

# Rule all
rule all:
    input:
        expand(join(config['output_dir'], 'fmriprep/{subject}.html'), 
        subject=subjects)

# Include other rules
include: 'rules/rsfmri.smk'

rsfmri.smk

# Snakemake rules for rsfMRI preprocessing pipe

# Set rule order
ruleorder: symlink_data > symlink_description > copy_t1w_brain > fmriprep_latest

# Will copy skullstripped T1w image to gradcorrect folder 
rule copy_t1w_brain:
   input: join(config['input_dir'], 'presurfer/{subject}/{subject}_acq-MP2RAGE_proc-B1map+PreSurfer_T1w.nii.gz')
   output: join(config['input_dir'], 'gradcorrect/{subject}/anat/{subject}_acq-MP2RAGE_proc-B1map+PreSurfer_T1w.nii.gz')
   group: 'rsfmri'
   shell:
       """
       ln -s `realpath {input}` `realpath {output}`
       """

# Will mirror gradcorrect description 
rule symlink_description:
    input: join(config['input_dir'], 'gradcorrect/dataset_description.json')
    output: join(config['output_dir'], 'gradcorrect/dataset_description.json')
    group: 'rsfmri'
    shell:
        """
        ln -s `realpath {input}` `realpath {output}`
        """

# Will mirror gradcorrect data
rule symlink_data:
   input:
        desc = join(config['output_dir'], 'gradcorrect/dataset_description.json'),
        gradcorrect = join(config['input_dir'], 'gradcorrect/{subject}'),
        t1w = join(config['input_dir'], 'gradcorrect/{subject}/anat/{subject}_acq-MP2RAGE_proc-B1map+PreSurfer_T1w.nii.gz')
   output: 'logs/{subject}/symlink_data.done'
   params:
        gradcorrect = join(config['output_dir'], 'gradcorrect/{subject}')
   group: 'rsfmri'
   shell:
       """
       ln -s `realpath {input.gradcorrect}` `realpath {params.gradcorrect}`
       touch {output}
       """

# Will run fMRIprep
rule fmriprep_latest:
    input:
        freesurfer = join(config['input_dir'], 'freesurfer/{subject}/scripts/recon-all.done'),
        symlink_done = 'logs/{subject}/symlink_data.done',
        dataset_description = join(config['output_dir'], 'gradcorrect/dataset_description.json'),
    output: 
        html = join(config['output_dir'], 'fmriprep/{subject}.html'),
        done = join(config['output_dir'], 'fmriprep/{subject}.done')
    params:
        gradcorrect_dir = config['output_dir'],
        freesurfer_dir = config['input_dir'],
        fmriprep = config['containers']['fmriprep']['latest'],
        fmriprep_params = config['fmriprep_params'],
        outdir = join(config['output_dir'], 'fmriprep'),
    group: 'rsfmri'
    shell:
        """
        set -eo pipefail 
        workdir={params.outdir}/work/{wildcards.subject}
        mkdir -p $workdir

        singularity run -e {params.fmriprep} \
        {params.gradcorrect_dir}/gradcorrect {params.outdir} \
        participant --participant-label {wildcards.subject} -w $workdir \
        --fs-subjects-dir {params.freesurfer_dir}/freesurfer --nprocs 4 {params.fmriprep_params}
        
        touch {output.done}
        """

config.yml

input_dir: "/DATA_CNS/PROJECTS/EPILEPSY/7T/deriv"

output_dir: "/DATA_CNS/PROJECTS/EPILEPSY/machine_learning/deriv"

fmriprep_params: "--skip_bids_validation --skull-strip-t1w skip --fs-license-file /DATA_CNS/PROJECTS/EPILEPSY/machine_learning/code/license.txt --bids-filter-file resources/fmriprep_filter.json --ignore t2w flair --output-spaces MNI152NLin6Asym fsLR --cifti-output 91k"

containers:
  fmriprep: 
    latest: /home/rhaast/00_SOFTWARE/containers/nipreps_fmriprep_v25.1.2.sif

Thanking you in advance!
Jacob