--- name: ticket43-plugin-system-final-qa-verdict description: memory note ticket43-plugin-system-final-qa-verdict metadata: type: project --- --- title: Verdict QA final du ticket #43 système de plugins type: reference description: Validation finale QA de #43 après carnet v5, corrections F4/F3/B4 et exécutions réelles backend/frontend. --- # Verdict QA final du ticket #43 système de plugins Branche validée : `feature/ticket43-plugin-system`. Contexte : après verdict QA orange initial, Architect a figé le carnet v5 : `customPluginLayout` top-level canonique, `gitRepository` obligatoire en F3, `${appDataDir}` obligatoire en B4, et `agentSelected`/`terminalFocused`/`layoutCellFocused` + persistance backend state layout plugin acceptés comme dette v1. Résultats réels exécutés par QA : ```text cargo test -p domain -p application -p infrastructure -p backend -p app-tauri plugin --offline --no-fail-fast # OK # application plugin: 9 passed # domain plugin: 3 passed # infrastructure plugin: 5 passed # custom_plugin_layout_roundtrips_with_opaque_state: ok cd frontend && npm run typecheck # exit 0 cd frontend && npm test -- --run # Test Files 104 passed (104) # Tests 947 passed (947) ``` Contrôles ciblés confirmés : - Frontend `LayoutNode` inclut `{ type: "customPluginLayout"; node: CustomPluginLayoutCell }` top-level, sans contrat `LeafCell.pluginLayout`. - `LayoutGrid` route `customPluginLayout` vers `PluginLayoutCellView`. - `onStateChange`, `onOpenPlugins`, `onChooseAnotherLayout` sont câblés in-session (`setPluginLayoutState`, navigation settings plugins, remplacement par terminal). - `ProjectsView` câble `gitRepository` via `GitGateway.branches(active.id)` ; `agentSelected`, `terminalFocused`, `layoutCellFocused` restent explicitement `false` en dette v1. - Backend application substitue `${pluginRoot}` et `${appDataDir}` dans command/args/env/cwd des specs MCP plugin, avec test `reconcile_mcp_substitutes_app_data_dir_in_plugin_server_specs`. Verdict QA : VERT pour merge local du ticket #43. Dette v1 assumée : - `agentSelected`, `terminalFocused`, `layoutCellFocused` non câblés, figés à `false` jusqu'à un lot focus/selection dédié. - Persistance backend du `state` de layout plugin non implémentée ; F4 validé en in-session selon arbitrage Architect. Aucun nouveau blocage détecté dans les suites demandées.