--- issueRef: "#120" version: 5 updatedBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"} updatedAt: 1785592705452 --- # Carnet de suivi — hello-plugin ## Etat courant - Ticket canonique: `#120` - Date de rechute confirmee: 2026-08-01 - Statut: investigation relancee sur rechute reelle post-rebuild SDK - Severite: critique (l'UI d'IdeA tombe sur une erreur d'affichage lors de l'installation/chargement de `hello-plugin`) ## Constat central au 2026-08-01 Le probleme persiste meme apres reconstruction de `hello-plugin` comme plugin d'exemple 100% SDK. Implication forte: - la cause racine est probablement dans le systeme plugin / runtime frontend / chargement UI / integration layout-menu, et non dans l'ancien exemple `hello-plugin` uniquement. ## Trace utilisateur fournie le 2026-08-01 Message visible: - `IdeA a rencontre une erreur d'affichage.` - `L'application reste ouverte. Rechargez la fenetre apres avoir copie le diagnostic si le probleme doit etre investigue.` Stack affichee: ```text kT@tauri://localhost/assets/index-CXNCu-GC.js:88:32937 ST@tauri://localhost/assets/index-CXNCu-GC.js:88:31877 om@tauri://localhost/assets/index-CXNCu-GC.js:38:17019 oh@tauri://localhost/assets/index-CXNCu-GC.js:40:3141 $b@tauri://localhost/assets/index-CXNCu-GC.js:40:39779 SC@tauri://localhost/assets/index-CXNCu-GC.js:40:39707 sc@tauri://localhost/assets/index-CXNCu-GC.js:40:39559 yh@tauri://localhost/assets/index-CXNCu-GC.js:40:35923 Ob@tauri://localhost/assets/index-CXNCu-GC.js:40:34872 E@tauri://localhost/assets/index-CXNCu-GC.js:25:1541 L@tauri://localhost/assets/index-CXNCu-GC.js:25:1903 ST@tauri://localhost/assets/index-CXNCu-GC.js:88:28096 div div div ID@tauri://localhost/assets/index-CXNCu-GC.js:94:63541 main div div G4@tauri://localhost/assets/index-CXNCu-GC.js:129:18236 div div _T@tauri://localhost/assets/index-CXNCu-GC.js:88:24675 BP@tauri://localhost/assets/index-CXNCu-GC.js:88:1862 ez@tauri://localhost/assets/index-CXNCu-GC.js:129:31272 mP@tauri://localhost/assets/index-CXNCu-GC.js:82:27658 Iz@tauri://localhost/assets/index-CXNCu-GC.js:129:83025 ``` ## Faits etablis avant cette rechute - Un rebuild SDK de `hello-plugin` a ete realise pour produire un plugin d'exemple minimal mais fonctionnel. - Des verifications de build, packaging et tests locaux ont ete annoncees vertes par DevFrontend. - QA avait pu valider partiellement: - l'artefact SDK se reconstruit - le plugin s'installe cote runtime/backend - IdeA charge reellement le bundle plugin via `idea-plugin://.../dist/index.js` - QA n'avait pas pu valider de bout en bout la surface UI visible (menu `Hello Plugin`, entree `hello-plugin`, rendu `hello-world`) faute d'une session UI observable sans ambiguite. ## Reinterpretation apres rechute utilisateur - L'absence de validation UI de bout en bout n'etait pas un detail: la rechute utilisateur montre que le crash survient bien dans le flux reel d'affichage, malgre un plugin reconstruit proprement. - Le signal pointe desormais plus fortement vers un probleme dans la consommation frontend des contributions plugin que vers le contenu fonctionnel du plugin lui-meme. ## Requalification Architect du 2026-08-01 - Fait cle: le meme hash de crash apparait avec deux plugins differents: - ancien hello-plugin minimal (menu + item, sans layout utile) - nouveau hello-plugin reconstruit via SDK (menu + item + layout) - Denominateur commun probable: la contribution de menu, pas le layout. - Zone la plus suspecte identifiee: `ProjectsView.tsx` sur l'injection de `pluginMenus` dans ``. - Point precis: le rendu des menus plugin est consomme dans l'app-shell sans isolation locale equivalente a celle deja ajoutee pour `PluginLayoutCellView`. - Hypothese prioritaire: une entree de menu plugin ou son rendu dans `MenuBar` leve une erreur qui remonte jusqu'a `RootErrorBoundary`, produisant `INTERFACE INTERROMPUE`. ## Correctif systeme plugin/UI par DevFrontend ### Cause probable retenue Deux plugins differents declenchent le meme crash minifie apres installation. Le denominateur commun le plus probable est le chemin `ProjectsView -> usePluginMenus -> MenuBar`. ### Correctif applique - `usePluginMenus` isole defensivement la resolution/conversion des contributions plugin. - Si la resolution de menus ou d'items plugin throw, le hook renvoie `[]` pour la surface plugin concernee au lieu de propager l'erreur. - `ProjectsView` separe les menus natifs des menus enrichis par plugin. - `ProjectsView` rend `MenuBar` derriere une error boundary locale: si le rendu enrichi plante, fallback immediat sur les menus natifs seuls. - Logs ajoutes: - `[plugins] menu contribution rejected` avec le contexte utile quand disponible - `[plugins] menu render failed; using native menus only` ### Fichiers touches - `frontend/src/features/plugins/usePluginMenus.ts` - `frontend/src/features/plugins/usePluginMenus.test.tsx` - `frontend/src/features/projects/ProjectsView.tsx` ### Verifications annoncees par DevFrontend - `cd frontend && npm run typecheck` : OK - `cd frontend && npx vitest run src/features/plugins/usePluginMenus.test.tsx src/features/plugins/menus.test.ts src/plugins/runtime/loader.test.ts src/features/projects/projects.test.tsx src/features/projects/pluginGitRepository.test.tsx src/shared/ui/FloatingWindow.test.tsx` : OK, 48 tests - `cd frontend && npm test` : OK, 114 fichiers, 1046 tests ## Prochaine etape - QA doit valider sur le flux reel d'installation du plugin si l'UI reste vivante et si les menus natifs sont conserves en fallback au lieu de tomber sur `INTERFACE INTERROMPUE`.