10 KiB
I — Prompt Session 3 : IA + Deploy NAV V2
Session dédiée Claude Code, modèle Opus pilote avec délégation sous-agents Sonnet autorisée.
Prérequis : Sessions 1 et 2 terminées (front navigable, fiches visibles, formulaire OK).
Durée estimée : 6-8h.
Autonomie : 6/10 (checkpoints : test pipeline IA sur 3 fiches + deploy final).
Mission
Brancher la couche IA et déployer la V2 :
- Worker IA async qui enrichit les soumissions (Mistral Nemo)
- Chatbot recherche sémantique (Mistral Small)
- Bandeau bas stats (coût IA + dons + activité)
- Page
/a-propos(souveraineté, gouvernance, transparence Liberapay) - Deploy production
nav.trans-former.fr - Test pipeline IA sur les 3 fiches réservées
Fichiers de référence (à LIRE en premier)
Tous dans C:\Users\jules\Dropbox\ATIS - IPCJRA\0 INBOX\NAV-V2-recherches\ :
G-prompt-dev-final.md(vision V2, étapes 4, 5, 7, 8, 9)B-provider-ia-souverain.md(Mistral Nemo + Small, circuit breaker 20€/mois)C-systeme-dons.md(Liberapay widget)F-spec-pipe-collaboration.md(§3 prompts IA exacts, §4 endpoints)VPS-check.md(deploy process)palette-nav-v2.md(palette bandeau + /a-propos)seed-test-pipe-ia.json(3 fiches CNOA/Archireport/Collectif Fil réservées pour test worker)
Journal projet : 1 PROJETS\TECH - infra VPS, website pro, RAG\nav-carte\JOURNAL-V2.md
Code en cours : 1 PROJETS\TECH - infra VPS, website pro, RAG\nav-carte\
Décisions tranchées (Sessions 1 + 2 + pilote S3)
- Circuit breaker 20€/mois dépassé → bandeau "manque de fonds" + CTA Liberapay + pédagogie "1€ = N requêtes" + transparence origine Liberapay
- Transparence Liberapay (origine belge, asso non-lucrative, hébergement FR/UE éthique) → section dédiée dans
/a-propos - From email modération :
contact@trans-former.fr - Liberapay URL :
liberapay.com/trans-former.fr(widgets fournis dans C-systeme-dons.md) - Seuil email modération : 5 fiches
pending→ envoi mail Jules via Resend - Facteur CO2eq : 0.052 kg CO2/kWh (RTE FR) pour calcul bandeau carbone
- Scraping : crawl4ai seul, pas de fallback httpx+BS4 (diag VPS pilote : crawl4ai occupe 4.3 MB, ms-playwright absent donc crawl4ai tourne en mode statique léger — un seul chemin de code, plus simple à maintenir)
- Rate limit chatbot : 10 req/IP/jour (F §8, fichier JSON
/tmp/nav-ratelimit/{IP_hash}.json, cron reset journalier) - Prompts Mistral Nemo + Small : copier-coller exact depuis F §3 et §4, ne pas reformuler
- Stack deploy : systemd + Caddy sur nav.trans-former.fr (même domaine que V1, pas de sous-domaine API)
- Endpoint soumission :
/api/organisations(POST JSON standard, déjà existant — S2 a utiliséorganisations.post.ts)
État S1 et S2 — à lire AVANT de coder
Lecture obligatoire en premier : 1 PROJETS/TECH - infra VPS, website pro, RAG/nav-carte/JOURNAL-V2.md
Points d'attention :
- 96 fiches importées NocoDB, 3 réservées test pipe IA (CNOA, Archireport, Collectif Fil)
- 8 anciens records V1 (IDs 1-8,
moderation_status null) à purger avant deploy prod - Divergence taxonomie
moderation_statustranchée :approved/rejectedpartout,pending= absence de validation - Endpoint NocoDB correct :
/api/v1/db/meta/tables/{id}/columns(v0.301.5) - Disque VPS 76% (21/04) — surveiller pendant scraping, alerter si > 85%
- Conflit lib Python
richrésolu avec--ignore-installed— vérifier au passage que lightrag tourne toujours (TODO S1)
Préflight avant tout code (obligatoire)
- Lire
JOURNAL-V2.mden entier - Lire
F-spec-pipe-collaboration.md§3, §4, §6 (circuit breaker), §7 (endpoints), §9 (worker) ssh vps-hetzner "cat /opt/nav-carte/.env | grep -E 'MISTRAL|NOCODB|RESEND'"→ vérifier toutes les clés présentesssh vps-hetzner "df -h /"→ confirmer disque < 85%- Si une clé manque ou disque > 85% → STOP, remonter au pilote Jules
Test coût AVANT de scaler (règle sacrée)
Étape 5 (test pipe IA) :
- Lancer le worker sur 1 seule fiche (CNOA)
- Vérifier
stats_usage: tokens_in, tokens_out, cout_eur - Extrapoler coût pour 96 fiches → si > 1€ pour le batch test, STOP + ping Jules
- Si OK, lancer sur les 2 fiches restantes (Archireport, Collectif Fil)
Credentials
VPS : ssh vps-hetzner (port 4422)
NocoDB : localhost:8070
Token nav-v2-worker : dans /opt/nav-carte/.env
Mistral API key : dans /opt/nav-carte/.env (MISTRAL_API_KEY)
Resend SMTP : /opt/vps-kit/.env
Deploy : /opt/nav-carte/ (systemd nav-carte.service)
Domaine : nav.trans-former.fr (Caddy config existante)
Étapes
Étape 4 — Worker IA enrichissement (4-5h)
- Script
worker/enrich.js(Node.js, lancé via systemd timer toutes les 5 min) - Pipeline :
- Fetch
organisationsWHEREmoderation_status=pendingANDai_processed=false(LIMIT 5 par run) - Pour chaque fiche :
- Scrape URL via crawl4ai (timeout 3 min, mode statique) — si échec : flag
scrape_status=failed, pas de fallback httpx+BS4 - Truncate contenu scrapé à 4k tokens
- Appel Mistral Nemo avec prompt F §3 (copier-coller exact)
- Parser réponse → update
description_enrichie,points_cles,tags_fonction(si IA propose),ai_raw_output,ai_processed=true,scrape_status - Log dans
stats_usage(model, tokens_in, tokens_out, cout_eur, timestamp, orga_id)
- Scrape URL via crawl4ai (timeout 3 min, mode statique) — si échec : flag
- Si circuit breaker 20€/mois dépassé : skip enrich, log, trigger bandeau "manque de fonds"
- Si 5 fiches en attente modération : email Jules via Resend (from
contact@trans-former.fr) - Si scrape échoué : flag
scrape_status=failed, review manuel
- Fetch
- Gestion erreurs : retry 2x, puis flag
scrape_status=failed
Étape 5 — Test pipeline IA sur 3 fiches (1-2h)
Utiliser seed-test-pipe-ia.json (3 entrées : CNOA, Archireport, Collectif Fil) :
- Injecter manuellement dans NocoDB avec
moderation_status=pending,ai_processed=false - Déclencher worker manuellement (pas attendre cron)
- Observer les 3 runs, documenter :
- Temps d'exécution par fiche
- Qualité
description_enrichieetpoints_cles - Fonctions détectées par l'IA vs fonctions Jules
- Coût Mistral (stats_usage)
- Produire
1 PROJETS/TECH - infra VPS.../nav-carte/PIPE-IA-DOC.md: documentation précise du pipeline, input, output, prompts, paramètres — servira de base pour le futur skill/mistral-nemo-vps
Étape 5bis — Chatbot recherche (3-4h)
- Composant
ChatbotSheet.vue(bottom-sheet Headless UI, mobile + desktop) - Message onboarding : texte exact E §6
- Template requête : champs besoin / thématique / lieu → prompt structuré
- API
POST /api/chatbot:- Input : question utilisateur + contexte JSON des fiches (top N matchs par taxonomie)
- Appel Mistral Small (prompt F §3)
- Output : fiches recommandées + explication 1-2 lignes par fiche
- Rate limit : 10 req/IP/jour, fichier JSON
/tmp/nav-ratelimit/{IP_hash}.json(F §8, aligné avec S2)
Étape 7 — Bandeau bas + Liberapay (1-2h)
- Composant
BandeauBas.vue, fond--nav-primary60% - Gauche : stats live depuis
stats_usage- Coût mois en cours / 20€
- Nombre tokens utilisés
- Carbone estimé : kWh × 0.052 kg CO2eq/kWh (RTE FR) — valeur tranchée
- Milieu : CTA "Soutenir NAV" → Liberapay widget (snippet C-systeme-dons.md)
- Droite : compteurs semaine (nouveaux dons, fiches ajoutées, requêtes chatbot)
- Mode "manque de fonds" (si circuit breaker dépassé) : bandeau bascule en mode "NAV a épuisé son budget IA ce mois — aide-nous à continuer" + pédagogie "1€ permet ~X requêtes" (calcul depuis prix Mistral)
Étape 8 — Page /a-propos (1-2h)
- Sections :
- NAV — mission, esprit collaboratif, pour qui
- Souveraineté — IA française (Mistral), hébergement FR (Hetzner), zéro cookie US
- Gouvernance — qui tient le projet, transparence code (GitHub si public)
- Transparence Liberapay — origine (asso belge Liberapay Recurrent Donations ASBL), non lucrative, pas de cut par défaut, hébergement FR/UE éthique, modèle de dons récurrents
- Transparence IA — modèles utilisés, circuit breaker, coût mensuel visible sur bandeau
- Badges : "IA souveraine", "Hébergé en France", "Zéro cookie US"
- Lien vers formulaire + widget Liberapay
Étape 9 — Deploy + tests (2-3h)
- Build production (
npm run build) - Avant deploy : purger les 8 anciens records V1 (IDs 1-8,
moderation_status null) dans NocoDB - Deploy via
git pull && systemctl restart nav-carte.service - Vérifier DNS
nav.trans-former.fr, HTTPS Caddy (config V1 déjà présente — vérifier si routes V2 nécessitent ajustement) - Checkpoint Jules : test manuel
- Soumettre une fiche test via
/contribuer - Vérifier passage dans worker (cron 5 min)
- Jules valide en NocoDB manuellement
- Vérifier apparition sur la carte
- Soumettre une fiche test via
- Tester chatbot avec 2-3 requêtes réelles
- Tester mobile iOS Safari + Android Chrome
Checkpoints Jules
- Avant étape 5 : valider texte onboarding chatbot + prompt recherche
- Étape 5 test pipe : valider qualité enrichissement sur 3 fiches
- Étape 8 : review texte
/a-propos(ton Jules appliqué) - Étape 9 : checkpoint deploy final + submit test
Délégation (Opus pilote)
- Sonnet 1 : worker IA + test pipe 3 fiches + PIPE-IA-DOC (étapes 4-5)
- Sonnet 2 : chatbot (étape 5bis)
- Sonnet 3 : bandeau + /a-propos (étapes 7-8)
- Opus : deploy + checkpoint finaux + debug
Règles
- Tester pipeline IA sur 1 fiche AVANT de scaler aux 3
- Circuit breaker 20€ = sacré, jamais dépasser
- Secrets via
.env, jamais dans le code - Si blocage > 30 min → reporter au pilote
- À la fin : mettre à jour JOURNAL-V2 avec backlog V3 détaillé
Output attendu
- V2 déployée sur
nav.trans-former.fr - ~103 fiches sur la carte + 3 fiches enrichies par IA
- Worker cron 5 min opérationnel
- Chatbot fonctionnel
- Bandeau live avec stats
- Liberapay relié + page
/a-proposcomplète PIPE-IA-DOC.mdproduit (base skill/mistral-nemo-vps)JOURNAL-V2.mdfinal avec backlog V3