sourcefinder/test-data/stock/items/3b6ef080-7870-449f-ad27-d4efb252a25a.json
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

134 lines
4.2 KiB
JSON

{
"id": "3b6ef080-7870-449f-ad27-d4efb252a25a",
"title": "Conseils d'éducation pour le Berger Allemand",
"content": "L'éducation d'un Berger Allemand doit commencer dès son jeune âge. Ces chiens sont très intelligents et réagissent bien à un entraînement positif basé sur des récompenses. Utilisez des friandises, des éloges et des jeux pour renforcer les comportements souhaités. Les séances d'entraînement doivent être courtes mais fréquentes pour maintenir leur attention. Il est également essentiel d'incorporer des exercices de socialisation pour les habituer à différents environnements, personnes et autres animaux. Un Berger Allemand bien éduqué est un compagnon équilibré et heureux, capable de s'intégrer harmonieusement dans la vie de famille.",
"category": "education",
"keyPoints": [
"Commencer l'éducation dès le jeune âge",
"Utiliser des méthodes d'entraînement positif",
"Incorporer des exercices de socialisation"
],
"targetAudience": "propriétaires",
"raceCode": "352-1",
"sourceType": "llm_generated",
"provider": "OpenAI",
"model": "gpt-4o-mini",
"publishDate": "2025-09-15T12:29:59.188Z",
"url": "llm://generated/e9a58f36-50c7-48e6-be45-1d295bccd37f",
"scores": {
"specificity": 85,
"freshness": 100,
"quality": 80,
"reuse": 100
},
"generationMetadata": {
"originalQuery": {
"raceCode": "352-1",
"productContext": "Guide éducatif pour Berger Allemand",
"contentType": "education",
"clientId": "test-client-1"
},
"generatedAt": "2025-09-15T12:29:59.188Z",
"model": "gpt-4o-mini",
"temperature": 0.3
},
"finalScore": 57,
"specificityScore": 100,
"freshnessScore": 0,
"qualityScore": 37,
"reuseScore": 100,
"scoringDetails": {
"specificity": {
"score": 100,
"reason": "exact_race_match",
"details": "Mention exacte de la race trouvée: berger allemand",
"matchedTerms": [
"berger allemand"
]
},
"freshness": {
"score": 0,
"reason": "future_date",
"details": "Article daté du futur (1 jours)",
"ageInDays": -1,
"publishDate": "2025-09-15T12:29:59.188Z",
"searchDate": "2025-09-15T12:29:43.199Z"
},
"quality": {
"score": 37,
"reason": "unknown",
"details": "Source Source inconnue (generated) - Score de base: 30. Ajustements: +7",
"sourceInfo": {
"domain": "generated",
"sourceType": "unknown",
"baseScore": 30,
"adjustments": [
{
"type": "content_quality",
"value": 8,
"reason": "Longueur appropriée, Phrases bien structurées"
},
{
"type": "metadata_quality",
"value": 4,
"reason": "Date publication présente, URL propre"
},
{
"type": "domain_authority",
"value": -5,
"reason": "Source non référencée"
}
]
},
"qualityIndicators": {
"hasAuthor": false,
"hasPublishDate": true,
"hasMetadata": false,
"sourceType": "unknown",
"sourceCategory": "Source inconnue",
"contentLength": 682,
"isKnownSource": false
}
},
"reuse": {
"score": 100,
"reason": "never_used",
"details": "Article jamais utilisé, contenu_permanent (+5)",
"usageCount": 0,
"lastUsed": null,
"rotationStatus": "available",
"breakdown": {
"baseScore": 100,
"timeAdjustment": 0,
"contextAdjustment": 5
}
}
},
"scoringMetadata": {
"engine": "BasicScoringEngine",
"version": "1.0",
"weights": {
"specificity": 0.4,
"freshness": 0.3,
"quality": 0.2,
"reuse": 0.1
},
"calculationTime": 3,
"scoredAt": "2025-09-15T12:29:59.193Z",
"context": {
"raceCode": "352-1",
"clientId": "test-client-1",
"searchDate": "2025-09-15T12:29:43.199Z"
}
},
"scoreCategory": "fair",
"usageRecommendation": "review_needed",
"createdAt": "2025-09-15T12:29:59.210Z",
"updatedAt": "2025-09-15T12:29:59.210Z",
"_metadata": {
"version": 1,
"createdAt": "2025-09-15T12:29:59.210Z",
"updatedAt": "2025-09-15T12:29:59.210Z",
"checksum": "4a55707"
}
}