Uninstall dropped a module's tables and kept its files; Delete does the
same and removes the files. Two ways to lose a module's data were one
too many: the page offers Delete, and Disable to switch a module off
without losing anything. The uninstall background action goes with it
(Delete still uninstalls first).
Install, update, uninstall, delete, rollback, license renewal, store
install, archive upload and the update check held the request open on
the store, GitHub, migrations and the load balancers, past nginx's
200 s on a slow call. ModuleJob queues one and starts
`console.php module:job`, which records how it ended in a JSON state
file the page polls. One job at a time: each rewrites
config/modules.php by read-modify-write. A job whose process went away
reads as failed, not running. The command is MAIN-only, left out of the
LB archive.