Problem
Three call sites independently find Passage routes, read _passage_handler, check PassageControllerInterface, and merge config('passage.options') with getOptions(). They already disagree: the controller resolves handlers through the container ($this->app->make()), while PassageListCommand uses new $handler, which breaks for handlers with constructor dependencies. The two commands also match routes differently (action name string vs uses string).
Location
PassageController::handle()
PassageHealthCommand::passageRoutes()
PassageListCommand::handle()
Fix
Extract a PassageRouteRegistry (find routes, resolve handler, merge options) and use it from all three call sites.
Sizing
Priority 16 (Impact 2, Risk 2, Effort 2). Estimated half a day.
From the tech debt audit dated 2026-07-05.
Problem
Three call sites independently find Passage routes, read
_passage_handler, checkPassageControllerInterface, and mergeconfig('passage.options')withgetOptions(). They already disagree: the controller resolves handlers through the container ($this->app->make()), whilePassageListCommandusesnew $handler, which breaks for handlers with constructor dependencies. The two commands also match routes differently (action name string vsusesstring).Location
PassageController::handle()PassageHealthCommand::passageRoutes()PassageListCommand::handle()Fix
Extract a
PassageRouteRegistry(find routes, resolve handler, merge options) and use it from all three call sites.Sizing
Priority 16 (Impact 2, Risk 2, Effort 2). Estimated half a day.
From the tech debt audit dated 2026-07-05.