When async checks were added, we took the simple route to make development quick by just having all checks return promises, and then waiting for them all to resolve before we display any of them.
This has drawbacks when we consider slow async checks, because a slow internet connection or slow server will hold up all checks by however-many-seconds.
However, if we want to allow checks to be displayed as soon as they stream in, we need to solve some UX problems:
- In mid-edit checks this is easy, because we can just add them into the sidebar whenever they individually resolve.
- In pre-save we encounter difficulties because we show a single check at a time in document-order and a count of checks that need to be resolved, and coping with a check coming in earlier in the document than the current focus causes some notification issues or potential user confusion -- along with questions about e.g. how long we should wait if there's only outstanding async checks in the queue before we move along to saving.