fix(plugins): isole les menus plugin et durcit hello-plugin SDK contre la rechute #120
Requalification Architect du 2026-08-01: le crash INTERFACE INTERROMPUE au chargement d'un plugin (menu + item) remonte via ProjectsView -> usePluginMenus -> MenuBar jusqu'à RootErrorBoundary, quel que soit le plugin (ancien ou reconstruit via SDK). - usePluginMenus isole la résolution/conversion des contributions plugin : toute erreur retombe sur [] au lieu de propager. - ProjectsView sépare les menus natifs des menus enrichis par plugin et rend MenuBar derrière une error boundary locale (fallback menus natifs seuls). - hello-plugin (SDK) et les tests d'installation associés durcis en cohérence. Bookkeeping ticket #120 uniquement (issue.md, carnet.md) ; les fichiers counter.json/index.json et le dossier tickets/122/ restent hors commit car une collision de numérotation #122 existe entre cette base et feature/ticket120-hello-plugin-install-path-audit (deux tickets différents revendiquent #122) — à arbitrer avant de committer le bookkeeping global. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@ -1,6 +1,113 @@
|
||||
---
|
||||
issueRef: "#120"
|
||||
version: 1
|
||||
version: 5
|
||||
updatedBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"}
|
||||
updatedAt: 1785534496259
|
||||
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 `<MenuBar>`.
|
||||
- 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`.
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
id: "f4218553-680a-4fbb-9514-a96eab79b8d8"
|
||||
number: 120
|
||||
title: "Réinvestiguer l’installation de hello-plugin: écran noir / perte d’affichage IdeA"
|
||||
status: "open"
|
||||
status: "inProgress"
|
||||
priority: "critical"
|
||||
sprint: null
|
||||
links: [{"target":"#116","kind":"relatesTo"}]
|
||||
@ -11,8 +11,8 @@ attachments: []
|
||||
createdBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"}
|
||||
updatedBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"}
|
||||
createdAt: 1785534496259
|
||||
updatedAt: 1785534496259
|
||||
version: 1
|
||||
updatedAt: 1785592705452
|
||||
version: 5
|
||||
---
|
||||
## Constat utilisateur
|
||||
|
||||
|
||||
Reference in New Issue
Block a user