--- issueRef: "#273" version: 7 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} updatedAt: 1788801870891 --- ## Plan QA initial (Architect + UX, 2026-09-07) Backend/application: - reload d'un plugin directory modifie => hash change et `restart_required=false`. - manifest id mismatch => erreur. - `expectedContentHash` mismatch => `CONFLICT`. - source archive/non relodable => `UNSUPPORTED`/`INVALID` explicite. - manifest invalide: etat/erreur robuste, anciens tools conserves. Infra/protocole: - package commit atomique. - ancien bundle URL hash rejete apres registry update; nouveau hash servi. - `PluginMcpSupervisor::reconcile` stoppe les serveurs retires et demarre les nouveaux. MCP/tools: - `tools/list` contient `idea_plugin_reload`. - permission refusee par defaut. - permission autorisee => retour JSON conforme. - non-regression des tools IdeA existants. Frontend si #272 implemente: - provider recharge un seul plugin, appelle `dispose`, remplace commands/layouts/tools, conserve les autres plugins. - feedback cellule: en cours, succes, deja a jour, echec non bloquant. - echec conserve les anciens tools. Scenario representatif: - projet A demande a agent projet B/plugin de modifier un plugin directory. - A appelle `idea_plugin_reload` sans redemarrer IdeA. - A utilise le nouveau tool ou valide qu'un nouveau `tools/list` l'expose. Noter explicitement toute limite provider si un CLI actif garde un cache interne. ## Premier verdict QA (2026-09-07) Verdict initial: ROUGE pour validation complète, mais les tests ciblés hot reload sont verts. Bloquant identifié: fixture SDK absente dans le worktree DevBackend, pas un défaut direct de `ReloadPlugin`. Preuves vertes QA: - `cargo test -p application plugin::tests -- --nocapture` => 32 passed. - `cargo test -p infrastructure --test mcp_server -- --nocapture` => 38 passed. - `cargo test -p backend openai_tools::tests -- --nocapture` => 10 passed. - `cargo test -p backend plugin_reloaded_relays_hashes_and_changed_flag_to_wire -- --nocapture` => 1 passed. - `cargo test -p app-tauri backend_core_builds_without_desktop_runtime -- --nocapture` => compile app-tauri OK, tests filtres OK. KO initial: - `cargo test -p infrastructure --test plugin_install_load -- --nocapture` => 3 passed, 2 failed, `No such file or directory` sur `sdk/IdeaSDK/examples/hello-plugin`. Diagnostic Main/Git: - Worktree principal: submodule `sdk/IdeaSDK` initialise, fixture presente. - Worktree backend: submodule non initialise (`-d1c3c00... sdk/IdeaSDK`). - Git a initialise `sdk/IdeaSDK` dans les worktrees backend + frontend via source locale `/home/anthony/Documents/Projects/IdeA/sdk/IdeaSDK`, sans modifier les changements DevBackend, push, merge ou rebase. - Git a relance `cargo +stable test -p infrastructure --test plugin_install_load` dans le worktree backend => 5 passed / 0 failed. ## Verdict QA officiel (2026-09-07) VERT pour #273/#271 sur `feature/269-backend`. Commandes relancees: - `cargo +stable test -p application plugin::tests -- --nocapture` => 32 passed. - `cargo +stable test -p infrastructure --test mcp_server -- --nocapture` => 38 passed. - `cargo +stable test -p backend openai_tools::tests -- --nocapture` => 10 passed. - `cargo +stable test -p infrastructure --test plugin_install_load -- --nocapture` => 5 passed. - `cargo +stable test -p infrastructure plugin -- --nocapture` => 10 passed. - `cargo +stable test -p backend plugin_reloaded_relays_hashes_and_changed_flag_to_wire -- --nocapture` => 1 passed. - `cargo +stable test -p app-tauri backend_core_builds_without_desktop_runtime -- --nocapture` => app-tauri compile OK, filtered binaries OK. Couverture validee: `ReloadPlugin`, hash changé/identique/conflit, source archive refusée, store plugin reel, confinement install archive/directory, MCP `tools/list`, permission write refusee par defaut et autorisee explicitement, routage OpenAI/MCP camelCase, evenement backend, non-regression tools MCP existants. Risque restant: la validation prouve exposition/routage cote serveur/provider. Elle ne prouve pas qu'un provider CLI actif invalide toujours son cache local de `tools/list`; selon provider, l'agent peut devoir relister les tools avant d'utiliser `idea_plugin_reload` ou un tool ajoute par le plugin recharge.