CognxSafeTrack commited on
Commit ·
ee69d44
1
Parent(s): 2f245f9
docs: Project Memory Extraction (5 Layers: Constitution, Primer, Lessons, Hindsight, Audits)
Browse files- .claude/CLAUDE.md +4 -14
- .claude/primer.md +17 -13
- tasks/hindsight.md +19 -0
- tasks/lessons.md +20 -6
.claude/CLAUDE.md
CHANGED
|
@@ -3,18 +3,8 @@
|
|
| 3 |
## 🛡️ Principes Fondamentaux (Audit & Architecture)
|
| 4 |
|
| 5 |
1. **Atomicité Absolue** : Ne jamais envoyer de message WhatsApp (ou `scheduleMessage`) avant d'avoir validé la mise à jour de la base de données (Prisma). La donnée doit survivre à un crash du worker.
|
| 6 |
-
2. **Détachement Gateway (Async-First)** : Le point d'entrée `/webhook` doit répondre `200 OK` immédiatement (< 100ms) sans attendre le traitement.
|
| 7 |
3. **Idempotence Système** : Chaque job (Inbound, Feedback, Media) doit être verrouillé par Redis avec un TTL de 300s (5 min) pour absorber les temps de latence LLM sans créer de doublons.
|
| 8 |
-
4. **UX d'Interception & "WOW"** : Le design et la validation visuelle (ex: Jour 11
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
- **Évolution de Schéma** : Toute modification des types (ex: `BusinessProfile`) doit être répercutée dans Prisma et migrée immédiatement.
|
| 13 |
-
- **Gestion des Erreurs** : En cas de timeout ou 429 (LLM), envoyer un message de fallback gracieux à l'utilisateur au lieu de laisser le job échouer silencieusement.
|
| 14 |
-
- **Validation de Progression** : Toujours vérifier si une `Response` existe avant de bloquer un utilisateur avec le statut `PENDING`.
|
| 15 |
-
|
| 16 |
-
## 🚦 Ordre de Session Stricte
|
| 17 |
-
|
| 18 |
-
1. **LIRE** `tasks/lessons.md` au démarrage de chaque tâche.
|
| 19 |
-
2. **METTRE À JOUR** `tasks/todo.md` après chaque succès.
|
| 20 |
-
3. **AUTO-CORRIGER** `tasks/lessons.md` dès qu'un bug est identifié et résolu.
|
|
|
|
| 3 |
## 🛡️ Principes Fondamentaux (Audit & Architecture)
|
| 4 |
|
| 5 |
1. **Atomicité Absolue** : Ne jamais envoyer de message WhatsApp (ou `scheduleMessage`) avant d'avoir validé la mise à jour de la base de données (Prisma). La donnée doit survivre à un crash du worker.
|
| 6 |
+
2. **Détachement Gateway (Async-First)** : Le point d'entrée `/webhook` doit répondre `200 OK` immédiatement (< 100ms) sans attendre le traitement.
|
| 7 |
3. **Idempotence Système** : Chaque job (Inbound, Feedback, Media) doit être verrouillé par Redis avec un TTL de 300s (5 min) pour absorber les temps de latence LLM sans créer de doublons.
|
| 8 |
+
4. **UX d'Interception & "WOW"** : Le design et la validation visuelle (ex: Jour 11) sont prioritaires. Ne pas utiliser de placeholders.
|
| 9 |
+
5. **Instruction pour Agents (Flash/Large Context)** : Si tu es utilisé par Gemini Flash ou un agent à large fenêtre de contexte, lis prioritairement `tasks/hindsight.md` pour comprendre la philosophie des prompts de l'utilisateur avant de suggérer une modification structurelle.
|
| 10 |
+
6. **Vérification Lesson-First** : Ne jamais modifier la logique de progression sans valider contre les échecs répertoriés dans `tasks/lessons.md`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.claude/primer.md
CHANGED
|
@@ -1,18 +1,22 @@
|
|
| 1 |
# 🧪 Primer Technique : Architecture XAMLÉ
|
| 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
## 🏗️ Flux de Données (Data Flow)
|
| 4 |
-
1. **Meta Webhook**
|
| 5 |
-
2. **
|
| 6 |
-
3. **
|
| 7 |
|
| 8 |
## 🛠️ Stack Technologique
|
| 9 |
-
- **Back** : Node.js (TypeScript), Fastify.
|
| 10 |
-
- **
|
| 11 |
-
- **
|
| 12 |
-
- **
|
| 13 |
-
- **Storage** : Cloudflare R2 / AWS S3 pour l'archivage audio/image.
|
| 14 |
-
|
| 15 |
-
## 🚦 Sécurité & Performance
|
| 16 |
-
- HMAC Signature (X-Hub-Signature-256) vérifiée sur l'API.
|
| 17 |
-
- Logs Railway pour le monitoring du worker.
|
| 18 |
-
- Locks distribués Redis pour l'idempotence.
|
|
|
|
| 1 |
# 🧪 Primer Technique : Architecture XAMLÉ
|
| 2 |
|
| 3 |
+
## 🏗️ Profil du Projet
|
| 4 |
+
- **Nom du Secteur** : PWA Événementiel Sénégal (Mise en relation et Coaching de prestataires).
|
| 5 |
+
- **Enjeux** : Digitalisation du secteur informel sénégalais par WhatsApp.
|
| 6 |
+
- **Preuves de Confiance** : Lauréat **Blue Ocean Awards** (Expertise reconnue en innovation).
|
| 7 |
+
|
| 8 |
+
## 💰 Business Model
|
| 9 |
+
- **Commission Client** : 1% sur le montant de la prestation.
|
| 10 |
+
- **Commission Prestataire** : 2% sur le montant encaissé.
|
| 11 |
+
- **Validation** : Le coaching AI (XAMLÉ) assure la qualité des prestataires avant mise en relation.
|
| 12 |
+
|
| 13 |
## 🏗️ Flux de Données (Data Flow)
|
| 14 |
+
1. **Meta Webhook** -> **API Fastify** -> Réponse 200 immédiate.
|
| 15 |
+
2. **Queue BullMQ** -> **Worker** -> **whatsapp-logic.ts**.
|
| 16 |
+
3. **IA (Gemini/OpenAI)** -> **Prisma DB** -> **WhatsApp Cloud API**.
|
| 17 |
|
| 18 |
## 🛠️ Stack Technologique
|
| 19 |
+
- **Back** : Node.js (TypeScript), Fastify, BullMQ, Redis.
|
| 20 |
+
- **Persistance** : Prisma ORM (Azure Neon PostgreSQL).
|
| 21 |
+
- **IA** : Gemini 2.0 Flash (Coaching), Gemini 1.5 Pro (Docs), OpenAI Whisper (STT).
|
| 22 |
+
- **Storage** : Cloudflare R2 (Audio/Images persistants).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tasks/hindsight.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 🧠 Hindsight : Trace des Mandats Structurels
|
| 2 |
+
|
| 3 |
+
Ce fichier archive les prompts "Directeurs" qui ont forgé l'architecture actuelle. Ils servent de référence pour comprendre la philosophie de l'utilisateur.
|
| 4 |
+
|
| 5 |
+
## 1. Mandat : "Vision & Data Diversity" (23 Mars 2026)
|
| 6 |
+
> "Tu agis en tant que Lead QA. Nous avons une régression majeure : l'IA répète les mêmes conseils sur la publicité. Tu dois dynamiser la recherche web (Browsing) selon le jour du programme et activer la vision multimodale pour analyser les preuves envoyées par les utilisateurs."
|
| 7 |
+
- **Résultat** : Implémentation du `SearchService` adaptatif et du `GeminiProvider` multimodal.
|
| 8 |
+
|
| 9 |
+
## 2. Mandat : "Intelligence de Dialogue" (24 Mars 2026)
|
| 10 |
+
> "Tu es un consultant pragmatique, pas un professeur pointilleux. Rédige un feedback d'au minimum 15 lignes de haute densité. Interdiction de demander à l'utilisateur de s'expliquer davantage si l'idée est claire. Apporte le savoir."
|
| 11 |
+
- **Résultat** : Injection de la règle "Anti-Remediation Loop" dans `AIService`.
|
| 12 |
+
|
| 13 |
+
## 3. Mandat : "Asynchronisme Total & Détachement" (24 Mars 2026)
|
| 14 |
+
> "Le problème n'est pas l'IA, mais le Timeout de la Gateway Hugging Face. Détache-toi immédiatement en répondant 200 OK. Délègue tout au worker."
|
| 15 |
+
- **Résultat** : Architecture Async-First, suppression de `WhatsAppService` synchrone, création de `whatsapp-logic.ts`.
|
| 16 |
+
|
| 17 |
+
## 4. Mandat : "Constitution & Mémoire du Projet" (24 Mars 2026)
|
| 18 |
+
> "Tu agis en tant que Lead DevOps & Knowledge Manager. Transforme l'historique de tes interventions en une base de connaissances pérenne. Archive le processus de réparation."
|
| 19 |
+
- **Résultat** : Création de `.claude/CLAUDE.md`, `tasks/lessons.md`, `tasks/hindsight.md` et `docs/audits/`.
|
tasks/lessons.md
CHANGED
|
@@ -1,7 +1,21 @@
|
|
| 1 |
-
# 🎓 Leçons Apprises (
|
| 2 |
|
| 3 |
-
|
| 4 |
-
- **
|
| 5 |
-
- **
|
| 6 |
-
- **
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 🎓 Leçons Apprises (Historique des Crashs & Fixes)
|
| 2 |
|
| 3 |
+
## 1. Race Condition : Atomicité DB First
|
| 4 |
+
- **Crash** : L'utilisateur recevait un message de félicitations "Bravo Jour 1" mais restait bloqué à cause d'un crash du worker survenu *après* l'envoi WhatsApp mais *avant* le `prisma.update`.
|
| 5 |
+
- **Leçon** : L'ordre des opérations est vital. Toujours effectuer les écritures DB (`UserProgress`, `Response`) **AVANT** d'appeler un service tiers (WhatsApp API).
|
| 6 |
+
- **Audit de preuve** : [audit_persistance_validation.md](../docs/audits/audit_persistance_validation.md)
|
| 7 |
+
|
| 8 |
+
## 2. Gemini 404 : Mapping des Modèles
|
| 9 |
+
- **Crash** : Plusieurs appels échouaient avec une erreur 404 car le modèle `gemini-1.5-pro-latest` ou `gemini-2.0-flash-exp` n'était pas supporté ou changeait d'alias.
|
| 10 |
+
- **Leçon** : Utiliser des constantes de mapping explicites. Actuellement : `gemini-2.0-flash` pour le coaching rapide et `gemini-1.5-pro` pour le rendu de documents complexes.
|
| 11 |
+
- **Audit de preuve** : [rapport_audit_vision_data.md](../docs/audits/rapport_audit_vision_data.md)
|
| 12 |
+
|
| 13 |
+
## 3. Timeout Gateway Hugging Face : Async-First
|
| 14 |
+
- **Crash** : Hugging Face (Gateway) coupe la connexion si le serveur ne répond pas en < 30s. Les LLMs (STT + Feedback) mettent souvent 35s. Résultat : retries infinis de Meta et doublons.
|
| 15 |
+
- **Leçon** : Répondre `200 OK` immédiatement à la Gateway (< 100ms). Utiliser `setImmediate` ou une Queue (BullMQ) pour détacher le traitement long du cycle de vie HTTP.
|
| 16 |
+
- **Audit de preuve** : [audit_progression_idempotence.md](../docs/audits/audit_progression_idempotence.md)
|
| 17 |
+
|
| 18 |
+
## 4. Multimodal : Vision par Base64
|
| 19 |
+
- **Crash** : Gemini échouait à "voir" les images si on passait seulement l'URL (problèmes de permissions ou d'expiration).
|
| 20 |
+
- **Leçon** : Toujours télécharger le média sur le serveur, le convertir en **Base64** et l'injecter en `inlineData` dans le prompt multimodal.
|
| 21 |
+
- **Audit de preuve** : [audit_team_visual_persistence.md](../docs/audits/audit_team_visual_persistence.md)
|