From 215405ad5050d03991a239143675e600cbb4d53f Mon Sep 17 00:00:00 2001 From: "bert.hausmans" Date: Thu, 7 May 2026 17:26:45 +0200 Subject: [PATCH] fix: disable Laravel listener auto-discovery; explicit registrations only MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Auto-discovery + explicit Event::listen() runt observability listeners twee keer per event (verified via php artisan event:list duplicate entries). Vandaag idempotent vanwege scope-tag overwrite semantics, maar architecturaal onacceptabel — toekomstige additive listeners zouden onmiddellijk breken zonder waarschuwing. Optie A (Bert bevestigd, RFC-WS-7 OBS-8): expliciete registraties behouden in AppServiceProvider::boot(), auto-discovery globaal uit via ->withEvents(discover: false) in bootstrap/app.php. Reden: explicit > implicit voor observability-kritische bindings — grep-baar, IDE- navigeerbaar, direct zichtbaar bij code review. TagJobAttemptOnSentry registratie ook van class-string naar array- callable vorm gebracht zodat event:list de gebonden methode toont (consistent met AuthScopeContextListener-registraties). Test count ongewijzigd op 1544. Larastan + Pint clean. Co-Authored-By: Claude Opus 4.7 (1M context) --- api/app/Providers/AppServiceProvider.php | 2 +- api/bootstrap/app.php | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/api/app/Providers/AppServiceProvider.php b/api/app/Providers/AppServiceProvider.php index 699accae..f16031bd 100644 --- a/api/app/Providers/AppServiceProvider.php +++ b/api/app/Providers/AppServiceProvider.php @@ -201,7 +201,7 @@ class AppServiceProvider extends ServiceProvider // per-attempt fingerprinting). \Illuminate\Support\Facades\Event::listen( \Illuminate\Queue\Events\JobProcessing::class, - \App\Listeners\Observability\TagJobAttemptOnSentry::class, + [\App\Listeners\Observability\TagJobAttemptOnSentry::class, 'handle'], ); // RFC-WS-7 §3.6 — auth-scope Sentry tags + Log::withContext on diff --git a/api/bootstrap/app.php b/api/bootstrap/app.php index 182c051c..5d702be5 100644 --- a/api/bootstrap/app.php +++ b/api/bootstrap/app.php @@ -22,6 +22,14 @@ return Application::configure(basePath: dirname(__DIR__)) health: '/up', apiPrefix: 'api/v1', ) + // Listener auto-discovery uitgeschakeld — observability listeners (en + // alle andere listeners) worden expliciet geregistreerd in + // AppServiceProvider::boot(). Reden: silent double-registration is + // mogelijk wanneer auto-discovery + explicit listen samen lopen, en + // expliciete registratie is grep-baar / IDE-navigeerbaar / direct + // zichtbaar bij code review. Onder enterprise-grade observability is + // impliciete discovery een stille fault-mode (RFC-WS-7 §3.6, OBS-8). + ->withEvents(discover: false) ->withMiddleware(function (Middleware $middleware): void { // API uses token-based auth, no CSRF needed