`ansible.builtin.shell`: Python script completes but the Ansible Controller doesn't see it finish

Ansible version: ansible [core 2.17.7]
Python version: python version = 3.10.12 (main, Jan 17 2025, 14:35:34) [GCC 11.4.0] (/usr/bin/python3)
Target machine: Ubuntu 24.04, Python 3.12

I have this Ansible playbook to enable toriptables:

(You can prepare the Controller by doing git clone https://github.com/ruped24/toriptables3.git first)

Then I run this playbook:

---
- name: Ensure toriptables3 is installed and loaded
  hosts: tor_enabled
  become: yes

  tasks:
  - name: Ensure Tor is installed
    apt:
      name: tor
      state: present
  
  - name: Copy toriptables3.py if not already present
    ansible.builtin.copy:
      content: "{{ lookup('file', './toriptables3/toriptables3.py') }}"
      dest: /usr/local/bin/toriptables3.py
      mode: '0755'

  - name: Load toriptables if not already loaded
    ansible.builtin.shell:
      cmd: "timeout 60s toriptables3.py -l"
      executable: /bin/bash

On a fresh Ubuntu/Debian install the last task, running toriptables.py -l, will run but its completion will not be detected by the Ansible controller. Running the playbook again works successfully, but this is of little use since it’s already loaded.

Subsequently on the same machine I can reproduce the issue by:

sudo toriptables3.py -f
sudo rm /usr/local/bin/toriptables3.py
sudo systemctl restart tor@default.service

and then running the playbook. The last task times out after many minutes or I end it manually myself: ^C [ERROR]: User interrupted execution.

Strangely I can confirm the script always completes successfully (by printing to files for instance), but the Ansible Controller never detects that it finishes.

There are no logs output by the Ansible controller (even with -vvv). But I think this is by Ansible’s design.

Could the reason for this be that the script itself (https://github.com/ruped24/toriptables3/blob/master/toriptables3.py) uses subprocess calls? How can I debug this further?