I wonder about this bubbling up and being known to the controller layer. For testing and clean layers, I'd think we would either want to keep the model function approach (e.g. `@organization.discover_repos`) or to instantiate an object here `RepoDiscovery` or `RepoDiscoveryService` and then cal discover on it passing the URL. Then let that object handle knowledge of the task and how to run and call `async_task`. When testing controllers, this should allow much better mocking and injection as well as provide a re-usable object that hides all this knowledge.