diff --git a/.ideai/idea-android-plugin.json b/.ideai/idea-android-plugin.json index 62e0bee..bec97f3 100644 --- a/.ideai/idea-android-plugin.json +++ b/.ideai/idea-android-plugin.json @@ -5,7 +5,7 @@ "probableAppModule": null, "projectId": "97b49ac2-8376-4aa3-8ea9-bf3ac81d0023", "projectRoot": "/home/anthony/Documents/Projects/IdeA", - "updatedAt": "2026-08-05T12:10:01.937Z" + "updatedAt": "2026-08-05T12:45:31.695Z" }, "ownerAgentId": null, "ownerAgentMapping": {}, diff --git a/.ideai/tickets/149/carnet.md b/.ideai/tickets/149/carnet.md index bba2bf1..0f531b8 100644 --- a/.ideai/tickets/149/carnet.md +++ b/.ideai/tickets/149/carnet.md @@ -1,6 +1,74 @@ --- issueRef: "#149" -version: 7 +version: 13 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} -updatedAt: 1785931921328 +updatedAt: 1785934022586 --- +# Historique des tentatives + +## 2026-08-05 — Reouverture utilisateur +- Symptome utilisateur revalide: la CLI custom s'ouvre environ une demi-seconde puis la cellule retombe directement vers Plain/TUI. +- Le ticket etait encore en `QA` alors que le comportement attendu n'est pas corrige en pratique. +- Constat de pilotage: le carnet etait vide, donc les tentatives precedentes n'etaient pas tracees ici. +- Action Main: reouverture du ticket et relance d'un cycle complet Architect -> Git -> DevFrontend -> QA. + +## Piste precedemment documentee dans la description +- Hypothese precedente: fallback premature dans `frontend/src/features/layout/LayoutGrid.tsx` pendant le chargement asynchrone initial du catalogue agent/profil, ecrasant `cellMode=custom` restaure depuis le storage. +- Cette piste n'a pas suffi a eliminer le symptome utilisateur, donc elle doit etre revalidee ou completee avant nouvelle correction. + +## 2026-08-05 — Recadrage Architecture (avant nouvelle implementation) + +### 1) Decouverte critique : ecart de validation binaire — a verifier EN PREMIER +- L'AppImage installee (`~/Documents/IdeA_0.3.0_amd64.AppImage`) a ete buildee le **2026-08-03 09:39**. +- Les 3 commits de correctif frontend sur ce ticket sont tous **posterieurs** : + - `51bda204` "preserve custom CLI preference during catalog load" + - `61055779` "retarde le fallback custom→TUI tant que le catalogue agents/profiles est stale" (2026-08-05 ~14:2x) + - `e9e4623e` "stabilise le mode CLI custom contre le refetch stale agents/profiles" (2026-08-05 14:24:55) + - merge `66b9c34b` (2026-08-05 14:25:03) +- Le ticket a ete reouvert a 14:31:10, soit **6 minutes apres le merge** — le retest utilisateur qui a motive la reouverture a tres probablement ete fait contre le binaire du 03/08, qui **ne contient aucun des 3 correctifs**. +- Rappel memoire projet (`mcp-bridge-and-delegation-runtime-notes`): piege recurrent dans ce projet — un correctif commite aux sources n'est actif dans l'app qu'apres rebuild + reinstall de l'AppImage + relance d'IdeA. Ne jamais interpreter un retest utilisateur comme invalidant une hypothese de fix sans confirmer que le binaire teste contient bien ce fix. +- **Action requise avant tout nouveau code** : rebuild AppImage depuis `develop` (contient deja les 3 correctifs), remplacer le binaire installe, relancer IdeA, refaire le repro utilisateur. Si le symptome disparait, le ticket se cloture sans ecrire une ligne de code supplementaire. + +### 2) Perimetre confirme si le symptome persiste apres rebuild +- Le bug reste **frontend-pur** dans son mecanisme d'affichage : le point de bascule visuelle custom→TUI est entierement local a `LeafView` dans `frontend/src/features/layout/LayoutGrid.tsx` (ligne ~1291) : + `agentId && cellMode === "custom" && effectiveCustomCliAvailable && customCliAgent && customCliProfile` — si une seule de ces conditions devient fausse, le rendu bascule silencieusement sur `TerminalView` (Plain/TUI) sans jamais toucher `cellMode` lui-meme dans les cas ou `customCliAvailable` retombe a faux transitoirement. +- Verification cote backend : `reattach_agent_chat` (`crates/app-tauri/src/commands.rs:2659-2687`) est concu pour etre **idempotent en cas de reattach concurrent/duplique** ("generation supersede, no double emission" — commentaire du code). Cette piste backend (un kill de session cote serveur sur double-attach) est donc **ecartee** ; aucune preuve de contrat backend fautif a ce jour. + +### 3) Nouvelle piste non explorees par les 3 correctifs precedents +- Les 3 correctifs precedents ont **tous** patché la garde `shouldFallbackCustomCliMode` / l'effet de fallback dans `LayoutGrid.tsx`. Aucun n'a touche `frontend/src/features/agents/CustomAgentChatView.tsx`. +- Piste a instrumenter si le symptome persiste apres rebuild : l'effet `openOrAttach` de `CustomAgentChatView.tsx` (lignes ~221-266) depend de la prop `sessionId`. Or ce meme effet, via `recoverStructuredSession`, appelle `onSessionIdRef.current(launched.sessionId)` (ligne ~184) **avant** d'avoir fini son propre `reattachStructuredSession` — ce callback remonte par `vm.setSession` (LayoutGrid) et fait changer la prop `sessionId` elle-meme, ce qui redeclenche l'effet une seconde fois en parallele (double appel `reattachStructuredSession` sur la meme session). Le backend tolere ce doublon (cf §2) donc ce n'est probablement pas fatal en soi, mais c'est un **feedback loop d'effet non intentionnel**, jamais audite, et un candidat concret pour la 4e iteration si le probleme n'est pas qu'un binaire perime. + +### 4) Perimetre minimal propose pour la prochaine correction (non-regressif) +1. **Etape 0 (obligatoire, avant tout code)** : rebuild AppImage depuis `develop`, relancer IdeA, refaire le repro utilisateur reel. Ne pas coder avant ce resultat. +2. Si le symptome persiste : instrumenter (log temporaire, retire avant merge) les transitions reelles de `cellMode`, `customCliAvailable`, `effectiveCustomCliAvailable`, `trustedCustomCli` (LayoutGrid) ET le cycle de vie de l'effet `openOrAttach` / des appels `launchAgentChat`/`reattachAgentChat` (CustomAgentChatView) sur un repro utilisateur reel, capture avant toute nouvelle modif. +3. Ne pas retoucher une 4e fois `shouldFallbackCustomCliMode`/l'effet de fallback de `LayoutGrid.tsx` sans preuve de trace nouvelle — 3 iterations dessus sans effet observable est en soi un signal que soit l'hypothese est fausse, soit la validation ne portait pas sur le bon binaire (cf §1). +4. Correctif candidat le plus probable si la piste §3 se confirme : stabiliser l'effet `openOrAttach` pour qu'il ne reagisse pas a son propre `onSessionId` (ex. distinguer une mise a jour "externe" de `sessionId` d'une mise a jour "auto-emise", via un ref plutot que la prop brute dans les deps). + +### 5) A consigner pour eviter de repasser sur les fausses pistes +- Toujours verifier la date de build de l'AppImage installee vs. la date des commits de fix avant d'interpreter un retest utilisateur comme un echec du correctif. +- La piste "fallback premature pendant chargement catalogue" (LayoutGrid.tsx) a ete testee 3x (commits `51bda204`, `61055779`, `e9e4623e`) sans confirmation terrain valide (cf §1) — ne pas la considerer refutee tant que le rebuild+retest n'a pas ete fait proprement. +- `reattach_agent_chat` backend est idempotent par design (generation supersede) — ecarter la piste "double attach tue la session cote serveur" sauf nouvelle preuve. +- Piste ouverte et non testee : boucle d'effet `sessionId` dans `CustomAgentChatView.tsx` (cf §3) — a instrumenter avant de patcher. + +## 2026-08-05 — Verification binaire / rebuild AppImage +- Decision Git: rester sur `develop`, aucune nouvelle branche tant qu'on est en simple verification binaire. `develop` contient deja le merge `66b9c34b` et les 3 correctifs frontend lies au ticket. +- Build frontend execute avec succes: `npm --prefix frontend run build`. +- Bundle Tauri AppImage execute avec succes depuis `crates/app-tauri/` via le workflow `build-appimage`: + `CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage` +- Artefact produit avec succes: `/home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage` +- Verification des dates: + - AppImage installee actuelle: `2026-08-03 09:39:38 +0200` — `/home/anthony/Documents/IdeA_0.3.0_amd64.AppImage` + - AppImage rebuild ticket #149: `2026-08-05 14:40:14 +0200` — `/home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage` +- Conclusion de cette tentative: le ticket n'est **pas** encore un echec de correctif code. Le repro utilisateur doit etre refait sur ce nouveau binaire, apres remplacement manuel de l'AppImage installee puis relance d'IdeA. +- Etape suivante obligatoire avant toute 4e modif frontend: remplacer l'AppImage installee par l'artefact rebuild, relancer IdeA, puis retester la CLI custom. Si le symptome persiste sur ce binaire date du 2026-08-05 14:40, alors seulement ouvrir une nouvelle iteration de correction sur la piste `CustomAgentChatView.tsx` / boucle `sessionId`. + +## 2026-08-05 — Nouveau retour utilisateur apres nouvelles tentatives +- Retour utilisateur explicite: "ce n'est toujours pas bon" ; le meme symptome persiste apres plusieurs tentatives de fix. +- Symptome re-decrit par l'utilisateur: "la CLI custom s'ouvre une demie seconde puis se ferme directement vers le Plain". +- Consigne utilisateur explicite a conserver pour la suite: **documenter toutes les tentatives dans ce carnet pour ne pas refaire les memes erreurs**. +- Decision Main pour cette iteration: ne pas repartir sur une intuition vague ni re-appliquer la meme correction sur `LayoutGrid.tsx` sans preuve nouvelle. Repartir d'un cadrage Architecture puis d'une implementation ciblee avec traces d'essai consignees ici. +- Regle operative pour les prochaines entrees de carnet sur ce ticket: + 1. indiquer la commande ou la manip reelle executee, + 2. indiquer le commit/branch ou le binaire teste, + 3. indiquer le resultat exact observe, + 4. indiquer pourquoi la tentative suivante change d'hypothese au lieu de repeter la precedente. diff --git a/.ideai/tickets/149/issue.md b/.ideai/tickets/149/issue.md index b8fef93..2b1fd9c 100644 --- a/.ideai/tickets/149/issue.md +++ b/.ideai/tickets/149/issue.md @@ -2,7 +2,7 @@ id: "1bd74960-361f-4083-acff-4c0b55cd920f" number: 149 title: "CLI custom: fallback silencieux vers Plain/TUI avant chargement du catalogue agent/profil" -status: "open" +status: "inProgress" priority: "high" sprint: null links: [{"target":"#148","kind":"relatesTo"},{"target":"#147","kind":"relatesTo"}] @@ -11,8 +11,8 @@ attachments: [] createdBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} createdAt: 1785930073255 -updatedAt: 1785931921328 -version: 7 +updatedAt: 1785934022586 +version: 13 --- Bug report utilisateur du 2026-08-05: la CLI custom ne se lance plus; à l'ouverture elle se ferme immédiatement et la cellule revient sur Plain/TUI. Diagnostic Architecture: bug distinct de #148. Dans `frontend/src/features/layout/LayoutGrid.tsx`, `cellMode` restauré à `custom` depuis le storage est forcé trop tôt vers `tui` par l'effet garde-fou `if (!customCliAvailable && cellMode !== \"tui\") setCellMode(\"tui\")`, alors que `agents`/`profiles` sont encore vides pendant leur chargement asynchrone initial. Résultat: la préférence `custom` est écrasée silencieusement avant même que la vue puisse se monter. Objectif: retarder ce fallback jusqu'à la fin du premier chargement du catalogue, couvrir par test de non-régression, valider QA, puis rebuild AppImage Linux. diff --git a/.ideai/tickets/index.json b/.ideai/tickets/index.json index f3fb0f8..9e31b5c 100644 --- a/.ideai/tickets/index.json +++ b/.ideai/tickets/index.json @@ -1950,7 +1950,7 @@ "issueRef": "#149", "path": "149", "title": "CLI custom: fallback silencieux vers Plain/TUI avant chargement du catalogue agent/profil", - "status": "open", + "status": "inProgress", "priority": "high", "sprint": null, "assignedAgentIds": [ @@ -1960,7 +1960,7 @@ "kind": "agent", "agent_id": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d" }, - "updatedAt": 1785931921328 + "updatedAt": 1785934022586 } ] } \ No newline at end of file