> One thing that burned me bad though was that without a `try` anywhere, my 100 line async function failed silently.
You should be bubbling errors up to some top level and at least catching them there.
Wrapping entire async-fn bodies with try/catch (or outright overuse of try/catch) is probably the most ubiquitous beginner mistake I see in modern Javascript.
For example, imagine if your top level was even just run().catch(console.error).