fix: disable Laravel listener auto-discovery; explicit registrations only

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) <noreply@anthropic.com>
This commit is contained in:
2026-05-07 17:26:45 +02:00
parent adab3be781
commit 215405ad50
2 changed files with 9 additions and 1 deletions

View File

@@ -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