503 lines
19 KiB
JSON
503 lines
19 KiB
JSON
|
|
[
|
||
|
|
{
|
||
|
|
"id": "FRONT-001",
|
||
|
|
"type": "SECURITY",
|
||
|
|
"severity": "CRITICAL",
|
||
|
|
"blocking_production": true,
|
||
|
|
"file": "vite.config.ts",
|
||
|
|
"line": 64,
|
||
|
|
"description": "CSP contient 'unsafe-inline' et 'unsafe-eval' dans script-src, permettant l'injection de scripts malveillants",
|
||
|
|
"fix_recommendation": "Supprimer 'unsafe-inline' et 'unsafe-eval', utiliser des nonces CSP stricts pour tous les scripts inline"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-002",
|
||
|
|
"type": "SECURITY",
|
||
|
|
"severity": "CRITICAL",
|
||
|
|
"blocking_production": true,
|
||
|
|
"file": "src/services/tokenStorage.ts",
|
||
|
|
"line": 21,
|
||
|
|
"description": "Tokens JWT stockés dans localStorage, vulnérables au vol via XSS",
|
||
|
|
"fix_recommendation": "Migrer vers httpOnly cookies (nécessite backend) ou utiliser sessionStorage avec rotation fréquente des tokens"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-003",
|
||
|
|
"type": "SECURITY",
|
||
|
|
"severity": "HIGH",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/chat/components/ChatMessages.tsx",
|
||
|
|
"line": 102,
|
||
|
|
"description": "Utilisation de dangerouslySetInnerHTML pour afficher les messages de chat, risque XSS si sanitisation échoue",
|
||
|
|
"fix_recommendation": "Vérifier que sanitizeChatMessage est robuste, considérer une alternative comme un parser markdown sécurisé"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-004",
|
||
|
|
"type": "SECURITY",
|
||
|
|
"severity": "HIGH",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/chat/components/VirtualizedChatMessages.tsx",
|
||
|
|
"line": 79,
|
||
|
|
"description": "Utilisation de dangerouslySetInnerHTML pour afficher les messages de chat, risque XSS si sanitisation échoue",
|
||
|
|
"fix_recommendation": "Vérifier que sanitizeChatMessage est robuste, considérer une alternative comme un parser markdown sécurisé"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-005",
|
||
|
|
"type": "BUG",
|
||
|
|
"severity": "HIGH",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/api.ts",
|
||
|
|
"line": 19,
|
||
|
|
"description": "Hardcoding de 'http://localhost:8080/api/v1' comme fallback, risque de build de production avec URLs de développement",
|
||
|
|
"fix_recommendation": "Supprimer le fallback localhost, forcer l'utilisation de variables d'environnement en production"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-006",
|
||
|
|
"type": "BUG",
|
||
|
|
"severity": "HIGH",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/websocket.ts",
|
||
|
|
"line": 47,
|
||
|
|
"description": "Hardcoding de 'ws://localhost:8081/ws' comme fallback, risque de build de production avec URLs de développement",
|
||
|
|
"fix_recommendation": "Supprimer le fallback localhost, forcer l'utilisation de variables d'environnement en production"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-007",
|
||
|
|
"type": "BUG",
|
||
|
|
"severity": "HIGH",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/secure-auth.ts",
|
||
|
|
"line": 53,
|
||
|
|
"description": "Hardcoding de 'http://localhost:8080/api/v1' comme fallback, risque de build de production avec URLs de développement",
|
||
|
|
"fix_recommendation": "Supprimer le fallback localhost, forcer l'utilisation de variables d'environnement en production"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-008",
|
||
|
|
"type": "BUG",
|
||
|
|
"severity": "HIGH",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/tokenRefresh.ts",
|
||
|
|
"line": 11,
|
||
|
|
"description": "Hardcoding de 'http://localhost:8080/api/v1' comme fallback, risque de build de production avec URLs de développement",
|
||
|
|
"fix_recommendation": "Supprimer le fallback localhost, forcer l'utilisation de variables d'environnement en production"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-009",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "HIGH",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/auth/components/LoginForm.tsx",
|
||
|
|
"line": 47,
|
||
|
|
"description": "Erreur de login loggée dans console.error mais pas toujours affichée à l'utilisateur de manière visible",
|
||
|
|
"fix_recommendation": "S'assurer que toutes les erreurs sont affichées via un système de toast/notification visible"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-010",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "HIGH",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/auth/components/RegisterForm.tsx",
|
||
|
|
"line": 58,
|
||
|
|
"description": "Erreur d'inscription loggée dans console.error mais pas toujours affichée à l'utilisateur de manière visible",
|
||
|
|
"fix_recommendation": "S'assurer que toutes les erreurs sont affichées via un système de toast/notification visible"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-011",
|
||
|
|
"type": "TYPESCRIPT",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/utils/csp.ts",
|
||
|
|
"line": 157,
|
||
|
|
"description": "Utilisation de 'any' pour les paramètres de middleware, perte de sécurité de type",
|
||
|
|
"fix_recommendation": "Typer correctement les paramètres req, res, next avec les types Express/Node appropriés"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-012",
|
||
|
|
"type": "TYPESCRIPT",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/types/api.ts",
|
||
|
|
"line": 70,
|
||
|
|
"description": "Utilisation excessive de 'any' dans les types API, perte de sécurité de type",
|
||
|
|
"fix_recommendation": "Définir des interfaces strictes pour tous les types de données API"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-013",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/chat/hooks/useChat.ts",
|
||
|
|
"line": 34,
|
||
|
|
"description": "console.log dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-014",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/chat/hooks/useChat.ts",
|
||
|
|
"line": 62,
|
||
|
|
"description": "console.log dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-015",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/chat/hooks/useChat.ts",
|
||
|
|
"line": 68,
|
||
|
|
"description": "console.error dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-016",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/chat/hooks/useChat.ts",
|
||
|
|
"line": 99,
|
||
|
|
"description": "console.warn dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-017",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/chat/hooks/useChat.ts",
|
||
|
|
"line": 133,
|
||
|
|
"description": "console.error dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-018",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/chat/hooks/useChat.ts",
|
||
|
|
"line": 124,
|
||
|
|
"description": "TODO: Add fetchHistory function - fonctionnalité manquante",
|
||
|
|
"fix_recommendation": "Implémenter la fonction fetchHistory ou documenter pourquoi elle n'est pas nécessaire"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-019",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/chat/components/ChatSidebar.tsx",
|
||
|
|
"line": 110,
|
||
|
|
"description": "TODO: Button to create new conversation - fonctionnalité manquante",
|
||
|
|
"fix_recommendation": "Implémenter le bouton de création de conversation ou le retirer du code"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-020",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/websocket.ts",
|
||
|
|
"line": 191,
|
||
|
|
"description": "TODO: Implement removal for other event types if needed - code incomplet",
|
||
|
|
"fix_recommendation": "Implémenter la logique complète ou documenter pourquoi elle n'est pas nécessaire"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-021",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/tracks/components/TrackSearchResults.tsx",
|
||
|
|
"line": 128,
|
||
|
|
"description": "TODO: Implement play functionality - fonctionnalité manquante",
|
||
|
|
"fix_recommendation": "Implémenter la fonctionnalité de lecture ou retirer le code"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-022",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/profile/components/FollowButton.tsx",
|
||
|
|
"line": 29,
|
||
|
|
"description": "TODO: Call API to follow/unfollow - fonctionnalité manquante",
|
||
|
|
"fix_recommendation": "Implémenter l'appel API pour suivre/ne plus suivre un utilisateur"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-023",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/playlists/services/playlistService.ts",
|
||
|
|
"line": 198,
|
||
|
|
"description": "TODO: Replace with actual API call when backend is ready - code mock",
|
||
|
|
"fix_recommendation": "Remplacer par l'appel API réel ou documenter le statut du backend"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-024",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/playlists/components/PlaylistAnalytics.tsx",
|
||
|
|
"line": 60,
|
||
|
|
"description": "TODO: T0491 - Remplacer par l'appel API réel une fois le backend implémenté",
|
||
|
|
"fix_recommendation": "Implémenter l'appel API réel ou documenter le statut"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-025",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/library/pages/LibraryPage.tsx",
|
||
|
|
"line": 40,
|
||
|
|
"description": "TODO: Show toast success - feedback utilisateur manquant",
|
||
|
|
"fix_recommendation": "Ajouter un toast de succès pour informer l'utilisateur"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-026",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/library/pages/LibraryPage.tsx",
|
||
|
|
"line": 43,
|
||
|
|
"description": "TODO: Show toast error - feedback utilisateur manquant",
|
||
|
|
"fix_recommendation": "Ajouter un toast d'erreur pour informer l'utilisateur"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-027",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/library/components/LibraryManager.tsx",
|
||
|
|
"line": 257,
|
||
|
|
"description": "isLiked={() => false} // Todo - fonctionnalité incomplète",
|
||
|
|
"fix_recommendation": "Implémenter la logique de vérification du statut 'liked'"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-028",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/chat/components/ChatInterface.tsx",
|
||
|
|
"line": 9,
|
||
|
|
"description": "TODO: wsService should be replaced with websocketService or a proper chat service",
|
||
|
|
"fix_recommendation": "Refactoriser pour utiliser le service WebSocket approprié"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-029",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/library/components/LibraryManager.tsx",
|
||
|
|
"line": 112,
|
||
|
|
"description": "console.log('Edit track', originalTrack); // Temporary - code temporaire à supprimer",
|
||
|
|
"fix_recommendation": "Supprimer ce console.log temporaire ou implémenter la fonctionnalité d'édition"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-030",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/config/env.ts",
|
||
|
|
"line": 37,
|
||
|
|
"description": "console.error dans le code de production, devrait utiliser un logger",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-031",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/components/ErrorBoundary.tsx",
|
||
|
|
"line": 40,
|
||
|
|
"description": "console.error dans le code de production, acceptable pour ErrorBoundary mais devrait être conditionnel",
|
||
|
|
"fix_recommendation": "Garder pour ErrorBoundary mais considérer un service de logging externe en production"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-032",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/stores/auth.ts",
|
||
|
|
"line": 87,
|
||
|
|
"description": "console.error dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-033",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/api/auth.ts",
|
||
|
|
"line": 138,
|
||
|
|
"description": "console.warn dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-034",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/player/hooks/useStreamSync.ts",
|
||
|
|
"line": 66,
|
||
|
|
"description": "console.log dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-035",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/player/hooks/useStreamSync.ts",
|
||
|
|
"line": 82,
|
||
|
|
"description": "console.error dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-036",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/api.ts",
|
||
|
|
"line": 414,
|
||
|
|
"description": "console.error dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-037",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/secure-auth.ts",
|
||
|
|
"line": 89,
|
||
|
|
"description": "console.debug dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-038",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/secure-auth.ts",
|
||
|
|
"line": 94,
|
||
|
|
"description": "console.warn dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-039",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/secure-auth.ts",
|
||
|
|
"line": 139,
|
||
|
|
"description": "console.debug dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-040",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/secure-auth.ts",
|
||
|
|
"line": 142,
|
||
|
|
"description": "console.error dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-041",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/secure-auth.ts",
|
||
|
|
"line": 183,
|
||
|
|
"description": "console.debug dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-042",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/secure-auth.ts",
|
||
|
|
"line": 186,
|
||
|
|
"description": "console.error dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-043",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/secure-auth.ts",
|
||
|
|
"line": 206,
|
||
|
|
"description": "console.warn dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-044",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/secure-auth.ts",
|
||
|
|
"line": 236,
|
||
|
|
"description": "console.warn dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-045",
|
||
|
|
"type": "PERFORMANCE",
|
||
|
|
"severity": "LOW",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/services/secure-auth.ts",
|
||
|
|
"line": 269,
|
||
|
|
"description": "console.error dans le code de production, pollution des logs",
|
||
|
|
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-046",
|
||
|
|
"type": "BUG",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/config/constants.ts",
|
||
|
|
"line": 7,
|
||
|
|
"description": "Fallback hardcodé vers 127.0.0.1, devrait utiliser uniquement les variables d'environnement en production",
|
||
|
|
"fix_recommendation": "Supprimer les fallbacks localhost/127.0.0.1 ou les rendre conditionnels (dev uniquement)"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-047",
|
||
|
|
"type": "BUG",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/config/env.ts",
|
||
|
|
"line": 6,
|
||
|
|
"description": "Fallback hardcodé vers 127.0.0.1, devrait utiliser uniquement les variables d'environnement en production",
|
||
|
|
"fix_recommendation": "Supprimer les fallbacks localhost/127.0.0.1 ou les rendre conditionnels (dev uniquement)"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-048",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/stores/chat.ts",
|
||
|
|
"line": 248,
|
||
|
|
"description": "Erreur lors du chargement des conversations loggée mais pas affichée à l'utilisateur",
|
||
|
|
"fix_recommendation": "Afficher un toast/notification d'erreur à l'utilisateur"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-049",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/stores/chat.ts",
|
||
|
|
"line": 269,
|
||
|
|
"description": "Erreur lors de la création de conversation loggée mais pas affichée à l'utilisateur",
|
||
|
|
"fix_recommendation": "Afficher un toast/notification d'erreur à l'utilisateur"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"id": "FRONT-050",
|
||
|
|
"type": "UI_UX",
|
||
|
|
"severity": "MEDIUM",
|
||
|
|
"blocking_production": false,
|
||
|
|
"file": "src/features/streaming/hooks/usePlaybackRealtime.ts",
|
||
|
|
"line": 147,
|
||
|
|
"description": "Hardcoding de 'http://localhost:8080' comme fallback pour l'URL API",
|
||
|
|
"fix_recommendation": "Supprimer le fallback localhost, forcer l'utilisation de variables d'environnement"
|
||
|
|
}
|
||
|
|
]
|