For some reason, _annotate_fits_and_return_input got as input [None, None, output_of_embright_group]. Poking at flower, it looks like the previous group is triggering _annotate_fits_and_return_input multiple times.
This is the flower page for the _annotate_fits_and_return_input task that failed, which was for the subthreshold pathway.
I'm going to start logging stuff here for debug purposes.
This seems to only happen for the subthreshold pathway. Interesting behavior that I've observed is that this task appears to work when the canvas run at the end of earlywarning_preliminary_alert has the type celery.canvas._chain, while when it doesn't work it has the type celery.canvas._chord. I checked the type in the line immediately above canvas.apply_async(priority=priority).
The former, which works, adds more on to the canvas after the chord (i.e. it creates a chain of chord | other tasks). The latter does not, so the canvas is just the chord defined here.