Find a failure by the ID it prints
When a run fails, the job output names an ID that starts with BSSW-. Find that ID below, or choose the symptom you see.
BSSW-CLEANUP-CHILD: A job step did not stop during cleanup
Code: BSSW-CLEANUP-CHILD
Signal
The job prints BSSW-CLEANUP-CHILD and exits with code 79. When the job ended, at least one job step did not stop within the cleanup time limit. The script removes any success file.
Likely causes
A step ignored the polite stop and the forced stop, or the cleanup time limit is shorter than the step needs. The forced-stop path is Designed, not run: it has not been exercised on a cluster.
Recovery steps
- Check for leftover steps with
squeue -u $USERandsacct -j <job id>. - If steps need longer to stop, raise
CLEANUP_TIMEOUT(1 to 60 seconds). - Read the coordinator and worker logs in the run folder for a step that hangs on exit.
Warning: Do not treat a run that ended with this code as a success, even if results.json exists.
Verify the recovery
A new run ends with exit code 0 and no leftover steps.
Escalate
Report the sanitized logs through support.
BSSW-PREQ-COMMAND: A required helper command is missing
Code: BSSW-PREQ-COMMAND
Signal
The job, or container/acquire.sh, prints BSSW-PREQ-COMMAND and exits with code 66. The SHA-256 command the workflow uses (sha256sum by default) is not available, or python3 is missing when you run acquire.sh.
Likely causes
The command is not on the compute node’s path, or your center provides it under another name or module.
Recovery steps
- Run
command -v sha256suminside a job on the compute node. - If your center uses another command, set
BSSW_SHA256_CMDto it. It must print the digest first, then the file name. - For
acquire.sh, load a module that providespython3, then run it again.
Warning: Do not skip the checksum steps to get past this error.
Verify the recovery
The command is found inside a job, and the next submission passes the prerequisite checks.
Escalate
Ask center support which checksum tool is supported on compute nodes.
BSSW-WORKER-EXIT: A worker step failed
Code: BSSW-WORKER-EXIT
Signal
The job prints BSSW-WORKER-EXIT and exits with code 76. At least one worker job step ended with an error.
Likely causes
The job does not have enough CPUs for the number of workers, your center restricts exclusive single-task job steps, or the worker could not reach the coordinator.
Recovery steps
- Open the worker logs in the run folder’s
logs/directory. Each worker has its own log. - Each worker step uses one CPU. Compare
WORKER_COUNTwith the job’s--cpus-per-task, and lower the count or raise the CPUs. - If
srunrejects the step, ask your center whether exclusive single-task steps are allowed.
Warning: Do not remove the exclusive option from the step launcher to make it run.
Verify the recovery
Every worker exits cleanly and the run reaches the verification step.
Escalate
Report sanitized worker logs and your center’s step policy through support.
BSSW-PREQ-VALUE: An adapter value is out of bounds
Code: BSSW-PREQ-VALUE
Signal
The job prints BSSW-PREQ-VALUE and exits with code 67. The message names the value: WORKER_COUNT must be a whole number from 1 to 16, TASK_COUNT from 1 to 256, READINESS_TIMEOUT from 1 to 300, and CLEANUP_TIMEOUT from 1 to 60.
Likely causes
The value passed through --export is not a whole number, is empty, or is outside its range.
Recovery steps
- Read which value the message names.
- Correct it in your
sbatch --export=...list. - Submit again.
Warning: Do not edit the bounds in the script. They keep a run small enough for a shared node.
Verify the recovery
The next submission gets past the prerequisite checks.
Escalate
If you need larger values, ask your center whether the node and partition allow them first.
BSSW-PREQ-APPTAINER: Container runtime is unavailable
Code: BSSW-PREQ-APPTAINER Earlier name: BSSW-PREREQ-APPTAINER
Signal
The job prints BSSW-PREQ-APPTAINER and exits with code 65.
command -v apptainer fails, apptainer --version fails, or the runtime is absent on compute nodes.
Likely causes
The runtime module is not loaded, login and compute environments differ, or the center supports another rootless runtime.
Recovery steps
- Find the center-documented runtime module or path.
- Verify it inside a compute allocation.
- Record the runtime version and rerun the prerequisite check.
Warning: Do not install a privileged daemon or bypass center policy.
Verify the recovery
Both command -v apptainer and apptainer --version succeed in the job environment.
Escalate
Ask center support which rootless runtime is approved. This release does not claim another runtime is validated.
BSSW-READY-TIMEOUT: Coordinator did not become ready
Code: BSSW-READY-TIMEOUT Earlier name: BSSW-READINESS-TIMEOUT
Signal
The job prints BSSW-READY-TIMEOUT and exits with code 75.
The semantic health check expires. The launcher exits nonzero and no worker-start event occurs.
Likely causes
The coordinator failed, the image is wrong, loopback communication is blocked, job-scoped storage is unwritable, or requested resources are insufficient.
Recovery steps
- Inspect the coordinator log and image digest.
- Check loopback communication and job-scoped write permissions.
- Correct one cause, remove invalid success artifacts, and resubmit within the documented timeout bounds.
Warning: Do not replace semantic health with a fixed sleep or an unbounded loop.
Verify the recovery
Confirm the failed run has this diagnostic code, a nonzero result, cleanup evidence, and no worker-start event. A repaired run must pass readiness before workers.
Escalate
Report sanitized coordinator and readiness logs through support.
BSSW-PREQ-STORAGE: Job-scoped storage check failed
Code: BSSW-PREQ-STORAGE Earlier name: BSSW-STORAGE-UNAVAILABLE
Signal
The job prints BSSW-PREQ-STORAGE and exits with code 72.
The selected scratch root is missing or unwritable, quota is insufficient, or the container bind is denied.
Likely causes
The path is not allocated to the job, quota is exhausted, permissions are wrong, or runtime bind policy rejects it.
Recovery steps
- Select the center-approved job-scoped path.
- Verify ownership and free quota.
- Create a private directory for the submitted job.
- Test the bind with a non-sensitive file.
Warning: Never fall back silently to shared persistent storage or a world-writable path.
Verify the recovery
The job can create, read, and remove a private test file through the same container bind.
Escalate
Ask center support to confirm the approved scratch and bind policy.
BSSW-PREQ-SLURM: Scheduler prerequisite is unavailable
Code: BSSW-PREQ-SLURM Earlier name: BSSW-PREREQ-SLURM
Signal
The job prints BSSW-PREQ-SLURM and exits with code 64.
sbatch is unavailable, submission authorization is unknown, or a minimal submission is rejected before the job starts.
Likely causes
The scheduler client is not loaded, the account or partition is unauthorized, or the center requires a site-specific submission option.
Recovery steps
- Read the center user guide.
- Load only the documented scheduler client environment.
- Select an authorized account and partition.
- Rerun
command -v sbatchand the center’s non-submitting account check.
Warning: Do not guess account names.
Verify the recovery
The scheduler command is available and the center confirms an authorized submission target.
Escalate
Contact center support when authorization remains unclear.
BSSW-PREQ-IMAGE: The container image is missing or unsafe
Code: BSSW-PREQ-IMAGE
Signal
The job prints BSSW-PREQ-IMAGE and exits with code 68. The image file is missing, is not a regular file, or its checksum record is missing, unreadable, or invalid. container/acquire.sh prints the same code when its acquisition metadata is invalid.
Likely causes
The image has not been built yet, IMAGE_PATH is a relative path that Slurm’s copy of the script cannot resolve, the path is a symbolic link, or the .sha256 file next to the image is absent.
Recovery steps
- Run
workflows/baseline-slurm-apptainer/container/acquire.shwhere your center allows image builds. - Pass
IMAGE_PATHas an absolute path in--export. - Confirm the image is a regular file, not a link, and that
<image>.sha256holds one 64-character digest.
Warning: Do not point IMAGE_PATH at an image you did not build or obtain through your center.
Verify the recovery
The next submission gets past the image checks and starts the coordinator.
Escalate
Ask center support whether image builds are allowed on login nodes or need a build node.
BSSW-COORDINATOR-EXIT: The coordinator stopped early
Code: BSSW-COORDINATOR-EXIT
Signal
The job prints BSSW-COORDINATOR-EXIT and exits with code 74. The coordinator exited before it published its address, published an invalid address, exited right after becoming ready, or exited before the results were checked.
Likely causes
The image or input is wrong, the coordinator could not write its files in the run folder, or the job ran out of time or resources.
Recovery steps
- Open
logs/coordinator.login the run folder (<scratch root>/bssw-<job id>/logs/). - Fix the cause the log shows: image, input, or a scratch path that is not writable.
- If the coordinator stopped mid-run, compare the job’s elapsed time with its time limit.
Warning: Do not restart only the workers. A run needs the whole sequence from the start.
Verify the recovery
A new run passes the readiness gate and keeps the coordinator running until the results are checked.
Escalate
Report sanitized coordinator logs through support.
BSSW-INTEGRITY-IMAGE: The image checksum does not match
Code: BSSW-INTEGRITY-IMAGE
Signal
The job prints BSSW-INTEGRITY-IMAGE and exits with code 71. The image’s SHA-256 could not be calculated or does not match the recorded value. container/acquire.sh prints the same code if its definition and registry record are not tied to the same digest.
Likely causes
The image was rebuilt or replaced after its checksum was recorded, or the file was damaged.
Recovery steps
- Run
container/acquire.shagain to build a fresh image and a fresh checksum record. - If
acquire.shitself prints this code, restorecontainer/Apptainer.defandcontainer/image-lock.jsonfrom the release.
Warning: Do not edit the checksum record to match a different image.
Verify the recovery
The next submission gets past the image checks.
Escalate
If a fresh build keeps failing, report the sanitized output through support.
BSSW-INTEGRITY-INPUT: The input checksum does not match
Code: BSSW-INTEGRITY-INPUT
Signal
The job prints BSSW-INTEGRITY-INPUT and exits with code 70. The input’s SHA-256 could not be calculated, does not match the recorded value, or the job’s private copy of the input failed the same check.
Likely causes
The input file was edited without updating its checksum record, or it was changed or truncated in transit.
Recovery steps
- From the workflow directory, run
(cd inputs && sha256sum -c tasks.json.sha256). - If you edited the input on purpose, create a new checksum record with your SHA-256 tool and keep the
tasks.jsonfile name in it. - If you did not edit it, restore the file from the release.
Warning: Do not edit the checksum record just to make the check pass.
Verify the recovery
sha256sum -c prints tasks.json: OK, and the next submission gets past the integrity checks.
Escalate
Report the problem through support if a restored file still fails.
BSSW-PREQ-INPUT: The input or expected results are unusable
Code: BSSW-PREQ-INPUT
Signal
The job prints BSSW-PREQ-INPUT and exits with code 69 or 73. Code 69 means the input or expected-results file is missing or unsafe, or its checksum record is missing, unreadable, or invalid. Code 73 means the input was read but failed the schema or bounds check.
Likely causes
INPUT_PATH, EXPECTED_PATH, or INPUT_SHA256_FILE is a relative path that Slurm’s copy of the script cannot resolve. For code 73, inputs/tasks.json does not follow the task format, repeats a task id, or holds a different number of tasks than TASK_COUNT.
Recovery steps
- Pass all three paths as absolute paths in
--export, as shown in Run the example. - For code 73, read
logs/input-validation.login the run folder. - Make sure the file has
schemaVersion1, ataskslist, and for each task anidand apayloadholding onlymessageandrepeat, with unique ids. - Set
TASK_COUNTto the number of tasks in the file.
Warning: Treat input as data only. Never put shell syntax in it.
Verify the recovery
The validation step passes and the coordinator starts.
Escalate
If the input is generated by another tool, report the failing sanitized logs/input-validation.log through support.
BSSW-CLEANUP-SIGNAL: The job was stopped by a signal
Code: BSSW-CLEANUP-SIGNAL
Signal
The job prints BSSW-CLEANUP-SIGNAL and exits with code 78. The job received a termination signal (terminate, interrupt, or hang-up) before it finished. No success file is left behind.
Likely causes
Someone ran scancel, or the job reached its wall-time limit. The wall-time signal path is Designed, not run: it has not been exercised on a cluster.
Recovery steps
- Run
sacct -j <job id> --format=JobID,State,Elapsed,Timelimit. - If the state is
TIMEOUT, raise#SBATCH --timeand submit again. - If the state is
CANCELLED, find out who cancelled it before you submit again.
Warning: Do not count partial files in the run folder as results.
Verify the recovery
A new run finishes before its time limit and writes result.json.
Escalate
If the scheduler ended the job without a request from you, ask center support for the reason.
BSSW-VERIFY-RESULT: The results failed verification
Code: BSSW-VERIFY-RESULT
Signal
The job prints BSSW-VERIFY-RESULT and exits with code 77. The result schema, the count, the uniqueness, or the content did not pass verification, or the verifier did not create result.json. No success file is left behind.
Likely causes
A worker produced a wrong or missing result, expected/results.json no longer matches your input or application, or the verifier is still the demonstration one after you changed the application.
Recovery steps
- Read
logs/verification.login the run folder. - Compare
results.jsonwithexpected.jsonin the same folder. - If you changed the application, replace
bin/verify.pyandexpected/results.jsonwith your own definition of correct.
Warning: Do not create result.json by hand. It is the only success marker.
Verify the recovery
A new run writes result.json with "status": "success".
Escalate
Report the sanitized verification log through support.
If execution is blocked, you can still use the conceptual modules and local adaptation guidance. If no symptom matches, report a missing diagnostic with sanitized reproduction details.