{
  "schema_version": "1.0",
  "id": "pub-399963d326c14c13",
  "project_id": "memory-hub",
  "mission_id": null,
  "title": "Apprentissage NON SUPERVISÉ sur le trafic (ADR-0009) — RAM bornée, livré en prod",
  "summary": "DEMANDES : (1) sans bousiller la RAM ; (2) apprentissage NON SUPERVISÉ.\n\nDÉCISION : PAS de RNN (supervisé, torch = RAM lourde + labels impossibles ici) — livraison du pendant non supervisé LÉGER : clustering incrémental de prototypes (pur Python, ZÉRO dépendance) : traits (méthode one-hot, URI/params/statut/heure bornés) + sacs de 3-grammes d'URI ; score = distance hybride + NOVETÉ ; seuil ADAPTATIF (moyenne+3σ récents, borné) ; k ≤ 12 prototypes, vocab ≤ 5 000 n-grammes ; checkpoint JSON versionné DANS LE HUB (anomaly_model + curseur/id) — taille mesurée : < 2 Mo, RAM ~qq Mo au total (mesuré par test).\n\nCHANGÉ/OÙ — commit e6d00b8 : app/anomaly.py (train_cycle en ligne depuis le corpus observatory/corpus ; anomalies → mémoire hub warning DÉDUP (préfixe méthode+chemin, heure) ; JAMAIS l'IP ni le CORPS aux canaux agents — la ligne complète va dans anomaly_events (humain/volet)) ; routes /internal/v1/anomaly/{cycle,stats} (admin) ; thread de fond 600 s dans le webui.\nTESTÉ — 253/253 + 1 skip (apprentissage de base sans faux anormal ; requête atypique détectée [DELETE/PATCH chemins inconnus] ; confidentialité IP/corps testée ; checkpoint persisté/restauré ; RAM bornée par test) ; e2e PROD : modèle entraîné sur le corpus réel — 204 lignes, 3 anomalies votées (les POST atypiques), seuil 1.25, vocab 138.\nRESTE — non supervisé = AUCUNE précision affirmable (validité = REVUE HUMAINE des anomaly_events) ; reprise sur incident = checkpoint ; si un jour un RNN étiqueté s'impose, l'export corpus (/internal/v1/observatory/corpus) est déjà prêt.\nVÉRIFIER — GET /internal/v1/anomaly/stats ; POST /internal/v1/anomaly/cycle ; SELECT * FROM anomaly_events. ANNULER — git revert e6d00b8 + restart (tables anomaly_* rétractables ; modèle supprimé = re-apprentissage de zéro en 10 min).",
  "body": "",
  "status": "published",
  "report_type": "final_report",
  "published_at": "2026-10-22T09:15:31Z",
  "updated_at": "2026-10-22T09:15:31Z",
  "revision": 1,
  "authoring_agent": "memory-hub",
  "tags": [],
  "public_url": "/rapports/pub-399963d326c14c13",
  "markdown_url": "/public/reports/pub-399963d326c14c13.md",
  "json_url": "/public/reports/pub-399963d326c14c13.json",
  "content_hash": "sha256:7adb4f2b25f0e485e2359ed13c9582f970ccc2d2ef558ee868469f2ac40e9749",
  "artifacts": []
}