From e7797b1b09fdb0c9da57a6e3f884620b6cfb1055 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 21 Jul 2026 10:00:22 +0000 Subject: [PATCH] =?UTF-8?q?Plan=20r=C3=A9serv=C3=A9=20aux=20nouvelles=20co?= =?UTF-8?q?nstructions,=20pas=20aux=20corrections?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Un plan « from scratch » (architecture, création des fichiers…) était régénéré à CHAQUE tâche de code, y compris pour corriger un bug sur une appli existante — hors-sujet et perturbant (« je n'arrive pas à déplacer les pièces » → plan de re-création complète). - want_plan ne se déclenche plus que pour une NOUVELLE construction : pas de code antérieur dans la session ET workspace vide. Une modification / correction / suite de travail n'affiche plus de plan. - Plan de code : l'étape ARCHITECTURE privilégie un seul fichier autonome (cohérent avec les contraintes appli web), au lieu de proposer index.html + style.css + app.js. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01SVay7z3y7q2gEe54ByAE6N --- backend/app/enhance.py | 5 +++-- backend/app/routes/chat.py | 8 +++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/app/enhance.py b/backend/app/enhance.py index 4290f54..f3ba615 100644 --- a/backend/app/enhance.py +++ b/backend/app/enhance.py @@ -26,8 +26,9 @@ _PLAN_CODE_PROMPT = ( "Tu es architecte logiciel. Établis un plan d'IMPLÉMENTATION concret pour " "cette application, en 3 à 5 étapes courtes (une par ligne, numérotées " "« 1. », « 2. »…).\n" - "- Étape 1 = ARCHITECTURE : quels fichiers créer et leur rôle (ex. un seul " - "index.html avec HTML+CSS+JS, ou séparer index.html / style.css / app.js).\n" + "- Étape 1 = ARCHITECTURE : privilégie UN SEUL fichier autonome (ex. " + "index.html avec le CSS et le JS intégrés, sans dépendance externe) ; ne " + "sépare en plusieurs fichiers que si c'est vraiment indispensable.\n" "- Étapes suivantes = construire UNE fonctionnalité concrète et testable à " "la fois (structure/affichage, puis interactions, puis logique).\n" "Reste RÉALISTE et réalisable en une passe : pas de dépendance externe, pas " diff --git a/backend/app/routes/chat.py b/backend/app/routes/chat.py index d5512a1..9674360 100644 --- a/backend/app/routes/chat.py +++ b/backend/app/routes/chat.py @@ -335,8 +335,14 @@ async def chat(req: ChatRequest) -> StreamingResponse: # RAG, plan et choix du modèle code partent ensemble au lieu de # s'enchaîner en bloquant le premier token. want_rag = cfg.get("rag_enabled", False) + # Un plan « from scratch » n'a de sens que pour une NOUVELLE construction. + # Pour une correction ou la suite d'un travail (l'appli existe déjà, + # session code en cours, formulation de suivi), il est hors-sujet et + # perturbe : on ne replanifie pas l'architecture à chaque message. + is_modification = prev_code or bool(_workspace_listing()) + new_build = use_code and not is_modification want_plan = cfg.get("plan_mode", True) and ( - use_code or enhance.needs_plan(req.content) + new_build or (not use_code and enhance.needs_plan(req.content)) ) if want_rag or want_plan or use_code: yield _sse("status", {"message": "Préparation du contexte…"})