I don't remember how I implemented the workaround for shaders not pausing in no signal. I think it would be useful to add to these notes, so here's what I had written:
var scaled_time: float
const HOUR: float = 60*60
func _process(delta: float) -> void:
	if not get_tree().paused:
		scaled_time += delta
	while scaled_time > HOUR:
		scaled_time -= HOUR
	RenderingServer.global_shader_parameter_set("SCALED_TIME", scaled_time)In order to work, a global shader parameter with
                    the name SCALED_TIME needs to exist in
                    the project settings and this code needs be added to
                    an autoloaded singleton. In the case of no
                    signal, it is part of the
                    GameState autoloaded singleton.
I checked why I implemented a rollover of one
                    hour, and it seems like I probably did it this way
                    because that's
                    what's done by default for the TIME
                    built-in.