scripts/backup_store.py's _container_running/_copy_dump call subprocess.run(["docker", ...]) with no guard around a missing docker executable. If docker isn't on PATH, the script raises an uncaught FileNotFoundError (full traceback) instead of the clean backup_store: ... stderr + non-zero exit it produces for its three enumerated failure modes (container not running, BGSAVE timeout, copy failure).
Low probability (docker is a hard project dependency), so it didn't block the PR — filing for completeness. scripts/restore_store.py wraps its docker calls in a bounded _run with a catch-all in main(); backup_store.py should get the same treatment: catch FileNotFoundError (and ideally bound the calls with a timeout, matching restore's 120s pattern) and convert to the standard failure format.
scripts/backup_store.py's_container_running/_copy_dumpcallsubprocess.run(["docker", ...])with no guard around a missingdockerexecutable. Ifdockerisn't on PATH, the script raises an uncaughtFileNotFoundError(full traceback) instead of the cleanbackup_store: ...stderr + non-zero exit it produces for its three enumerated failure modes (container not running, BGSAVE timeout, copy failure).Low probability (docker is a hard project dependency), so it didn't block the PR — filing for completeness.
scripts/restore_store.pywraps its docker calls in a bounded_runwith a catch-all inmain();backup_store.pyshould get the same treatment: catchFileNotFoundError(and ideally bound the calls with a timeout, matching restore's 120s pattern) and convert to the standard failure format.