        hooks.recentsDirty = refreshRecents;
        bindMedia();
        /* the first run. The config is read at boot because the notes on
           the screens that are empty BECAUSE of it read this store — and
           the tour itself is offered only once the library and the saved
           account have both answered. Asked any earlier they are `[]` and
           `""` on every phone in existence, Kyle's included, and the sheet
           that must never open on his would open on his. */
        const configRead = loadSetup();
        const libRead = loadLibrary();
        /* the network: subscribe first, then the saved account signs in on its own */
        const netRead = bindSlsk().then(() => connectStored()).catch(() => {});
        Promise.all([configRead, libRead, netRead]).then(() => maybeOpenFirstRun()).catch(() => {});
