typetag doesn't seem to be a good idea here. Why do you use it? Show me an actual use case that requires it versus having a trait bound + Serialize on the PrometheusAlertChannel trait.
Much better than previous iteration. But still a lot of room for improvement.
I think PrometheusAlertChannel is a good name for the trait. However both function names feel off :
Yeah I don't think this will work. Show me the actual json that this produces and why you need to use this.
Why is all this config hardcoded? Shouldn't it be exposed in the Score's configuration? I think it should have defaults so that users are not forced to set everything by themselves but it should not be hardcoded.
Is this really required? This feels wrong, at least it would deserve a small comment explaining why you are ALWAYS instanciating a hardcoded NullReceiver