sourcefinder/CDC.md
Alexis Trouvé a7bd6115b7
Some checks failed
SourceFinder CI/CD Pipeline / Code Quality & Linting (push) Has been cancelled
SourceFinder CI/CD Pipeline / Unit Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Security Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Integration Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Performance Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Code Coverage Report (push) Has been cancelled
SourceFinder CI/CD Pipeline / Build & Deployment Validation (16.x) (push) Has been cancelled
SourceFinder CI/CD Pipeline / Build & Deployment Validation (18.x) (push) Has been cancelled
SourceFinder CI/CD Pipeline / Build & Deployment Validation (20.x) (push) Has been cancelled
SourceFinder CI/CD Pipeline / Regression Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Security Audit (push) Has been cancelled
SourceFinder CI/CD Pipeline / Notify Results (push) Has been cancelled
feat: Implémentation complète du système SourceFinder avec tests
- Architecture modulaire avec injection de dépendances
- Système de scoring intelligent multi-facteurs (spécificité, fraîcheur, qualité, réutilisation)
- Moteur anti-injection 4 couches (preprocessing, patterns, sémantique, pénalités)
- API REST complète avec validation et rate limiting
- Repository JSON avec index mémoire et backup automatique
- Provider LLM modulaire pour génération de contenu
- Suite de tests complète (Jest) :
  * Tests unitaires pour sécurité et scoring
  * Tests d'intégration API end-to-end
  * Tests de sécurité avec simulation d'attaques
  * Tests de performance et charge
- Pipeline CI/CD avec GitHub Actions
- Logging structuré et monitoring
- Configuration ESLint et environnement de test

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 23:06:10 +08:00

14 KiB
Raw Blame History

📋 CAHIER DES CHARGES - SourceFinder

🎯 1. CONTEXTE & OBJECTIFS

1.1 Présentation du projet

Service : SourceFinder - Service de recherche et scoring d'actualités
Client principal : PublicationAutomator (Autocollant.fr)
Problématique : Fournir des actualités pertinentes, scorées et sécurisées pour génération de contenu
Solution : API de recherche intelligente avec stock réutilisable et protection anti-injection

1.2 Objectifs business

  • API réutilisable : Service multi-clients pour différents projets de contenu
  • Qualité garantie : Sources vérifiées, scoring intelligent, anti-duplication
  • Performance : Réponses < 5 secondes, stock pré-constitué
  • Sécurité : Protection anti-prompt injection sur sources externes
  • Extensibilité : Ajout facile de nouvelles sources et critères de scoring

1.3 Positionnement microservice

Responsabilité unique : Sourcing, scoring, stockage et fourniture d'actualités
Indépendance : Développement, déploiement et scaling autonomes
API-first : Interface standardisée pour multiples clients

🔧 2. SPÉCIFICATIONS TECHNIQUES

2.1 Stack technique

Backend : Node.js + Express.js Architecture : Ultra-modulaire avec interfaces strictes et composants interchangeables News Provider : LLM par défaut (OpenAI/Claude), scraping/hybride disponibles via configuration Stockage : JSON par défaut, interface modulaire pour MongoDB/PostgreSQL Architecture stockage : Pattern Repository avec adaptateurs interchangeables Cache : Redis pour performance Monitoring : Logs structurés + métriques API

2.2 Architecture modulaire

[Client Request] → [Rate Limiting] → [Authentication] → [NewsSearchService]
                                                              ↓
[INewsProvider] ← [Dependency Injection] → [IScoringEngine] → [IStockRepository]
     ↓                                           ↓                    ↓
[LLMProvider*]                           [BasicScoring*]      [JSONRepository*]
[ScrapingProvider]                       [MLScoring]          [MongoRepository]
[HybridProvider]                         [LLMScoring]         [PostgreSQLRepo]

* = Implémentation par défaut

📊 3. SYSTÈME DE SCORING INTELLIGENT

3.1 Formule de scoring

Score_Final = (Spécificité_race × 0.4) + (Fraîcheur × 0.3) + (Qualité_source × 0.2) + (Anti_duplication × 0.1)

3.2 Spécificité race (40% du score)

  • Race exacte mentionnée : 100 points
  • Groupe/famille race : 70 points (ex: Bergers, Terriers)
  • Taille similaire : 50 points (grands chiens si race grande)
  • Usage similaire : 40 points (chiens de garde, chasse, etc.)
  • Générique chiens : 25 points
  • Animaux domestiques : 10 points

3.3 Fraîcheur (30% du score)

  • < 7 jours : 100 points
  • 7-30 jours : 70 points
  • 30-90 jours : 40 points
  • 90-180 jours : 20 points
  • > 180 jours : 5 points

3.4 Qualité source (20% du score)

  • Sources premium : 100 points (clubs officiels, vétérinaires, études)
  • Sources spécialisées : 80 points (magazines élevage, sites race)
  • Médias animaliers : 60 points (30 Millions d'Amis, Wamiz)
  • Presse généraliste : 40 points (Le Figaro, 20 Minutes)
  • Blogs/forums : 20 points (avec validation renforcée)

3.5 Anti-duplication (10% du score)

  • URL jamais utilisée : 100 points
  • Domaine peu utilisé : 70 points (< 3 usages)
  • Source recyclable : 50 points (> 90 jours depuis dernier usage)
  • Source récemment utilisée : 10 points

🛡️ 4. PROTECTION ANTI-PROMPT INJECTION

4.1 Problématique sécurité

Risque : Sources web peuvent contenir des prompts cachés pour manipuler les LLM
Impact : Génération de contenu non conforme, failles sécurité
Particulièrement critique : Sources spécialisées (blogs élevage, forums)

4.2 Système de protection multicouches

Layer 1: Content Preprocessing

function sanitizeContent(rawContent) {
  // Suppression instructions suspectes
  const dangerousPatterns = [
    /ignore\s+previous\s+instructions/i,
    /you\s+are\s+now/i,
    /forget\s+everything/i,
    /new\s+instructions:/i,
    /system\s+prompt:/i
  ];
  
  return cleanContent;
}

Layer 2: Pattern Detection

Patterns suspects :

  • Instructions directes : "You are now...", "Ignore previous..."
  • Redirections : "Instead of writing about dogs, write about..."
  • Code injections : Scripts, balises, commandes système
  • Métaprompts : "This is a test", "Output JSON format"

Layer 3: Semantic Validation

Vérifications :

  • Le contenu parle-t-il vraiment de la race mentionnée ?
  • Y a-t-il des incohérences flagrantes ?
  • Le ton correspond-il au site source ?
  • Présence d'éléments hors contexte ?

Layer 4: Source Scoring

Pénalités automatiques :

  • Détection prompt injection : -50 points
  • Contenu incohérent : -30 points
  • Source non fiable historiquement : -20 points

🗄️ 5. SYSTÈME DE STOCK INTELLIGENT

5.1 Architecture stockage modulaire

// Interface NewsStockRepository (adaptable JSON/MongoDB/PostgreSQL)
{
  id: String,
  url: String (unique),
  title: String,
  content: String,
  content_hash: String,

  // Classification
  race_tags: [String], // ["352-1", "bergers", "grands_chiens"]
  angle_tags: [String], // ["legislation", "sante", "comportement"]
  universal_tags: [String], // ["conseils_proprietaires", "securite"]

  // Scoring
  freshness_score: Number,
  quality_score: Number,
  specificity_score: Number,
  reusability_score: Number,
  final_score: Number,

  // Usage tracking
  usage_count: Number,
  last_used: Date,
  created_at: Date,
  expires_at: Date,

  // Metadata
  source_domain: String,
  source_type: String, // "premium", "standard", "fallback"
  language: String,
  status: String // "active", "expired", "blocked"
}

// Implémentation par défaut: JSON files avec index en mémoire
// Migration possible vers MongoDB/PostgreSQL sans changement de code métier

5.2 Catégories de stock

🥇 Premium Stock

Sources : Études vétérinaires, recherches officielles, clubs de race
Caractéristiques : Haute qualité, evergreen content, réutilisables
Usage : Limité à 3 fois, rotation 180 jours
Exemples : Études comportementales, guides officiels FCI

🥈 Standard Stock

Sources : News spécialisées, magazines élevage, sites vétérinaires
Caractéristiques : Qualité correcte, actualités temporaires
Usage : 2-3 fois, rotation 90 jours
Exemples : Actualités clubs, événements canins, nouvelles recherches

🥉 Fallback Stock

Sources : Conseils généraux, presse généraliste adaptée
Caractéristiques : Générique, toujours utilisable
Usage : Illimité avec variations, rotation 30 jours
Exemples : Conseils éducation, sécurité générale

5.3 Stratégie de constitution du stock

Collecte proactive : 20-30 sources/jour en background
Équilibrage : 50% spécialisées, 30% générales, 20% fallback
Couverture : Minimum 50 sources par race populaire
Refresh : Scanning quotidien nouvelles sources + nettoyage expiré

🔍 6. SYSTÈME DE SOURCING

6.1 Stratégie de recherche en cascade

Étape 1 : Sources spécialisées race (priorité)

Recherche : "[nom_race] actualité 2025", "[race] étude"
Sources :

  • Clubs de race officiels (.org)
  • Associations cynophiles nationales
  • Magazines spécialisés (Atout Chien, Rustica)
  • Forums modérés de race

Étape 2 : Sources animalières générales

Recherche : "chien [caractéristique] actualité", "[groupe_race] news"
Sources :

  • 30 Millions d'Amis (.com)
  • Wamiz (.com)
  • Sites vétérinaires (.vet)
  • Blogs reconnus éleveurs

Étape 3 : Fallback généraliste

Recherche : "animaux domestiques", "propriétaires chiens"
Sources :

  • Google News API
  • Grands médias (adaptés)
  • Sites conseils généralistes

6.2 Configuration sources

// config/sources.json
{
  "premium": [
    {
      "domain": "centrale-canine.fr",
      "type": "official",
      "weight": 100,
      "scraping_rules": {...},
      "rate_limit": "1req/5min"
    }
  ],
  "specialized": [...],
  "fallback": [...]
}

🔌 7. APIS EXPOSÉES

7.1 API principale de recherche

GET /api/v1/news/search

Paramètres :

{
  race_code: "352-1",           // Obligatoire
  product_context: "security_plate", // Optionnel
  min_score: 200,               // Défaut: 150
  max_age_days: 30,             // Défaut: 90
  max_results: 5,               // Défaut: 3
  categories: ["legislation", "health"], // Optionnel
  exclude_domains: ["example.com"],      // Optionnel
  include_stock: true           // Utiliser stock existant
}

Réponse :

{
  "status": "success",
  "results": [
    {
      "title": "Nouvelle réglementation Bergers Allemands",
      "url": "https://example.com/article",
      "content": "...",
      "score": 287,
      "breakdown": {
        "specificity": 100,
        "freshness": 85,
        "quality": 80,
        "anti_duplication": 22
      },
      "metadata": {
        "publish_date": "2025-09-10",
        "source_domain": "centrale-canine.fr",
        "categories": ["legislation"],
        "estimated_reading_time": "3min"
      }
    }
  ],
  "search_metadata": {
    "total_found": 12,
    "search_time_ms": 450,
    "sources_searched": 8,
    "from_stock": 2,
    "from_live": 3
  }
}

7.2 API de stock management

GET /api/v1/stock/status           # État du stock
POST /api/v1/stock/refresh         # Force refresh
DELETE /api/v1/stock/cleanup       # Nettoyage expiré
GET /api/v1/stock/race/{code}      # Stock par race

7.3 API de monitoring

GET /api/v1/health                 # Health check
GET /api/v1/metrics               # Métriques performance
GET /api/v1/sources/status        # État sources

⚙️ 8. WORKFLOW DE TRAITEMENT

8.1 Traitement requête en temps réel

1. Validation paramètres (race_code valide, etc.)
2. Recherche stock existant (filtrage par critères)
3. Si stock insuffisant → Recherche live sources
4. Scoring batch tous résultats trouvés
5. Anti-injection validation top résultats  
6. Tri par score décroissant
7. Retour résultats + mise à jour stock
8. Logging usage pour anti-duplication

8.2 Background processing

Cron daily 02:00 : Stock refresh & cleanup
Cron hourly     : Sources health check
Cron 4x/day     : New sources discovery
Real-time       : Usage tracking updates

📊 9. MÉTRIQUES & MONITORING

9.1 KPIs opérationnels

Performance :

  • Temps réponse API < 5 secondes (95e percentile)
  • Uptime > 99.5%
  • Taux succès recherche > 90%

Qualité :

  • Score moyen résultats > 200 points
  • Taux détection prompt injection < 1%
  • Couverture stock : 50+ sources par race populaire

Usage :

  • Requêtes/jour par client
  • Distribution scores retournés
  • Top races/contextes demandés

9.2 Alertes automatiques

Critique :

  • API down > 2 minutes
  • Aucun résultat pour race populaire
  • Détection prompt injection > 5% sur 1h

Warning :

  • Stock < 10 sources pour race
  • Performance dégradée > 10 secondes
  • Source premium indisponible

🚀 10. PLANNING DE DÉVELOPPEMENT

10.1 Phase 1 - Core API (2 semaines)

Système de scoring (25h)

  • Implémentation algorithme scoring
  • Base de données MongoDB/PostgreSQL
  • Configuration sources initiales
  • API recherche basique

Protection anti-injection (20h)

  • Patterns detection engine
  • Content sanitization
  • Validation sémantique basique
  • Tests sécurité

Stock management (15h)

  • Base de données stock
  • Logique réutilisation
  • CRUD APIs stock
  • Nettoyage automatique

10.2 Phase 2 - Sources avancées (2 semaines)

Web scraping robuste (30h)

  • Multi-sources scraping
  • Rate limiting intelligent
  • Error handling & retry
  • Proxies rotation

Recherche en cascade (20h)

  • Spécialisées → générales → fallback
  • Optimisation performance
  • Parallélisation searches
  • Fallback automatique

API complète (15h)

  • Paramètres avancés
  • Monitoring endpoints
  • Documentation OpenAPI
  • Rate limiting clients

10.3 Phase 3 - Production (1 semaine)

Monitoring & alertes (15h)

  • Métriques temps réel
  • Dashboard opérationnel
  • Alertes automatiques
  • Logs structurés

Performance & scale (10h)

  • Cache Redis
  • Optimisations requêtes
  • Tests charge
  • Déploiement production

💰 11. BUDGET & RESSOURCES

11.1 Coûts opérationnels estimés

Infrastructure :

  • Serveur Node.js : ~30€/mois
  • Base données MongoDB Atlas : ~25€/mois
  • Redis cache : ~15€/mois

APIs externes :

  • Google News API : ~50€/mois
  • Proxies web scraping : ~40€/mois

Total mensuel : ~160€/mois

11.2 Temps de développement

Développement initial : 125h sur 5 semaines Tests & validation : 20h Documentation : 10h Total : 155h

🎯 12. CRITÈRES DE RÉUSSITE

12.1 Objectifs quantifiés

Performance :

  • API réponse < 5s (95e percentile)
  • Uptime > 99.5%
  • 50+ sources par race populaire en stock

Qualité :

  • Score moyen > 200 points
  • 90% requêtes avec résultats pertinents
  • < 1% détection prompt injection

Business :

  • Support PublicationAutomator (1 article/jour)
  • Architecture prête 2+ clients additionnels
  • Extensible nouvelles sources facilement

12.2 Validation technique

Tests sécurité : Résistance prompt injection validée
Tests performance : Load testing 100 req/min
Tests intégration : PublicationAutomator end-to-end
Documentation : APIs documentées OpenAPI/Swagger


SourceFinder est conçu comme un service réutilisable de haute qualité, sécurisé et performant, capable de supporter multiple clients avec des besoins variés de contenu automatisé.