One script changing variable in another script

Export just means the var is available to edit in the inspector view. It doesn’t mean “export so that other scripts can see it”.

It looks like there’s some confusion on signals here as well. You set up a signal called completed_time, and even emit said signal, but you never handle said signal. The method func completed_time() in your global singleton does not fire when your signal emits, from the code I see here.

If you want to save some data between levels, one simple way is to just use an autoload script. I would imagine your global singleton is such a script, since autoloads are just global singletons. You didn’t mention the Autoload’s name, so let’s just assume it is called Globals.

In globals.gd:

var all_coin_pickups = {}
var all_deaths = {}

func pickup_coin(level_name:String, num_coins):  # Or whatever
    all_coin_pickips[level_name] = num_coins

func record_death(death_time, other_info):  # Or whatever
    all_deaths[death_time] = other_info

Then in player.gd:

func die():
    # whatever death code you already have
    Globals.record_death(current_time, whatever_data)

and in coin.gd:

func _on_coin_pickup():
    # Whatever other code you already have on coin pickup
    Globals.pickup_coin(current_level_name, 1)