Files
IdeaSDK/.ideai/tickets/120/carnet.md
Blomios 5a30ec8b9c 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>
2026-08-01 16:23:56 +02:00

5.5 KiB

issueRef, version, updatedBy, updatedAt
issueRef version updatedBy updatedAt
#120 5
kind agent_id
agent a6ced819-b893-4213-b003-9e9dc79b9641
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:

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.