{
  "created_at": "2026-09-09T16:07:29Z",
  "questions": 64,
  "answerable": 56,
  "unanswerable": 8,
  "documents": 20,
  "machine": "arm64",
  "python": "3.12.13",
  "corpus_sha256": "f78a0ce51716660bd06be5d90de2dd46463f733e5141714a2b536265da613dbd",
  "selected": "rewrite",
  "selection_rule": "Recall@3 + refus correct − faux refus ; latence p95 pour départager.",
  "limitations": [
    "Corpus fictif de 20 sections publiques et 64 questions rédigées pour cette démonstration ; aucun jeu de test externe.",
    "Réponses extractives : le support textuel exact ne mesure pas la faithfulness d’un LLM ni la pertinence de la réponse.",
    "Une passe après préchauffage, CPU local, sans réseau et sans charge concurrente ; p95 indicatif.",
    "0 € d’appels API ; calcul, hébergement et maintenance exclus.",
    "Reformulation par glossaire déterministe. Seuil de refus heuristique non calibré sur un jeu indépendant."
  ],
  "results": [
    {
      "config": "naive",
      "label": "Vectoriel seul",
      "recall_at_3": 0.8571,
      "correct_refusal": 0.625,
      "false_refusal": 0.3036,
      "extractive_support": 1.0,
      "p95_ms": 13.25,
      "api_cost_eur": 0,
      "rows": [
        {
          "question": "Comment authentifier une requête Atlas ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais in",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:fixed:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais in",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:fixed:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "errors",
            "auth",
            "quota"
          ],
          "latency_ms": 7.31,
          "rewritten": "Comment authentifier une requête Atlas ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la durée de vie du jeton en version 2 ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version corres",
          "refused": false,
          "sources": [
            {
              "id": "version",
              "chunk": "version:fixed:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version corres",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:fixed:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "version",
            "backup",
            "auth-v1"
          ],
          "latency_ms": 8.01,
          "rewritten": "Quelle est la durée de vie du jeton en version 2 ?",
          "config": "naive",
          "hit": false,
          "supported": true
        },
        {
          "question": "Quel endpoint renouvelle le token ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "backup",
            "auth",
            "idempotency"
          ],
          "latency_ms": 8.2,
          "rewritten": "Quel endpoint renouvelle le token ?",
          "config": "naive",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quel est le quota de requêtes en v2 ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:fixed:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:1",
              "title": "Limites de requêtes",
              "text": "condes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:fixed:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "quota",
            "quota-v1"
          ],
          "latency_ms": 6.76,
          "rewritten": "Quel est le quota de requêtes en v2 ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que faire après une erreur 429 ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "retry",
            "backup",
            "deletion"
          ],
          "latency_ms": 7.15,
          "rewritten": "Que faire après une erreur 429 ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Combien de requêtes par minute pour une organisation ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:fixed:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:1",
              "title": "Limites de requêtes",
              "text": "condes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:fixed:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "quota",
            "quota-v1"
          ],
          "latency_ms": 7.48,
          "rewritten": "Combien de requêtes par minute pour une organisation ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment paginer les résultats en v2 ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par ",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:fixed:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par ",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:fixed:1",
              "title": "Reprise des webhooks",
              "text": "2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:fixed:1",
              "title": "Pagination",
              "text": "ètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "retry",
            "pagination"
          ],
          "latency_ms": 7.17,
          "rewritten": "Comment paginer les résultats en v2 ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la taille maximale d’une page ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par ",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:fixed:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par ",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:fixed:1",
              "title": "Pagination",
              "text": "ètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "pagination",
            "quota"
          ],
          "latency_ms": 6.47,
          "rewritten": "Quelle est la taille maximale d’une page ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel paramètre reçoit le curseur suivant ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "backup",
            "search",
            "quota"
          ],
          "latency_ms": 7.09,
          "rewritten": "Quel paramètre reçoit le curseur suivant ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Comment vérifier un webhook ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage",
          "refused": false,
          "sources": [
            {
              "id": "webhook",
              "chunk": "webhook:fixed:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:fixed:1",
              "title": "Reprise des webhooks",
              "text": "2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:fixed:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "webhook",
            "retry",
            "retry"
          ],
          "latency_ms": 6.42,
          "rewritten": "Comment vérifier un webhook ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel algorithme signe les webhooks ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage",
          "refused": false,
          "sources": [
            {
              "id": "webhook",
              "chunk": "webhook:fixed:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:fixed:1",
              "title": "Reprise des webhooks",
              "text": "2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:fixed:1",
              "title": "Signature des webhooks",
              "text": " 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "webhook",
            "retry",
            "webhook"
          ],
          "latency_ms": 7.16,
          "rewritten": "Quel algorithme signe les webhooks ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle tolérance temporelle pour la signature ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": " 300 secondes sur l’horodatage réduit le risque de rejeu.",
          "refused": false,
          "sources": [
            {
              "id": "webhook",
              "chunk": "webhook:fixed:1",
              "title": "Signature des webhooks",
              "text": " 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:fixed:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvo",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "webhook",
            "idempotency",
            "backup"
          ],
          "latency_ms": 7.6,
          "rewritten": "Quelle tolérance temporelle pour la signature ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de tentatives pour un webhook en échec ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:fixed:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:fixed:1",
              "title": "Signature des webhooks",
              "text": " 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "webhook",
            "quota"
          ],
          "latency_ms": 6.74,
          "rewritten": "Combien de tentatives pour un webhook en échec ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que signifie un code 410 pour un webhook ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:fixed:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:fixed:1",
              "title": "Idempotence des écritures",
              "text": " avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:fixed:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "idempotency",
            "webhook"
          ],
          "latency_ms": 7.07,
          "rewritten": "Que signifie un code 410 pour un webhook ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel code confirme la réception du webhook ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:fixed:1",
              "title": "Reprise des webhooks",
              "text": "2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:fixed:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:fixed:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "retry",
            "webhook"
          ],
          "latency_ms": 6.87,
          "rewritten": "Quel code confirme la réception du webhook ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment éviter les créations en double ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "timeout",
            "retention",
            "idempotency"
          ],
          "latency_ms": 6.71,
          "rewritten": "Comment éviter les créations en double ?",
          "config": "naive",
          "hit": true,
          "supported": false
        },
        {
          "question": "Combien de temps une clé d’idempotence est-elle conservée ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvo",
          "refused": false,
          "sources": [
            {
              "id": "idempotency",
              "chunk": "idempotency:fixed:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvo",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:fixed:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "idempotency",
            "backup",
            "retention"
          ],
          "latency_ms": 7.32,
          "rewritten": "Combien de temps une clé d’idempotence est-elle conservée ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que se passe-t-il si une clé est réutilisée avec un corps différent ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvo",
          "refused": false,
          "sources": [
            {
              "id": "idempotency",
              "chunk": "idempotency:fixed:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvo",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:fixed:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "idempotency",
            "webhook",
            "backup"
          ],
          "latency_ms": 7.13,
          "rewritten": "Que se passe-t-il si une clé est réutilisée avec un corps différent ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels formats peut-on importer ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "upload",
            "upload",
            "version"
          ],
          "latency_ms": 7.04,
          "rewritten": "Quels formats peut-on importer ?",
          "config": "naive",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quelle est la taille maximale d’un fichier ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par ",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:fixed:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par ",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "upload",
              "chunk": "upload:fixed:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "upload",
            "quota"
          ],
          "latency_ms": 6.66,
          "rewritten": "Quelle est la taille maximale d’un fichier ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Peut-on importer un PDF scanné directement ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
          "refused": false,
          "sources": [
            {
              "id": "upload",
              "chunk": "upload:fixed:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:fixed:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version corres",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "upload",
              "chunk": "upload:fixed:1",
              "title": "Import des fichiers",
              "text": "és ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "upload",
            "version",
            "upload"
          ],
          "latency_ms": 8.17,
          "rewritten": "Peut-on importer un PDF scanné directement ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment suivre une indexation ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeab",
          "refused": false,
          "sources": [
            {
              "id": "index",
              "chunk": "index:fixed:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeab",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:fixed:1",
              "title": "Indexation",
              "text": "n document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "search",
              "chunk": "search:fixed:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 ",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "index",
            "index",
            "search"
          ],
          "latency_ms": 7.13,
          "rewritten": "Comment suivre une indexation ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand un document devient-il interrogeable ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "refusal",
            "index",
            "deletion"
          ],
          "latency_ms": 8.79,
          "rewritten": "Quand un document devient-il interrogeable ?",
          "config": "naive",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quels sont les états d’un job ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeab",
          "refused": false,
          "sources": [
            {
              "id": "index",
              "chunk": "index:fixed:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeab",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "region",
              "chunk": "region:fixed:1",
              "title": "Région de stockage",
              "text": "région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "index",
            "region",
            "backup"
          ],
          "latency_ms": 7.27,
          "rewritten": "Quels sont les états d’un job ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand un document supprimé disparaît-il des recherches ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifi",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:fixed:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifi",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:fixed:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:fixed:1",
              "title": "Suppression des documents",
              "text": "t être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "retention",
            "deletion"
          ],
          "latency_ms": 7.43,
          "rewritten": "Quand un document supprimé disparaît-il des recherches ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel délai pour purger les sauvegardes ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifi",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:fixed:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifi",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:1",
              "title": "Limites de requêtes",
              "text": "condes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "backup",
            "quota"
          ],
          "latency_ms": 6.99,
          "rewritten": "Quel délai pour purger les sauvegardes ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que faut-il auditer lors d’une suppression ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifi",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:fixed:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifi",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:fixed:1",
              "title": "Suppression des documents",
              "text": "t être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:fixed:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les inst",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "deletion",
            "refusal"
          ],
          "latency_ms": 7.69,
          "rewritten": "Que faut-il auditer lors d’une suppression ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "À quel moment filtrer les permissions ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné",
          "refused": false,
          "sources": [
            {
              "id": "permissions",
              "chunk": "permissions:fixed:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:1",
              "title": "Limites de requêtes",
              "text": "condes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:fixed:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifi",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "permissions",
            "quota",
            "deletion"
          ],
          "latency_ms": 9.11,
          "rewritten": "À quel moment filtrer les permissions ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels champs assurent l’isolation documentaire ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "version",
            "permissions",
            "version"
          ],
          "latency_ms": 8.23,
          "rewritten": "Quels champs assurent l’isolation documentaire ?",
          "config": "naive",
          "hit": true,
          "supported": false
        },
        {
          "question": "Que devient un document sans rôle autorisé ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "deletion",
            "refusal",
            "permissions"
          ],
          "latency_ms": 7.12,
          "rewritten": "Que devient un document sans rôle autorisé ?",
          "config": "naive",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quelles métadonnées sont conservées ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:fixed:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:fixed:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version corres",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "region",
              "chunk": "region:fixed:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "version",
            "region"
          ],
          "latency_ms": 8.45,
          "rewritten": "Quelles métadonnées sont conservées ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle version utiliser par défaut ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version corres",
          "refused": false,
          "sources": [
            {
              "id": "version",
              "chunk": "version:fixed:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version corres",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:fixed:1",
              "title": "Versions documentaires",
              "text": "xplicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:fixed:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "version",
            "version",
            "auth-v1"
          ],
          "latency_ms": 7.37,
          "rewritten": "Quelle version utiliser par défaut ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment répondre à une question historique ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "refusal",
            "retention",
            "backup"
          ],
          "latency_ms": 7.11,
          "rewritten": "Comment répondre à une question historique ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Combien de temps conserver les traces techniques ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:fixed:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:fixed:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifi",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "backup",
            "deletion"
          ],
          "latency_ms": 8.78,
          "rewritten": "Combien de temps conserver les traces techniques ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle rétention pour le journal d’audit ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "refusal",
            "deletion",
            "deletion"
          ],
          "latency_ms": 10.04,
          "rewritten": "Quelle rétention pour le journal d’audit ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quels éléments masquer dans les logs ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "qués avant toute écriture dans les logs.",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:fixed:1",
              "title": "Conservation des traces",
              "text": "qués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:fixed:1",
              "title": "Idempotence des écritures",
              "text": " avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:fixed:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "idempotency",
            "webhook"
          ],
          "latency_ms": 8.57,
          "rewritten": "Quels éléments masquer dans les logs ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le format des erreurs Atlas ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais in",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:fixed:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais in",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:fixed:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:fixed:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "errors",
            "auth",
            "auth-v1"
          ],
          "latency_ms": 16.83,
          "rewritten": "Quel est le format des erreurs Atlas ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment retrouver la trace d’une erreur ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "refusal",
            "deletion",
            "retention"
          ],
          "latency_ms": 9.11,
          "rewritten": "Comment retrouver la trace d’une erreur ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Les erreurs publiques exposent-elles les détails internes ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "refusal",
            "errors",
            "deletion"
          ],
          "latency_ms": 8.44,
          "rewritten": "Les erreurs publiques exposent-elles les détails internes ?",
          "config": "naive",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quel est le timeout d’une recherche ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "refusal",
            "permissions",
            "deletion"
          ],
          "latency_ms": 7.66,
          "rewritten": "Quel est le timeout d’une recherche ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quel code indique une expiration du délai ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "backup",
            "auth",
            "auth"
          ],
          "latency_ms": 6.84,
          "rewritten": "Quel code indique une expiration du délai ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Combien de nouvelles tentatives après un timeout ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "backup",
            "quota",
            "timeout"
          ],
          "latency_ms": 7.56,
          "rewritten": "Combien de nouvelles tentatives après un timeout ?",
          "config": "naive",
          "hit": true,
          "supported": false
        },
        {
          "question": "Où sont stockées les données Atlas ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:fixed:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:fixed:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "errors",
              "chunk": "errors:fixed:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais in",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "retention",
            "errors"
          ],
          "latency_ms": 7.43,
          "rewritten": "Où sont stockées les données Atlas ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Les données sont-elles répliquées hors UE ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:fixed:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:fixed:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les inst",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:fixed:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "refusal",
            "retention"
          ],
          "latency_ms": 9.97,
          "rewritten": "Les données sont-elles répliquées hors UE ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand la région est-elle fixée ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:fixed:1",
              "title": "Région de stockage",
              "text": "région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "region",
              "chunk": "region:fixed:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "region",
            "backup"
          ],
          "latency_ms": 16.0,
          "rewritten": "Quand la région est-elle fixée ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la fréquence des sauvegardes ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "backup",
            "quota",
            "webhook"
          ],
          "latency_ms": 13.46,
          "rewritten": "Quelle est la fréquence des sauvegardes ?",
          "config": "naive",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quels sont le RPO et le RTO ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "auth",
            "backup",
            "region"
          ],
          "latency_ms": 9.64,
          "rewritten": "Quels sont le RPO et le RTO ?",
          "config": "naive",
          "hit": true,
          "supported": false
        },
        {
          "question": "À quelle fréquence tester une restauration ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
          "refused": false,
          "sources": [
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:1",
              "title": "Sauvegarde et restauration",
              "text": "s. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:fixed:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 ten",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "backup",
            "backup",
            "timeout"
          ],
          "latency_ms": 8.25,
          "rewritten": "À quelle fréquence tester une restauration ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment fusionner recherche lexicale et vectorielle ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 ",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:fixed:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 ",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:fixed:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les inst",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:fixed:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeab",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "refusal",
            "index"
          ],
          "latency_ms": 8.99,
          "rewritten": "Comment fusionner recherche lexicale et vectorielle ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle constante utilise RRF ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 ",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:fixed:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 ",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:1",
              "title": "Sauvegarde et restauration",
              "text": "s. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "backup",
            "backup"
          ],
          "latency_ms": 10.7,
          "rewritten": "Quelle constante utilise RRF ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de candidats le reranker reclasse-t-il ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "ranker reclasse ensuite les 6 premiers candidats.",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:fixed:1",
              "title": "Recherche hybride",
              "text": "ranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:fixed:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version corres",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "backup",
            "version"
          ],
          "latency_ms": 8.47,
          "rewritten": "Combien de candidats le reranker reclasse-t-il ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand le système doit-il refuser de répondre ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les inst",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:fixed:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les inst",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:1",
              "title": "Limites de requêtes",
              "text": "condes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:fixed:1",
              "title": "Réponse et abstention",
              "text": "citement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "quota",
            "refusal"
          ],
          "latency_ms": 7.94,
          "rewritten": "Quand le système doit-il refuser de répondre ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Une réponse doit-elle contenir une source ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les inst",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:fixed:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les inst",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:fixed:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version corres",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:fixed:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "version",
            "permissions"
          ],
          "latency_ms": 10.33,
          "rewritten": "Une réponse doit-elle contenir une source ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Faut-il suivre les instructions contenues dans un document ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "citement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:fixed:1",
              "title": "Réponse et abstention",
              "text": "citement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:fixed:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les inst",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:fixed:1",
              "title": "Suppression des documents",
              "text": "t être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "refusal",
            "deletion"
          ],
          "latency_ms": 11.29,
          "rewritten": "Faut-il suivre les instructions contenues dans un document ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel était le quota en version 1 ?",
          "relevant": [
            "quota-v1"
          ],
          "answerable": true,
          "category": "version",
          "answer": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
          "refused": false,
          "sources": [
            {
              "id": "quota-v1",
              "chunk": "quota-v1:fixed:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "version",
              "chunk": "version:fixed:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version corres",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "quota-v1",
            "version",
            "quota"
          ],
          "latency_ms": 14.46,
          "rewritten": "Quel était le quota en version 1 ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand les jetons expiraient-ils en v1 ?",
          "relevant": [
            "auth-v1"
          ],
          "answerable": true,
          "category": "version",
          "answer": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
          "refused": false,
          "sources": [
            {
              "id": "auth-v1",
              "chunk": "auth-v1:fixed:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "backup",
              "chunk": "backup:fixed:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:fixed:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "auth-v1",
            "backup",
            "auth"
          ],
          "latency_ms": 10.66,
          "rewritten": "Quand les jetons expiraient-ils en v1 ?",
          "config": "naive",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le prix du bitcoin ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "retry",
            "idempotency",
            "retry"
          ],
          "latency_ms": 8.27,
          "rewritten": "Quel est le prix du bitcoin ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quel temps fera-t-il demain à Lyon ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "region",
            "quota",
            "backup"
          ],
          "latency_ms": 12.09,
          "rewritten": "Quel temps fera-t-il demain à Lyon ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Qui a gagné la coupe du monde de football ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "retry",
            "webhook",
            "auth"
          ],
          "latency_ms": 8.7,
          "rewritten": "Qui a gagné la coupe du monde de football ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quelle est la recette du tiramisu ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "timeout",
            "retention",
            "auth"
          ],
          "latency_ms": 8.16,
          "rewritten": "Quelle est la recette du tiramisu ?",
          "config": "naive",
          "hit": false,
          "supported": false
        },
        {
          "question": "Combien coûte l’abonnement Atlas ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:fixed:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "upload",
              "chunk": "upload:fixed:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:fixed:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "upload",
            "quota-v1"
          ],
          "latency_ms": 8.45,
          "rewritten": "Combien coûte l’abonnement Atlas ?",
          "config": "naive",
          "hit": false,
          "supported": true
        },
        {
          "question": "Quel est le salaire du directeur Atlas ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:fixed:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:fixed:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:fixed:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "quota",
            "quota-v1"
          ],
          "latency_ms": 8.17,
          "rewritten": "Quel est le salaire du directeur Atlas ?",
          "config": "naive",
          "hit": false,
          "supported": true
        },
        {
          "question": "Atlas est-il certifié ISO 27001 ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:fixed:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:fixed:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:fixed:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "auth-v1",
            "quota-v1"
          ],
          "latency_ms": 9.22,
          "rewritten": "Atlas est-il certifié ISO 27001 ?",
          "config": "naive",
          "hit": false,
          "supported": true
        },
        {
          "question": "Quels sont les horaires du support téléphonique ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "quota",
            "backup",
            "timeout"
          ],
          "latency_ms": 10.16,
          "rewritten": "Quels sont les horaires du support téléphonique ?",
          "config": "naive",
          "hit": false,
          "supported": false
        }
      ]
    },
    {
      "config": "hybrid",
      "label": "Hybride",
      "recall_at_3": 0.9643,
      "correct_refusal": 0.625,
      "false_refusal": 0.125,
      "extractive_support": 1.0,
      "p95_ms": 10.83,
      "api_cost_eur": 0,
      "rows": [
        {
          "question": "Comment authentifier une requête Atlas ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "webhook",
            "quota-v1"
          ],
          "latency_ms": 8.07,
          "rewritten": "Comment authentifier une requête Atlas ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la durée de vie du jeton en version 2 ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
          "refused": false,
          "sources": [
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "version",
            "auth",
            "auth-v1"
          ],
          "latency_ms": 8.58,
          "rewritten": "Quelle est la durée de vie du jeton en version 2 ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel endpoint renouvelle le token ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "auth",
            "pagination",
            "idempotency"
          ],
          "latency_ms": 8.21,
          "rewritten": "Quel endpoint renouvelle le token ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le quota de requêtes en v2 ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "pagination",
            "quota-v1"
          ],
          "latency_ms": 9.26,
          "rewritten": "Quel est le quota de requêtes en v2 ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que faire après une erreur 429 ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "retry",
            "auth-v1"
          ],
          "latency_ms": 9.02,
          "rewritten": "Que faire après une erreur 429 ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de requêtes par minute pour une organisation ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "auth",
            "quota-v1"
          ],
          "latency_ms": 9.16,
          "rewritten": "Combien de requêtes par minute pour une organisation ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment paginer les résultats en v2 ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "quota",
            "webhook"
          ],
          "latency_ms": 14.27,
          "rewritten": "Comment paginer les résultats en v2 ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la taille maximale d’une page ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "quota",
            "idempotency"
          ],
          "latency_ms": 11.11,
          "rewritten": "Quelle est la taille maximale d’une page ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel paramètre reçoit le curseur suivant ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "quota",
            "auth"
          ],
          "latency_ms": 16.38,
          "rewritten": "Quel paramètre reçoit le curseur suivant ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment vérifier un webhook ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
          "refused": false,
          "sources": [
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "webhook",
            "retry",
            "pagination"
          ],
          "latency_ms": 14.35,
          "rewritten": "Comment vérifier un webhook ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel algorithme signe les webhooks ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
          "refused": false,
          "sources": [
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "webhook",
            "retry",
            "pagination"
          ],
          "latency_ms": 7.31,
          "rewritten": "Quel algorithme signe les webhooks ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle tolérance temporelle pour la signature ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
          "refused": false,
          "sources": [
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "webhook",
            "idempotency",
            "auth"
          ],
          "latency_ms": 7.39,
          "rewritten": "Quelle tolérance temporelle pour la signature ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de tentatives pour un webhook en échec ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "timeout",
            "webhook"
          ],
          "latency_ms": 7.09,
          "rewritten": "Combien de tentatives pour un webhook en échec ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que signifie un code 410 pour un webhook ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "webhook",
            "quota"
          ],
          "latency_ms": 7.44,
          "rewritten": "Que signifie un code 410 pour un webhook ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel code confirme la réception du webhook ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "webhook",
            "idempotency"
          ],
          "latency_ms": 7.45,
          "rewritten": "Quel code confirme la réception du webhook ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment éviter les créations en double ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "idempotency",
            "deletion",
            "pagination"
          ],
          "latency_ms": 7.05,
          "rewritten": "Comment éviter les créations en double ?",
          "config": "hybrid",
          "hit": true,
          "supported": false
        },
        {
          "question": "Combien de temps une clé d’idempotence est-elle conservée ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
          "refused": false,
          "sources": [
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "idempotency",
            "backup",
            "auth"
          ],
          "latency_ms": 7.45,
          "rewritten": "Combien de temps une clé d’idempotence est-elle conservée ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que se passe-t-il si une clé est réutilisée avec un corps différent ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
          "refused": false,
          "sources": [
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "idempotency",
            "webhook",
            "auth"
          ],
          "latency_ms": 7.97,
          "rewritten": "Que se passe-t-il si une clé est réutilisée avec un corps différent ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels formats peut-on importer ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "upload",
            "auth",
            "version"
          ],
          "latency_ms": 6.87,
          "rewritten": "Quels formats peut-on importer ?",
          "config": "hybrid",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quelle est la taille maximale d’un fichier ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "upload",
            "quota"
          ],
          "latency_ms": 7.12,
          "rewritten": "Quelle est la taille maximale d’un fichier ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Peut-on importer un PDF scanné directement ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
          "refused": false,
          "sources": [
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "upload",
            "pagination",
            "version"
          ],
          "latency_ms": 6.97,
          "rewritten": "Peut-on importer un PDF scanné directement ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment suivre une indexation ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
          "refused": false,
          "sources": [
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "index",
            "quota",
            "pagination"
          ],
          "latency_ms": 6.72,
          "rewritten": "Comment suivre une indexation ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand un document devient-il interrogeable ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "permissions",
            "index"
          ],
          "latency_ms": 7.21,
          "rewritten": "Quand un document devient-il interrogeable ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels sont les états d’un job ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
          "refused": false,
          "sources": [
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "index",
            "quota",
            "permissions"
          ],
          "latency_ms": 6.87,
          "rewritten": "Quels sont les états d’un job ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand un document supprimé disparaît-il des recherches ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "version",
            "permissions"
          ],
          "latency_ms": 7.44,
          "rewritten": "Quand un document supprimé disparaît-il des recherches ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel délai pour purger les sauvegardes ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "timeout",
            "retry"
          ],
          "latency_ms": 8.71,
          "rewritten": "Quel délai pour purger les sauvegardes ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que faut-il auditer lors d’une suppression ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "quota",
            "permissions"
          ],
          "latency_ms": 6.91,
          "rewritten": "Que faut-il auditer lors d’une suppression ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "À quel moment filtrer les permissions ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
          "refused": false,
          "sources": [
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "permissions",
            "auth",
            "quota"
          ],
          "latency_ms": 7.1,
          "rewritten": "À quel moment filtrer les permissions ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels champs assurent l’isolation documentaire ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "permissions",
            "deletion",
            "version"
          ],
          "latency_ms": 7.1,
          "rewritten": "Quels champs assurent l’isolation documentaire ?",
          "config": "hybrid",
          "hit": true,
          "supported": false
        },
        {
          "question": "Que devient un document sans rôle autorisé ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
          "refused": false,
          "sources": [
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "permissions",
            "version",
            "deletion"
          ],
          "latency_ms": 6.77,
          "rewritten": "Que devient un document sans rôle autorisé ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelles métadonnées sont conservées ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "quota",
            "webhook"
          ],
          "latency_ms": 6.84,
          "rewritten": "Quelles métadonnées sont conservées ?",
          "config": "hybrid",
          "hit": false,
          "supported": true
        },
        {
          "question": "Quelle version utiliser par défaut ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
          "refused": false,
          "sources": [
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "version",
            "permissions",
            "auth-v1"
          ],
          "latency_ms": 6.91,
          "rewritten": "Quelle version utiliser par défaut ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment répondre à une question historique ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "version",
            "refusal",
            "auth"
          ],
          "latency_ms": 7.21,
          "rewritten": "Comment répondre à une question historique ?",
          "config": "hybrid",
          "hit": true,
          "supported": false
        },
        {
          "question": "Combien de temps conserver les traces techniques ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "backup",
            "quota"
          ],
          "latency_ms": 7.03,
          "rewritten": "Combien de temps conserver les traces techniques ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle rétention pour le journal d’audit ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "deletion",
            "quota"
          ],
          "latency_ms": 7.04,
          "rewritten": "Quelle rétention pour le journal d’audit ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels éléments masquer dans les logs ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "retention",
            "webhook",
            "pagination"
          ],
          "latency_ms": 7.2,
          "rewritten": "Quels éléments masquer dans les logs ?",
          "config": "hybrid",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quel est le format des erreurs Atlas ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "errors",
            "auth",
            "auth-v1"
          ],
          "latency_ms": 7.1,
          "rewritten": "Quel est le format des erreurs Atlas ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment retrouver la trace d’une erreur ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "errors",
            "retry",
            "webhook"
          ],
          "latency_ms": 6.87,
          "rewritten": "Comment retrouver la trace d’une erreur ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Les erreurs publiques exposent-elles les détails internes ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "errors",
            "retry",
            "permissions"
          ],
          "latency_ms": 7.16,
          "rewritten": "Les erreurs publiques exposent-elles les détails internes ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le timeout d’une recherche ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "permissions",
            "timeout",
            "search"
          ],
          "latency_ms": 7.03,
          "rewritten": "Quel est le timeout d’une recherche ?",
          "config": "hybrid",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quel code indique une expiration du délai ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
          "refused": false,
          "sources": [
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "timeout",
            "auth",
            "retry"
          ],
          "latency_ms": 7.4,
          "rewritten": "Quel code indique une expiration du délai ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de nouvelles tentatives après un timeout ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
          "refused": false,
          "sources": [
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "timeout",
            "quota",
            "auth-v1"
          ],
          "latency_ms": 7.08,
          "rewritten": "Combien de nouvelles tentatives après un timeout ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Où sont stockées les données Atlas ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "region",
            "auth",
            "quota-v1"
          ],
          "latency_ms": 6.86,
          "rewritten": "Où sont stockées les données Atlas ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Les données sont-elles répliquées hors UE ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "quota",
            "webhook"
          ],
          "latency_ms": 7.22,
          "rewritten": "Les données sont-elles répliquées hors UE ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand la région est-elle fixée ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "search",
              "chunk": "search:semantic:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "auth",
            "search"
          ],
          "latency_ms": 7.76,
          "rewritten": "Quand la région est-elle fixée ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la fréquence des sauvegardes ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "quota",
            "retry",
            "deletion"
          ],
          "latency_ms": 7.02,
          "rewritten": "Quelle est la fréquence des sauvegardes ?",
          "config": "hybrid",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quels sont le RPO et le RTO ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
          "refused": false,
          "sources": [
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "backup",
            "auth",
            "quota"
          ],
          "latency_ms": 6.81,
          "rewritten": "Quels sont le RPO et le RTO ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "À quelle fréquence tester une restauration ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
          "refused": false,
          "sources": [
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "backup",
            "quota",
            "auth"
          ],
          "latency_ms": 7.51,
          "rewritten": "À quelle fréquence tester une restauration ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment fusionner recherche lexicale et vectorielle ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:semantic:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "permissions",
            "timeout"
          ],
          "latency_ms": 7.03,
          "rewritten": "Comment fusionner recherche lexicale et vectorielle ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle constante utilise RRF ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:semantic:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "webhook",
            "quota"
          ],
          "latency_ms": 6.89,
          "rewritten": "Quelle constante utilise RRF ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de candidats le reranker reclasse-t-il ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:semantic:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "quota",
            "auth"
          ],
          "latency_ms": 7.2,
          "rewritten": "Combien de candidats le reranker reclasse-t-il ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand le système doit-il refuser de répondre ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "quota",
            "deletion"
          ],
          "latency_ms": 7.39,
          "rewritten": "Quand le système doit-il refuser de répondre ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Une réponse doit-elle contenir une source ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "version",
            "errors"
          ],
          "latency_ms": 7.19,
          "rewritten": "Une réponse doit-elle contenir une source ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Faut-il suivre les instructions contenues dans un document ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "permissions",
            "deletion"
          ],
          "latency_ms": 7.22,
          "rewritten": "Faut-il suivre les instructions contenues dans un document ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel était le quota en version 1 ?",
          "relevant": [
            "quota-v1"
          ],
          "answerable": true,
          "category": "version",
          "answer": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
          "refused": false,
          "sources": [
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "quota-v1",
            "version",
            "quota"
          ],
          "latency_ms": 6.68,
          "rewritten": "Quel était le quota en version 1 ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand les jetons expiraient-ils en v1 ?",
          "relevant": [
            "auth-v1"
          ],
          "answerable": true,
          "category": "version",
          "answer": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
          "refused": false,
          "sources": [
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "auth-v1",
            "auth",
            "retention"
          ],
          "latency_ms": 7.23,
          "rewritten": "Quand les jetons expiraient-ils en v1 ?",
          "config": "hybrid",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le prix du bitcoin ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "retry",
            "idempotency",
            "pagination"
          ],
          "latency_ms": 6.62,
          "rewritten": "Quel est le prix du bitcoin ?",
          "config": "hybrid",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quel temps fera-t-il demain à Lyon ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "backup",
            "quota",
            "pagination"
          ],
          "latency_ms": 7.24,
          "rewritten": "Quel temps fera-t-il demain à Lyon ?",
          "config": "hybrid",
          "hit": false,
          "supported": false
        },
        {
          "question": "Qui a gagné la coupe du monde de football ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "webhook",
            "pagination",
            "auth"
          ],
          "latency_ms": 7.3,
          "rewritten": "Qui a gagné la coupe du monde de football ?",
          "config": "hybrid",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quelle est la recette du tiramisu ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "idempotency",
            "pagination",
            "auth"
          ],
          "latency_ms": 6.96,
          "rewritten": "Quelle est la recette du tiramisu ?",
          "config": "hybrid",
          "hit": false,
          "supported": false
        },
        {
          "question": "Combien coûte l’abonnement Atlas ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
          "refused": false,
          "sources": [
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "upload",
            "quota-v1",
            "auth-v1"
          ],
          "latency_ms": 6.94,
          "rewritten": "Combien coûte l’abonnement Atlas ?",
          "config": "hybrid",
          "hit": false,
          "supported": true
        },
        {
          "question": "Quel est le salaire du directeur Atlas ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "quota-v1",
            "auth-v1"
          ],
          "latency_ms": 6.9,
          "rewritten": "Quel est le salaire du directeur Atlas ?",
          "config": "hybrid",
          "hit": false,
          "supported": true
        },
        {
          "question": "Atlas est-il certifié ISO 27001 ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "auth-v1",
            "quota-v1"
          ],
          "latency_ms": 7.28,
          "rewritten": "Atlas est-il certifié ISO 27001 ?",
          "config": "hybrid",
          "hit": false,
          "supported": true
        },
        {
          "question": "Quels sont les horaires du support téléphonique ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "auth",
            "quota",
            "idempotency"
          ],
          "latency_ms": 7.49,
          "rewritten": "Quels sont les horaires du support téléphonique ?",
          "config": "hybrid",
          "hit": false,
          "supported": false
        }
      ]
    },
    {
      "config": "rerank",
      "label": "Hybride + rerank",
      "recall_at_3": 0.9643,
      "correct_refusal": 0.625,
      "false_refusal": 0.1429,
      "extractive_support": 1.0,
      "p95_ms": 59.86,
      "api_cost_eur": 0,
      "rows": [
        {
          "question": "Comment authentifier une requête Atlas ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "quota",
            "auth-v1"
          ],
          "latency_ms": 41.56,
          "rewritten": "Comment authentifier une requête Atlas ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la durée de vie du jeton en version 2 ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "retention",
            "auth-v1"
          ],
          "latency_ms": 38.92,
          "rewritten": "Quelle est la durée de vie du jeton en version 2 ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel endpoint renouvelle le token ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "auth",
            "backup",
            "pagination"
          ],
          "latency_ms": 40.9,
          "rewritten": "Quel endpoint renouvelle le token ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le quota de requêtes en v2 ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "pagination",
            "quota-v1"
          ],
          "latency_ms": 39.21,
          "rewritten": "Quel est le quota de requêtes en v2 ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que faire après une erreur 429 ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "quota",
            "deletion",
            "retry"
          ],
          "latency_ms": 37.38,
          "rewritten": "Que faire après une erreur 429 ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de requêtes par minute pour une organisation ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "timeout",
            "quota-v1"
          ],
          "latency_ms": 47.56,
          "rewritten": "Combien de requêtes par minute pour une organisation ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment paginer les résultats en v2 ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "quota",
            "index"
          ],
          "latency_ms": 37.82,
          "rewritten": "Comment paginer les résultats en v2 ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la taille maximale d’une page ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "quota",
            "retry"
          ],
          "latency_ms": 37.52,
          "rewritten": "Quelle est la taille maximale d’une page ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel paramètre reçoit le curseur suivant ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "quota",
            "idempotency"
          ],
          "latency_ms": 44.81,
          "rewritten": "Quel paramètre reçoit le curseur suivant ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment vérifier un webhook ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "webhook",
            "index"
          ],
          "latency_ms": 37.16,
          "rewritten": "Comment vérifier un webhook ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel algorithme signe les webhooks ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
          "refused": false,
          "sources": [
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "webhook",
            "retry",
            "pagination"
          ],
          "latency_ms": 60.03,
          "rewritten": "Quel algorithme signe les webhooks ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle tolérance temporelle pour la signature ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
          "refused": false,
          "sources": [
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "webhook",
            "idempotency",
            "quota"
          ],
          "latency_ms": 60.63,
          "rewritten": "Quelle tolérance temporelle pour la signature ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de tentatives pour un webhook en échec ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "timeout",
            "quota"
          ],
          "latency_ms": 58.87,
          "rewritten": "Combien de tentatives pour un webhook en échec ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que signifie un code 410 pour un webhook ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "webhook",
            "idempotency"
          ],
          "latency_ms": 67.08,
          "rewritten": "Que signifie un code 410 pour un webhook ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel code confirme la réception du webhook ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "webhook",
            "idempotency"
          ],
          "latency_ms": 53.85,
          "rewritten": "Quel code confirme la réception du webhook ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment éviter les créations en double ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "idempotency",
            "deletion",
            "quota"
          ],
          "latency_ms": 47.25,
          "rewritten": "Comment éviter les créations en double ?",
          "config": "rerank",
          "hit": true,
          "supported": false
        },
        {
          "question": "Combien de temps une clé d’idempotence est-elle conservée ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
          "refused": false,
          "sources": [
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "idempotency",
            "backup",
            "deletion"
          ],
          "latency_ms": 56.12,
          "rewritten": "Combien de temps une clé d’idempotence est-elle conservée ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que se passe-t-il si une clé est réutilisée avec un corps différent ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
          "refused": false,
          "sources": [
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "idempotency",
            "refusal",
            "retry"
          ],
          "latency_ms": 77.97,
          "rewritten": "Que se passe-t-il si une clé est réutilisée avec un corps différent ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels formats peut-on importer ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "upload",
            "version",
            "region"
          ],
          "latency_ms": 53.88,
          "rewritten": "Quels formats peut-on importer ?",
          "config": "rerank",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quelle est la taille maximale d’un fichier ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
          "refused": false,
          "sources": [
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "upload",
            "pagination",
            "timeout"
          ],
          "latency_ms": 38.58,
          "rewritten": "Quelle est la taille maximale d’un fichier ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Peut-on importer un PDF scanné directement ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
          "refused": false,
          "sources": [
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "upload",
            "version",
            "deletion"
          ],
          "latency_ms": 42.1,
          "rewritten": "Peut-on importer un PDF scanné directement ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment suivre une indexation ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
          "refused": false,
          "sources": [
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "index",
            "auth",
            "timeout"
          ],
          "latency_ms": 38.62,
          "rewritten": "Comment suivre une indexation ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand un document devient-il interrogeable ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
          "refused": false,
          "sources": [
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "index",
            "deletion",
            "refusal"
          ],
          "latency_ms": 39.91,
          "rewritten": "Quand un document devient-il interrogeable ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels sont les états d’un job ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
          "refused": false,
          "sources": [
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "index",
            "backup",
            "quota"
          ],
          "latency_ms": 39.03,
          "rewritten": "Quels sont les états d’un job ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand un document supprimé disparaît-il des recherches ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "permissions",
            "timeout"
          ],
          "latency_ms": 44.76,
          "rewritten": "Quand un document supprimé disparaît-il des recherches ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel délai pour purger les sauvegardes ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "retention",
            "auth"
          ],
          "latency_ms": 38.89,
          "rewritten": "Quel délai pour purger les sauvegardes ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que faut-il auditer lors d’une suppression ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "index",
            "quota"
          ],
          "latency_ms": 42.36,
          "rewritten": "Que faut-il auditer lors d’une suppression ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "À quel moment filtrer les permissions ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
          "refused": false,
          "sources": [
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "permissions",
            "auth",
            "deletion"
          ],
          "latency_ms": 36.15,
          "rewritten": "À quel moment filtrer les permissions ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels champs assurent l’isolation documentaire ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "permissions",
            "version",
            "retention"
          ],
          "latency_ms": 44.1,
          "rewritten": "Quels champs assurent l’isolation documentaire ?",
          "config": "rerank",
          "hit": true,
          "supported": false
        },
        {
          "question": "Que devient un document sans rôle autorisé ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
          "refused": false,
          "sources": [
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "permissions",
            "version",
            "index"
          ],
          "latency_ms": 47.49,
          "rewritten": "Que devient un document sans rôle autorisé ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelles métadonnées sont conservées ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "version",
            "quota",
            "retention"
          ],
          "latency_ms": 42.38,
          "rewritten": "Quelles métadonnées sont conservées ?",
          "config": "rerank",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quelle version utiliser par défaut ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "permissions",
            "quota-v1"
          ],
          "latency_ms": 33.25,
          "rewritten": "Quelle version utiliser par défaut ?",
          "config": "rerank",
          "hit": false,
          "supported": true
        },
        {
          "question": "Comment répondre à une question historique ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "version",
            "refusal",
            "auth"
          ],
          "latency_ms": 34.78,
          "rewritten": "Comment répondre à une question historique ?",
          "config": "rerank",
          "hit": true,
          "supported": false
        },
        {
          "question": "Combien de temps conserver les traces techniques ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "deletion",
            "backup"
          ],
          "latency_ms": 36.19,
          "rewritten": "Combien de temps conserver les traces techniques ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle rétention pour le journal d’audit ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "quota",
            "deletion"
          ],
          "latency_ms": 40.23,
          "rewritten": "Quelle rétention pour le journal d’audit ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels éléments masquer dans les logs ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "retention",
            "pagination",
            "retry"
          ],
          "latency_ms": 42.07,
          "rewritten": "Quels éléments masquer dans les logs ?",
          "config": "rerank",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quel est le format des erreurs Atlas ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "errors",
            "auth",
            "quota-v1"
          ],
          "latency_ms": 37.54,
          "rewritten": "Quel est le format des erreurs Atlas ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment retrouver la trace d’une erreur ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "errors",
            "retention",
            "refusal"
          ],
          "latency_ms": 39.91,
          "rewritten": "Comment retrouver la trace d’une erreur ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Les erreurs publiques exposent-elles les détails internes ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "errors",
            "retry",
            "index"
          ],
          "latency_ms": 53.84,
          "rewritten": "Les erreurs publiques exposent-elles les détails internes ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le timeout d’une recherche ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "timeout",
            "quota",
            "deletion"
          ],
          "latency_ms": 47.44,
          "rewritten": "Quel est le timeout d’une recherche ?",
          "config": "rerank",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quel code indique une expiration du délai ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
          "refused": false,
          "sources": [
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "timeout",
            "quota",
            "retry"
          ],
          "latency_ms": 36.89,
          "rewritten": "Quel code indique une expiration du délai ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de nouvelles tentatives après un timeout ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
          "refused": false,
          "sources": [
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "timeout",
            "quota",
            "retry"
          ],
          "latency_ms": 39.44,
          "rewritten": "Combien de nouvelles tentatives après un timeout ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Où sont stockées les données Atlas ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "retention",
            "auth"
          ],
          "latency_ms": 37.48,
          "rewritten": "Où sont stockées les données Atlas ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Les données sont-elles répliquées hors UE ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "deletion",
            "retention"
          ],
          "latency_ms": 39.96,
          "rewritten": "Les données sont-elles répliquées hors UE ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand la région est-elle fixée ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "auth",
            "deletion"
          ],
          "latency_ms": 36.86,
          "rewritten": "Quand la région est-elle fixée ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la fréquence des sauvegardes ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "retention",
            "deletion",
            "retry"
          ],
          "latency_ms": 37.74,
          "rewritten": "Quelle est la fréquence des sauvegardes ?",
          "config": "rerank",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quels sont le RPO et le RTO ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
          "refused": false,
          "sources": [
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "backup",
            "idempotency",
            "index"
          ],
          "latency_ms": 39.82,
          "rewritten": "Quels sont le RPO et le RTO ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "À quelle fréquence tester une restauration ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
          "refused": false,
          "sources": [
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "backup",
            "deletion",
            "retention"
          ],
          "latency_ms": 37.83,
          "rewritten": "À quelle fréquence tester une restauration ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment fusionner recherche lexicale et vectorielle ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:semantic:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "version",
            "permissions"
          ],
          "latency_ms": 40.17,
          "rewritten": "Comment fusionner recherche lexicale et vectorielle ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle constante utilise RRF ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:semantic:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "idempotency",
            "quota"
          ],
          "latency_ms": 39.26,
          "rewritten": "Quelle constante utilise RRF ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de candidats le reranker reclasse-t-il ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:semantic:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "quota",
            "auth"
          ],
          "latency_ms": 44.58,
          "rewritten": "Combien de candidats le reranker reclasse-t-il ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand le système doit-il refuser de répondre ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "retry",
            "quota"
          ],
          "latency_ms": 38.33,
          "rewritten": "Quand le système doit-il refuser de répondre ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Une réponse doit-elle contenir une source ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "version",
            "errors"
          ],
          "latency_ms": 38.26,
          "rewritten": "Une réponse doit-elle contenir une source ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Faut-il suivre les instructions contenues dans un document ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "version",
            "index"
          ],
          "latency_ms": 39.34,
          "rewritten": "Faut-il suivre les instructions contenues dans un document ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel était le quota en version 1 ?",
          "relevant": [
            "quota-v1"
          ],
          "answerable": true,
          "category": "version",
          "answer": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
          "refused": false,
          "sources": [
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "quota-v1",
            "auth-v1",
            "quota"
          ],
          "latency_ms": 36.74,
          "rewritten": "Quel était le quota en version 1 ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand les jetons expiraient-ils en v1 ?",
          "relevant": [
            "auth-v1"
          ],
          "answerable": true,
          "category": "version",
          "answer": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
          "refused": false,
          "sources": [
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "auth-v1",
            "auth",
            "retention"
          ],
          "latency_ms": 39.2,
          "rewritten": "Quand les jetons expiraient-ils en v1 ?",
          "config": "rerank",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le prix du bitcoin ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "quota",
            "version",
            "idempotency"
          ],
          "latency_ms": 37.1,
          "rewritten": "Quel est le prix du bitcoin ?",
          "config": "rerank",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quel temps fera-t-il demain à Lyon ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "backup",
            "auth",
            "quota"
          ],
          "latency_ms": 43.11,
          "rewritten": "Quel temps fera-t-il demain à Lyon ?",
          "config": "rerank",
          "hit": false,
          "supported": false
        },
        {
          "question": "Qui a gagné la coupe du monde de football ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "auth",
            "quota",
            "pagination"
          ],
          "latency_ms": 39.42,
          "rewritten": "Qui a gagné la coupe du monde de football ?",
          "config": "rerank",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quelle est la recette du tiramisu ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "idempotency",
            "backup",
            "auth"
          ],
          "latency_ms": 37.52,
          "rewritten": "Quelle est la recette du tiramisu ?",
          "config": "rerank",
          "hit": false,
          "supported": false
        },
        {
          "question": "Combien coûte l’abonnement Atlas ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "upload",
            "quota-v1"
          ],
          "latency_ms": 35.97,
          "rewritten": "Combien coûte l’abonnement Atlas ?",
          "config": "rerank",
          "hit": false,
          "supported": true
        },
        {
          "question": "Quel est le salaire du directeur Atlas ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "upload",
            "quota-v1"
          ],
          "latency_ms": 38.64,
          "rewritten": "Quel est le salaire du directeur Atlas ?",
          "config": "rerank",
          "hit": false,
          "supported": true
        },
        {
          "question": "Atlas est-il certifié ISO 27001 ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "region",
            "quota-v1",
            "auth-v1"
          ],
          "latency_ms": 39.49,
          "rewritten": "Atlas est-il certifié ISO 27001 ?",
          "config": "rerank",
          "hit": false,
          "supported": true
        },
        {
          "question": "Quels sont les horaires du support téléphonique ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "backup",
            "timeout",
            "idempotency"
          ],
          "latency_ms": 37.28,
          "rewritten": "Quels sont les horaires du support téléphonique ?",
          "config": "rerank",
          "hit": false,
          "supported": false
        }
      ]
    },
    {
      "config": "rewrite",
      "label": "+ reformulation",
      "recall_at_3": 0.9643,
      "correct_refusal": 0.625,
      "false_refusal": 0.1071,
      "extractive_support": 1.0,
      "p95_ms": 50.61,
      "api_cost_eur": 0,
      "rows": [
        {
          "question": "Comment authentifier une requête Atlas ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "quota",
            "auth-v1"
          ],
          "latency_ms": 40.95,
          "rewritten": "Comment authentifier une requête Atlas ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la durée de vie du jeton en version 2 ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "retention",
            "auth-v1"
          ],
          "latency_ms": 37.35,
          "rewritten": "Quelle est la durée de vie du jeton en version 2 ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel endpoint renouvelle le token ?",
          "relevant": [
            "auth"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "idempotency",
            "auth-v1"
          ],
          "latency_ms": 40.91,
          "rewritten": "Quel endpoint renouvelle le token ? jeton authentification",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le quota de requêtes en v2 ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "pagination",
            "quota-v1"
          ],
          "latency_ms": 38.42,
          "rewritten": "Quel est le quota de requêtes en v2 ? version 2",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que faire après une erreur 429 ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "idempotency",
            "quota-v1"
          ],
          "latency_ms": 40.54,
          "rewritten": "Que faire après une erreur 429 ? quota limite requêtes",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de requêtes par minute pour une organisation ?",
          "relevant": [
            "quota"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "timeout",
            "quota-v1"
          ],
          "latency_ms": 38.31,
          "rewritten": "Combien de requêtes par minute pour une organisation ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment paginer les résultats en v2 ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "quota",
            "retry"
          ],
          "latency_ms": 38.77,
          "rewritten": "Comment paginer les résultats en v2 ? version 2",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la taille maximale d’une page ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "quota",
            "retry"
          ],
          "latency_ms": 41.84,
          "rewritten": "Quelle est la taille maximale d’une page ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel paramètre reçoit le curseur suivant ?",
          "relevant": [
            "pagination"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
          "refused": false,
          "sources": [
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "pagination",
            "quota",
            "idempotency"
          ],
          "latency_ms": 40.34,
          "rewritten": "Quel paramètre reçoit le curseur suivant ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment vérifier un webhook ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "webhook",
            "index"
          ],
          "latency_ms": 37.4,
          "rewritten": "Comment vérifier un webhook ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel algorithme signe les webhooks ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
          "refused": false,
          "sources": [
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "webhook",
            "retry",
            "pagination"
          ],
          "latency_ms": 38.03,
          "rewritten": "Quel algorithme signe les webhooks ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle tolérance temporelle pour la signature ?",
          "relevant": [
            "webhook"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
          "refused": false,
          "sources": [
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "webhook",
            "idempotency",
            "quota"
          ],
          "latency_ms": 38.48,
          "rewritten": "Quelle tolérance temporelle pour la signature ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de tentatives pour un webhook en échec ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "timeout",
            "quota"
          ],
          "latency_ms": 39.02,
          "rewritten": "Combien de tentatives pour un webhook en échec ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que signifie un code 410 pour un webhook ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "webhook",
            "idempotency"
          ],
          "latency_ms": 37.95,
          "rewritten": "Que signifie un code 410 pour un webhook ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel code confirme la réception du webhook ?",
          "relevant": [
            "retry"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
          "refused": false,
          "sources": [
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "webhook",
              "chunk": "webhook:semantic:0",
              "title": "Signature des webhooks",
              "text": "Chaque webhook Atlas porte une signature HMAC-SHA256 dans X-Atlas-Signature. Le calcul utilise le corps brut et le secret du webhook. Une tolérance de 300 secondes sur l’horodatage réduit le risque de rejeu.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 4,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retry",
            "webhook",
            "idempotency"
          ],
          "latency_ms": 38.21,
          "rewritten": "Quel code confirme la réception du webhook ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment éviter les créations en double ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "idempotency",
            "deletion",
            "quota"
          ],
          "latency_ms": 36.84,
          "rewritten": "Comment éviter les créations en double ?",
          "config": "rewrite",
          "hit": true,
          "supported": false
        },
        {
          "question": "Combien de temps une clé d’idempotence est-elle conservée ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
          "refused": false,
          "sources": [
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "idempotency",
            "backup",
            "deletion"
          ],
          "latency_ms": 41.38,
          "rewritten": "Combien de temps une clé d’idempotence est-elle conservée ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que se passe-t-il si une clé est réutilisée avec un corps différent ?",
          "relevant": [
            "idempotency"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
          "refused": false,
          "sources": [
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "idempotency",
            "refusal",
            "retry"
          ],
          "latency_ms": 42.03,
          "rewritten": "Que se passe-t-il si une clé est réutilisée avec un corps différent ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels formats peut-on importer ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "upload",
            "version",
            "region"
          ],
          "latency_ms": 39.74,
          "rewritten": "Quels formats peut-on importer ?",
          "config": "rewrite",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quelle est la taille maximale d’un fichier ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
          "refused": false,
          "sources": [
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "upload",
            "pagination",
            "timeout"
          ],
          "latency_ms": 35.85,
          "rewritten": "Quelle est la taille maximale d’un fichier ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Peut-on importer un PDF scanné directement ?",
          "relevant": [
            "upload"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
          "refused": false,
          "sources": [
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "upload",
            "version",
            "deletion"
          ],
          "latency_ms": 39.0,
          "rewritten": "Peut-on importer un PDF scanné directement ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment suivre une indexation ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
          "refused": false,
          "sources": [
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "index",
            "auth",
            "timeout"
          ],
          "latency_ms": 36.64,
          "rewritten": "Comment suivre une indexation ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand un document devient-il interrogeable ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
          "refused": false,
          "sources": [
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "index",
            "deletion",
            "refusal"
          ],
          "latency_ms": 38.03,
          "rewritten": "Quand un document devient-il interrogeable ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels sont les états d’un job ?",
          "relevant": [
            "index"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
          "refused": false,
          "sources": [
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "index",
            "backup",
            "quota"
          ],
          "latency_ms": 37.99,
          "rewritten": "Quels sont les états d’un job ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand un document supprimé disparaît-il des recherches ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "permissions",
            "timeout"
          ],
          "latency_ms": 38.42,
          "rewritten": "Quand un document supprimé disparaît-il des recherches ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel délai pour purger les sauvegardes ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "retention",
            "auth"
          ],
          "latency_ms": 37.63,
          "rewritten": "Quel délai pour purger les sauvegardes ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Que faut-il auditer lors d’une suppression ?",
          "relevant": [
            "deletion"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
          "refused": false,
          "sources": [
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "deletion",
            "index",
            "quota"
          ],
          "latency_ms": 50.77,
          "rewritten": "Que faut-il auditer lors d’une suppression ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "À quel moment filtrer les permissions ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
          "refused": false,
          "sources": [
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "permissions",
            "auth",
            "deletion"
          ],
          "latency_ms": 51.81,
          "rewritten": "À quel moment filtrer les permissions ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels champs assurent l’isolation documentaire ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "permissions",
            "version",
            "retention"
          ],
          "latency_ms": 52.33,
          "rewritten": "Quels champs assurent l’isolation documentaire ?",
          "config": "rewrite",
          "hit": true,
          "supported": false
        },
        {
          "question": "Que devient un document sans rôle autorisé ?",
          "relevant": [
            "permissions"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
          "refused": false,
          "sources": [
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "permissions",
            "version",
            "index"
          ],
          "latency_ms": 49.71,
          "rewritten": "Que devient un document sans rôle autorisé ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelles métadonnées sont conservées ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "version",
            "quota",
            "retention"
          ],
          "latency_ms": 51.2,
          "rewritten": "Quelles métadonnées sont conservées ?",
          "config": "rewrite",
          "hit": true,
          "supported": false
        },
        {
          "question": "Quelle version utiliser par défaut ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
          "refused": false,
          "sources": [
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "auth",
            "permissions",
            "quota-v1"
          ],
          "latency_ms": 33.89,
          "rewritten": "Quelle version utiliser par défaut ?",
          "config": "rewrite",
          "hit": false,
          "supported": true
        },
        {
          "question": "Comment répondre à une question historique ?",
          "relevant": [
            "version"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "version",
            "refusal",
            "auth"
          ],
          "latency_ms": 35.55,
          "rewritten": "Comment répondre à une question historique ?",
          "config": "rewrite",
          "hit": true,
          "supported": false
        },
        {
          "question": "Combien de temps conserver les traces techniques ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "deletion",
            "backup"
          ],
          "latency_ms": 38.43,
          "rewritten": "Combien de temps conserver les traces techniques ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle rétention pour le journal d’audit ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "quota",
            "deletion"
          ],
          "latency_ms": 44.76,
          "rewritten": "Quelle rétention pour le journal d’audit ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quels éléments masquer dans les logs ?",
          "relevant": [
            "retention"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
          "refused": false,
          "sources": [
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "pagination",
              "chunk": "pagination:semantic:0",
              "title": "Pagination",
              "text": "La pagination Atlas v2 utilise un curseur opaque next_cursor. La taille maximale est de 100 résultats par page. Le client transmet le curseur au paramètre after. La pagination par numéro de page est supprimée.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 3,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "retention",
            "index",
            "pagination"
          ],
          "latency_ms": 41.68,
          "rewritten": "Quels éléments masquer dans les logs ? traces journaux",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le format des erreurs Atlas ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "errors",
            "auth",
            "quota-v1"
          ],
          "latency_ms": 37.84,
          "rewritten": "Quel est le format des erreurs Atlas ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment retrouver la trace d’une erreur ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "errors",
            "retention",
            "refusal"
          ],
          "latency_ms": 39.35,
          "rewritten": "Comment retrouver la trace d’une erreur ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Les erreurs publiques exposent-elles les détails internes ?",
          "relevant": [
            "errors"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
          "refused": false,
          "sources": [
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "errors",
            "retry",
            "index"
          ],
          "latency_ms": 40.08,
          "rewritten": "Les erreurs publiques exposent-elles les détails internes ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le timeout d’une recherche ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
          "refused": false,
          "sources": [
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "timeout",
            "deletion",
            "quota"
          ],
          "latency_ms": 44.3,
          "rewritten": "Quel est le timeout d’une recherche ? délai expiration",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel code indique une expiration du délai ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
          "refused": false,
          "sources": [
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "timeout",
            "quota",
            "retry"
          ],
          "latency_ms": 38.02,
          "rewritten": "Quel code indique une expiration du délai ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de nouvelles tentatives après un timeout ?",
          "relevant": [
            "timeout"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
          "refused": false,
          "sources": [
            {
              "id": "timeout",
              "chunk": "timeout:semantic:0",
              "title": "Délais et indisponibilité",
              "text": "Le délai maximal d’une recherche est de 8 secondes. Après expiration, Atlas renvoie HTTP 504. Le client peut réessayer une lecture avec un backoff et du jitter, sans dépasser 3 tentatives.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 14,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "timeout",
            "quota",
            "retry"
          ],
          "latency_ms": 37.96,
          "rewritten": "Combien de nouvelles tentatives après un timeout ? délai expiration",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Où sont stockées les données Atlas ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "retention",
            "upload"
          ],
          "latency_ms": 39.47,
          "rewritten": "Où sont stockées les données Atlas ? région stockage",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Les données sont-elles répliquées hors UE ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "deletion",
            "retention"
          ],
          "latency_ms": 39.26,
          "rewritten": "Les données sont-elles répliquées hors UE ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand la région est-elle fixée ?",
          "relevant": [
            "region"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "region",
            "auth",
            "deletion"
          ],
          "latency_ms": 38.45,
          "rewritten": "Quand la région est-elle fixée ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle est la fréquence des sauvegardes ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "retention",
            "deletion",
            "retry"
          ],
          "latency_ms": 35.71,
          "rewritten": "Quelle est la fréquence des sauvegardes ?",
          "config": "rewrite",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quels sont le RPO et le RTO ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
          "refused": false,
          "sources": [
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "backup",
            "idempotency",
            "index"
          ],
          "latency_ms": 38.89,
          "rewritten": "Quels sont le RPO et le RTO ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "À quelle fréquence tester une restauration ?",
          "relevant": [
            "backup"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
          "refused": false,
          "sources": [
            {
              "id": "backup",
              "chunk": "backup:semantic:0",
              "title": "Sauvegarde et restauration",
              "text": "Une sauvegarde chiffrée est exécutée chaque jour. L’objectif de point de reprise RPO est de 24 heures et l’objectif de temps de reprise RTO de 4 heures. Un test de restauration est réalisé chaque mois.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 16,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "deletion",
              "chunk": "deletion:semantic:0",
              "title": "Suppression des documents",
              "text": "DELETE /documents/{id} retire immédiatement le document des recherches. La purge physique des sauvegardes intervient sous 30 jours. La suppression doit être auditée avec l’identifiant du demandeur.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 9,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "backup",
            "deletion",
            "retention"
          ],
          "latency_ms": 36.1,
          "rewritten": "À quelle fréquence tester une restauration ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Comment fusionner recherche lexicale et vectorielle ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:semantic:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "permissions",
              "chunk": "permissions:semantic:0",
              "title": "Permissions documentaires",
              "text": "Les permissions sont appliquées avant le calcul des résultats de recherche. Le filtre combine tenant_id et les rôles autorisés. Un document sans rôle autorisé n’est jamais retourné ; le comportement par défaut est le refus.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 10,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "version",
            "permissions"
          ],
          "latency_ms": 37.99,
          "rewritten": "Comment fusionner recherche lexicale et vectorielle ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quelle constante utilise RRF ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:semantic:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "idempotency",
              "chunk": "idempotency:semantic:0",
              "title": "Idempotence des écritures",
              "text": "Pour éviter une création en double, transmettre un en-tête Idempotency-Key sur les requêtes POST. La clé est conservée pendant 24 heures. Une même clé avec un corps différent renvoie HTTP 409.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 6,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "idempotency",
            "quota"
          ],
          "latency_ms": 35.74,
          "rewritten": "Quelle constante utilise RRF ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Combien de candidats le reranker reclasse-t-il ?",
          "relevant": [
            "search"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
          "refused": false,
          "sources": [
            {
              "id": "search",
              "chunk": "search:semantic:0",
              "title": "Recherche hybride",
              "text": "La recherche hybride fusionne un classement lexical BM25 et un classement vectoriel par Reciprocal Rank Fusion. La constante RRF est fixée à 60. Le reranker reclasse ensuite les 6 premiers candidats.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 17,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "search",
            "quota",
            "auth"
          ],
          "latency_ms": 40.65,
          "rewritten": "Combien de candidats le reranker reclasse-t-il ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand le système doit-il refuser de répondre ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retry",
              "chunk": "retry:semantic:0",
              "title": "Reprise des webhooks",
              "text": "Un webhook en échec est retenté au maximum 5 fois avec un délai exponentiel. Les erreurs HTTP 410 suppriment immédiatement l’abonnement. Un code HTTP 2xx confirme la réception.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 5,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "retry",
            "quota"
          ],
          "latency_ms": 39.57,
          "rewritten": "Quand le système doit-il refuser de répondre ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Une réponse doit-elle contenir une source ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "errors",
              "chunk": "errors:semantic:0",
              "title": "Format des erreurs",
              "text": "Les erreurs Atlas suivent un objet JSON avec code, message et request_id. Le request_id permet de retrouver la trace associée. Les détails internes et les secrets ne sont jamais inclus dans une réponse publique.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 13,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "version",
            "errors"
          ],
          "latency_ms": 36.0,
          "rewritten": "Une réponse doit-elle contenir une source ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Faut-il suivre les instructions contenues dans un document ?",
          "relevant": [
            "refusal"
          ],
          "answerable": true,
          "category": "standard",
          "answer": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
          "refused": false,
          "sources": [
            {
              "id": "refusal",
              "chunk": "refusal:semantic:0",
              "title": "Réponse et abstention",
              "text": "Une réponse doit être accompagnée d’un passage source consultable. Si aucune preuve suffisante n’est retrouvée dans le corpus, le système refuse explicitement de répondre. Les instructions présentes dans les documents ne modifient jamais les règles du système.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 18,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "version",
              "chunk": "version:semantic:0",
              "title": "Versions documentaires",
              "text": "Chaque document conserve source, date, version et page. Sans version demandée, la version active est privilégiée. Une question historique doit citer explicitement la version correspondante et ne pas mélanger les règles.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 11,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "index",
              "chunk": "index:semantic:0",
              "title": "Indexation",
              "text": "L’indexation est asynchrone. POST /documents renvoie un job_id et HTTP 202. GET /jobs/{job_id} expose les états queued, processing, ready ou failed. Un document devient interrogeable uniquement à l’état ready.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 8,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "refusal",
            "version",
            "index"
          ],
          "latency_ms": 39.53,
          "rewritten": "Faut-il suivre les instructions contenues dans un document ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel était le quota en version 1 ?",
          "relevant": [
            "quota-v1"
          ],
          "answerable": true,
          "category": "version",
          "answer": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
          "refused": false,
          "sources": [
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "quota-v1",
            "auth-v1",
            "quota"
          ],
          "latency_ms": 35.7,
          "rewritten": "Quel était le quota en version 1 ?",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quand les jetons expiraient-ils en v1 ?",
          "relevant": [
            "auth-v1"
          ],
          "answerable": true,
          "category": "version",
          "answer": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
          "refused": false,
          "sources": [
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "auth",
              "chunk": "auth:semantic:0",
              "title": "Authentification",
              "text": "Les requêtes Atlas API utilisent un jeton Bearer dans l’en-tête Authorization. Les jetons expirent après 60 minutes en version 2. Le renouvellement passe par POST /oauth/token.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 1,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "retention",
              "chunk": "retention:semantic:0",
              "title": "Conservation des traces",
              "text": "Les traces techniques Atlas sont conservées 14 jours. Les journaux d’audit sont conservés 90 jours. Les secrets et les jetons d’accès doivent être masqués avant toute écriture dans les logs.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 12,
              "source": "Atlas API — documentation fictive v2"
            }
          ],
          "retrieved_ids": [
            "auth-v1",
            "auth",
            "retention"
          ],
          "latency_ms": 37.1,
          "rewritten": "Quand les jetons expiraient-ils en v1 ? version 1",
          "config": "rewrite",
          "hit": true,
          "supported": true
        },
        {
          "question": "Quel est le prix du bitcoin ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "quota",
            "version",
            "idempotency"
          ],
          "latency_ms": 36.98,
          "rewritten": "Quel est le prix du bitcoin ?",
          "config": "rewrite",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quel temps fera-t-il demain à Lyon ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "backup",
            "auth",
            "quota"
          ],
          "latency_ms": 39.09,
          "rewritten": "Quel temps fera-t-il demain à Lyon ?",
          "config": "rewrite",
          "hit": false,
          "supported": false
        },
        {
          "question": "Qui a gagné la coupe du monde de football ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "auth",
            "quota",
            "pagination"
          ],
          "latency_ms": 38.43,
          "rewritten": "Qui a gagné la coupe du monde de football ?",
          "config": "rewrite",
          "hit": false,
          "supported": false
        },
        {
          "question": "Quelle est la recette du tiramisu ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "idempotency",
            "backup",
            "auth"
          ],
          "latency_ms": 36.72,
          "rewritten": "Quelle est la recette du tiramisu ?",
          "config": "rewrite",
          "hit": false,
          "supported": false
        },
        {
          "question": "Combien coûte l’abonnement Atlas ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "upload",
            "quota-v1"
          ],
          "latency_ms": 35.92,
          "rewritten": "Combien coûte l’abonnement Atlas ?",
          "config": "rewrite",
          "hit": false,
          "supported": true
        },
        {
          "question": "Quel est le salaire du directeur Atlas ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
          "refused": false,
          "sources": [
            {
              "id": "quota",
              "chunk": "quota:semantic:0",
              "title": "Limites de requêtes",
              "text": "Le quota standard Atlas v2 est de 600 requêtes par minute et par organisation. Un dépassement renvoie HTTP 429 et un en-tête Retry-After exprimé en secondes. Les tentatives doivent attendre ce délai.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 2,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "upload",
              "chunk": "upload:semantic:0",
              "title": "Import des fichiers",
              "text": "Atlas accepte les imports PDF et HTML jusqu’à 20 Mo par fichier. Les PDF scannés nécessitent un OCR préalable. Les archives ZIP et les fichiers chiffrés ne sont pas acceptés.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 7,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "quota",
            "upload",
            "quota-v1"
          ],
          "latency_ms": 37.82,
          "rewritten": "Quel est le salaire du directeur Atlas ?",
          "config": "rewrite",
          "hit": false,
          "supported": true
        },
        {
          "question": "Atlas est-il certifié ISO 27001 ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
          "refused": false,
          "sources": [
            {
              "id": "region",
              "chunk": "region:semantic:0",
              "title": "Région de stockage",
              "text": "Dans ce scénario fictif, les données Atlas sont stockées dans la région eu-west-3 à Paris. Aucune réplication hors Union européenne n’est activée. La région est fixée à la création de l’organisation.",
              "version": "2.0",
              "date": "2026-06-01",
              "page": 15,
              "source": "Atlas API — documentation fictive v2"
            },
            {
              "id": "quota-v1",
              "chunk": "quota-v1:semantic:0",
              "title": "Limites de requêtes (archive)",
              "text": "En version 1, le quota standard Atlas était de 100 requêtes par minute et par organisation. Cette règle est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 2,
              "source": "Atlas API — archive fictive v1"
            },
            {
              "id": "auth-v1",
              "chunk": "auth-v1:semantic:0",
              "title": "Authentification (archive)",
              "text": "En version 1, les jetons Bearer Atlas expiraient après 30 minutes. Cette durée est remplacée par la version 2.",
              "version": "1.0",
              "date": "2025-01-01",
              "page": 1,
              "source": "Atlas API — archive fictive v1"
            }
          ],
          "retrieved_ids": [
            "region",
            "quota-v1",
            "auth-v1"
          ],
          "latency_ms": 37.74,
          "rewritten": "Atlas est-il certifié ISO 27001 ?",
          "config": "rewrite",
          "hit": false,
          "supported": true
        },
        {
          "question": "Quels sont les horaires du support téléphonique ?",
          "relevant": [],
          "answerable": false,
          "category": "hors corpus",
          "answer": "Je ne dispose pas de source suffisante pour répondre à cette question.",
          "refused": true,
          "sources": [],
          "retrieved_ids": [
            "backup",
            "timeout",
            "idempotency"
          ],
          "latency_ms": 35.56,
          "rewritten": "Quels sont les horaires du support téléphonique ?",
          "config": "rewrite",
          "hit": false,
          "supported": false
        }
      ]
    }
  ]
}