['enroll', 'assign', 'promotion', 'withdraw'], 'eventual-consistency' => ['send', 'dispatch', 'notify', 'import', 'export'], 'optimistic-locking' => ['students', 'users', 'attendance', 'scores', 'finance'], 'money-precision' => ['finance', 'invoice', 'payment', 'refund', 'fee'], 'temporal-consistency' => ['attendance', 'calendar', 'school-year', 'semester'], 'device-trust' => ['scanner', 'scan', 'kiosk', 'badge', 'device'], 'import-preview' => ['import', 'upload', 'preview', 'commit', 'bulk'], 'notification-suppression' => ['notify', 'notification', 'email', 'whatsapp'], ]; foreach ($riskFamilies as $family => $needles) { $this->assertNotEmpty( $this->apiRoutesContainingAny($needles), 'Batch 16 risk family '.$family.' should map to at least one registered API route or be consciously removed from the risk register.' ); } } }