Looking at the code in the OP, I think the issue is probably that the timer is being told to start continuously whenever there is at least a single child. I think this is resetting the timer before it has a chance to time out, which in turn stops it from sending a signal.
Something like this might work, since it checks to see if the timer is running before starting the timer.
func _physics_process(delta: float) -> void:
if self.get_child_count() > 0:
if (timer.time_left <= 0): # the timer has stopped or has finished.
timer.start()
Though since a solution has been found, I guess it's all good anyway :smile: