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>
114 lines
5.5 KiB
Markdown
114 lines
5.5 KiB
Markdown
---
|
|
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 `<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`.
|