CognxSafeTrack commited on
Commit ·
41885bb
1
Parent(s): f9b06cf
fix: Anti-False Validation for Card Interactions
Browse files- apps/whatsapp-worker/src/index.ts +8 -1
- tasks/lessons.md +2 -1
apps/whatsapp-worker/src/index.ts
CHANGED
|
@@ -240,7 +240,14 @@ const worker = new Worker('whatsapp-queue', async (job: Job) => {
|
|
| 240 |
if (!updatedBadges.includes(b)) updatedBadges.push(b);
|
| 241 |
}
|
| 242 |
|
| 243 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 244 |
|
| 245 |
// @ts-ignore - Prisma types may be out of sync after schema update
|
| 246 |
await prisma.userProgress.update({
|
|
|
|
| 240 |
if (!updatedBadges.includes(b)) updatedBadges.push(b);
|
| 241 |
}
|
| 242 |
|
| 243 |
+
let newStatus = (isDeepDive && feedbackData?.isForcedClosure !== true) ? 'PENDING_DEEPDIVE' : 'COMPLETED';
|
| 244 |
+
|
| 245 |
+
// 🚨 Card/Button Bypass Logic (Lead Fullstack Developer Requirement)
|
| 246 |
+
// Ensure that a button click never completes the lesson, even if the AI validates it.
|
| 247 |
+
if (isButtonChoice) {
|
| 248 |
+
console.log(`[WORKER] 🛡️ Button choice detected for User ${userId}. Overriding COMPLETED with PENDING.`);
|
| 249 |
+
newStatus = 'PENDING';
|
| 250 |
+
}
|
| 251 |
|
| 252 |
// @ts-ignore - Prisma types may be out of sync after schema update
|
| 253 |
await prisma.userProgress.update({
|
tasks/lessons.md
CHANGED
|
@@ -16,7 +16,8 @@ Ce fichier archive les échecs et solutions liées à la **stabilité technique*
|
|
| 16 |
- **[FLOW] Re-validation Window** : Ne jamais bloquer une analyse entrante sous prétexte que le statut est COMPLETED si le délai depuis la dernière validation est inférieur à 5 minutes (cas de correction immédiate par l'utilisateur) ou si un nouvel élément multimédia est présent.
|
| 17 |
- **[FLOW] Day 7 Card Blockage** : Risque de blocage lors du choix de carte. Toujours valider que l'entrée textuelle courte (ex: "WhatsApp") déclenche la même logique que l'audio en baissant le seuil de `minWordCount`.
|
| 18 |
- **[UX] Card Interaction (Hook)** : L'interaction par cartes/boutons ne doit jamais être bloquante. Elle doit servir de "hook" : le Coach valide le choix et relance immédiatement sur le "pourquoi" pour enrichir l'analyse.
|
| 19 |
-
- **[UX]
|
|
|
|
| 20 |
|
| 21 |
## 🛡️ Règle d'Or de l'Intégrité
|
| 22 |
**Les correctifs techniques ne doivent JAMAIS impacter la logique de personnalisation du prompt `generatePersonalizedLesson` ou des feedbacks.** Toute simplification technique qui réduit la spécificité de l'IA est un échec.
|
|
|
|
| 16 |
- **[FLOW] Re-validation Window** : Ne jamais bloquer une analyse entrante sous prétexte que le statut est COMPLETED si le délai depuis la dernière validation est inférieur à 5 minutes (cas de correction immédiate par l'utilisateur) ou si un nouvel élément multimédia est présent.
|
| 17 |
- **[FLOW] Day 7 Card Blockage** : Risque de blocage lors du choix de carte. Toujours valider que l'entrée textuelle courte (ex: "WhatsApp") déclenche la même logique que l'audio en baissant le seuil de `minWordCount`.
|
| 18 |
- **[UX] Card Interaction (Hook)** : L'interaction par cartes/boutons ne doit jamais être bloquante. Elle doit servir de "hook" : le Coach valide le choix et relance immédiatement sur le "pourquoi" pour enrichir l'analyse.
|
| 19 |
+
- **[UX] Anti-False Validation (Card Click)** : Un clic sur une carte/bouton ne doit JAMAIS valider une étape (`COMPLETED`). Il doit servir de point d'entrée ("hook") pour une explication riche. Forcer le statut à `PENDING` après un choix par bouton pour obliger l'utilisateur à donner son explication audio/texte.
|
| 20 |
+
- **[FLOW] Validation Subordonnée** : Le passage en `COMPLETED` est strictement réservé au feedback positif de l'IA sur une réponse de fond. L'UI d'attente ("Analyse de votre réponse...") doit être envoyée, mais le statut ne doit bouger que sur confirmation IA.
|
| 21 |
|
| 22 |
## 🛡️ Règle d'Or de l'Intégrité
|
| 23 |
**Les correctifs techniques ne doivent JAMAIS impacter la logique de personnalisation du prompt `generatePersonalizedLesson` ou des feedbacks.** Toute simplification technique qui réduit la spécificité de l'IA est un échec.
|