signature:
Launcher.ReportStats(sts Stats)
would require creating a new task Stats struct designed to simplify stats reporting to a central reporting service like Prometheus.
maybe consider, changing the DoTask() signature to:
DoTask(ctx context.Context) (task.Result, string, *Stats)
When *Stats is not nil then the stats are reported.
or
launcher only reports Stats if task.Result == "complete" and *Stats is not nil.