runbook: refonte site Veille Dr. Nexum (mono-usage, chat par article, arret scraper tunisien)
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# Veille Dr. Nexum : site dedie (veille.bolbol.tn / nyora-veille)
|
||||
|
||||
**Date** : 25-26/07/2026 · **Sphere** : infra + Nyora · **Statut** : deploye, en observation du prochain run reel
|
||||
|
||||
## Contexte
|
||||
Suite discussion sur la pollution des canaux Telegram et la difficulte de retrouver un sujet dans l'historique Telegram, Nabil a demande la construction d'un site archive pour la veille Dr. Nexum (3x/jour), en reutilisant l'app existante nyora-veille (port 3055) plutot qu'un nouveau build.
|
||||
|
||||
## Decouverte critique : code mort React
|
||||
Le dossier `frontend/src/routes/` (TanStack Router, `createFileRoute`) etait du code mort jamais branche -- l'app reellement servie est un `index.html` monolithe en JS vanilla (variables CSS `--bg/--card/--cyan` etc., pas de Tailwind). Deux cycles de build perdus avant de le decouvrir (`npm run build` ne transformait que 2 modules -- signal qui aurait du alerter plus tot). **Toute modification de ce site doit passer par `frontend/index.html` directement, jamais par `src/`.**
|
||||
|
||||
## Site simplifie -- mono-usage
|
||||
Nav Transit + Bibliotheque retirees de l'UI (boutons + defaut de page au login/reload -> `goP(3)` au lieu de `loadT()`). Les fonctions `loadT/drawT/loadB/drawB` restent dans le code (dead code inoffensif, plus jamais appelees). Page unique : "Veille Dr. Nexum".
|
||||
|
||||
## Scraper tunisien arrete
|
||||
Workflow n8n `9378593adccf42dc` ("VEILLE | Ingest Opportunites", scraping Telegram orientini/orientationtn) etait actif et polluait la table `opportunites` (job_id `tg--*`, 157 lignes). **Desactive + n8n redemarre.** 157 lignes purgees de la table. Le contenu Transit/Bibliotheque (194+190 lignes, sujet IA generaliste, source_instance=nyora) est distinct et n'a pas ete touche -- reste alimente en arriere-plan, juste retire de l'UI.
|
||||
|
||||
## Schema DB (opportunites, additif, aucune perte de donnees)
|
||||
Colonnes ajoutees : `introduction`, `verification`, `analyse_etendue` (ancien bouton "approfondir", non utilise dans l'UI finale -- remplace par le chat). Nouvelle table `opportunite_chat` (id, opportunite_id, role, content, date_capture) pour l'historique de chat persiste par article.
|
||||
|
||||
## Backend (router opportunites.py)
|
||||
- `GET /opportunites/?zone=transit&job_id=veille-ia-nexum-4ee61494&tag=X` -- liste filtree
|
||||
- `GET /opportunites/tags?job_id=...` -- tags avec comptage, pour les chips de filtre
|
||||
- `POST /opportunites/ingest` -- batch, dedup sur (date, titre, job_id)
|
||||
- `GET/POST /opportunites/{id}/chat` -- chat scope a un article, historique persiste, contexte = contenu complet de l'item + historique de conversation, model mimo-v2.5 via Bifrost (`BIFROST_VK_NYORA_VEILLE`, deja existante, ajoutee au docker-compose + .env local de l'app)
|
||||
|
||||
## Frontend (index.html)
|
||||
Carte par opportunite : titre (gras, toujours visible) + introduction (visible, pas grasse) -> clic sur l'en-tete deplie resume/verification/pourquoi/titre suggere/angle/tags/lien. Tags multi-dimensionnels (createur auto-injecte + objet/mot-cle genere par l'agent). Bouton "Discuter avec Dr. Nexum" ouvre un panneau de chat inline par carte (multi-messages, historique charge a l'ouverture). Seuil de couleur du badge score calibre sur l'echelle reelle 0-100 (corrige une premiere erreur de calibration 0-10).
|
||||
|
||||
## Pipeline (job veille-ia-nexum-4ee61494, hermes-agent-nyora)
|
||||
- Bloc prompt "Email enrichi" supprime -> remplace par bloc "Ingestion vers le site" : le JSON `/opt/data/veille_enrich.json` inclut desormais `introduction` (identique mot pour mot a la ligne de contexte Telegram), `verification`, `tags` (objet/mot-cle uniquement, le tag createur est ajoute automatiquement par le script, pas par le LLM).
|
||||
- Nouveau script `/opt/data/veille_ingest_send.py` (remplace `veille_email_send.py`, non supprime mais plus appele) : fusionne raw+enrich, injecte le tag source/createur, POST vers `http://veille-backend:8000/opportunites/ingest`. Verifie via `INGEST_OK`/`INGEST_FAILED` (meme pattern que l'ancien `EMAIL_SENT_OK`), n'a jamais bloque Telegram en cas d'echec.
|
||||
- Template Telegram : ligne "Lien : [url]" ajoutee (absente avant).
|
||||
- Telegram reste actif en parallele du site (decision explicite Nabil, le temps de valider le nouveau systeme). Email O365 completement retire.
|
||||
|
||||
## Verifie en direct
|
||||
Migration DB (0 perte sur 158 puis 28 lignes reelles apres purge tunisienne), ingestion end-to-end, chat end-to-end (reponse mimo-v2.5 coherente), build JS valide (`node --check`) avant chaque deploiement, contenu du bundle final verifie par grep post-build (le seul moyen fiable d'etre sur qu'un changement est reellement livre avec ce systeme de build).
|
||||
|
||||
## Trouvaille annexe (sans lien avec la tache)
|
||||
n8n + n8n-DB etaient `Exited (0)` depuis 17h au moment ou j'ai voulu interroger la DB pour trouver le scraper tunisien -- decouverte fortuite, redemarres. Cause non investiguee (pas un crash, exit propre -- arret manuel ou fenetre de maintenance ?). A surveiller si ca se reproduit.
|
||||
|
||||
## Reste a faire / points ouverts
|
||||
- Backfill des runs Dr. Nexum anterieurs a la mise en place (archives cron limitees a 2-3 jours, non tente).
|
||||
- Nettoyage du code mort `frontend/src/` (routes/, App.tsx, lib/api.ts) -- inoffensif mais source de confusion future, a supprimer une prochaine session.
|
||||
- Prochain run reel du job (prochain creneau 3x/jour) validera la chaine complete avec les nouveaux champs (introduction/verification/tags objet) -- a verifier sur le site apres.
|
||||
Reference in New Issue
Block a user