73 lines
4.2 KiB
Markdown
73 lines
4.2 KiB
Markdown
---
|
|
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.
|