8.4 KiB
issueRef, version, updatedBy, updatedAt
| issueRef | version | updatedBy | updatedAt | ||||
|---|---|---|---|---|---|---|---|
| #284 | 6 |
|
1788881637053 |
2026-09-08 Main: ticket créé suite demande utilisateur. UX a spécifié une surface Settings projet > Plugins avec action Attribuer aux agents + section Agent > Capabilities de plugins, distinction skills/tools MCP, états manquant/obsolète/conflit. Architect a diagnostiqué : cross-project ask/cancel sont WriteAction deny-by-default et doivent être exposés clairement via permissions ; workstate est project-root scoped donc il faut projection côté appelant + cible et corrélation/cancel par correlationId. Architect confirme que les commandes desktop d’assignation existent déjà : plugin_list_project_settings, plugin_set_project_enabled, plugin_assign/unassign_agent_skill/tool ; stockage canonique .ideai/project-plugins.json. Écarts : surface humaine/discoverability et web unsupported ; runtime MCP plugin tools à durcir.
Git: branche active fix/284-cross-project-contact-plugin-assignment créée depuis develop @ df5728a. Git signale que #282/commit 86ed0aa aurait déjà livré Settings projet > Plugins avec détail capabilities, attribution agent et catalogue permissions ; DevFrontend doit vérifier l’existant avant de construire. QA devra inclure backend app tests, frontend npm/build, et rebuild AppImage pour validation runtime cross-project.
2026-09-08 DevFrontend — lot assignation plugin livré, sans commit. Audit #282 : la persistance et l’édition existaient déjà via useProjectPlugins et AgentPluginCapabilities, mais l’assignation était uniquement visible dans le détail du panneau Agents, sans point d’entrée depuis Paramètres > Plugins. Ajout de l’action explicite « Attribuer aux agents » dans Plugins du projet ; elle ferme les paramètres et ouvre le panneau Agents en flottant s’il était fermé, tout en conservant son placement s’il est déjà ancré ou détaché. La section agent est désormais titrée « Capabilities de plugins — {agent} » et explique explicitement l’attribution des skills et tools MCP des plugins activés.
Fichiers frontend modifiés : frontend/src/features/plugins/ProjectPluginsPanel.tsx, PluginsPanel.tsx, AgentPluginCapabilities.tsx, ProjectPluginSettings.test.tsx, frontend/src/features/settings/SettingsView.tsx, frontend/src/features/projects/ProjectsView.tsx.
Commandes : npm --prefix frontend test -- --run src/features/plugins/ProjectPluginSettings.test.tsx → 1 fichier, 3 tests verts ; npm --prefix frontend run build → TypeScript + Vite verts (avertissement non bloquant sur chunk > 500 kB). Une première commande avec le filtre frontend/src/... n’a exécuté aucun test car le préfixe npm place déjà Vitest dans frontend; relance correcte ci-dessus.
Risques / réserves : la surface web reste unsupported par le contrat existant et n’est pas étendue dans ce lot desktop. Le catalogue plugin expose des serveurs MCP mais pas la liste de leurs tools ; l’utilisateur saisit donc le nom du tool, conformément au contrat #282 existant. Les changements backend cross-project déjà présents dans le worktree n’ont pas été modifiés ni validés par DevFrontend.
2026-09-08 DevBackend — lot cross-project finalisé, compilable et testé, sans commit. Cause confirmée : correlationId n’était utilisé que dans les diagnostics, idea_project_cancel_agent arrêtait directement la cible fournie sans corréler une demande active, et l’auto-projection live-state n’écrivait que dans le projet cible. Le service maintient désormais un registre des demandes actives clé par projet/agent appelant + correlationId; il refuse une corrélation vide/dupliquée, empêche de rediriger une annulation vers une autre cible, et route le cancel uniquement après correspondance exacte. L’appelant est projeté Waiting puis Done dans le live-state de son propre projet, avec correlationId exposé par idea_workstate_read; les gardes RAII réconcilient aussi la ligne en cas d’abandon du futur. Les tools ask/cancel restent WriteAction deny-by-default, apparaissent dans tools/list lorsqu’ils sont explicitement autorisés, et le refus indique maintenant où activer la permission.
Fichiers backend/tests modifiés : crates/domain/src/live_state.rs, crates/application/src/workstate/live.rs, crates/application/src/orchestrator/service.rs, crates/application/tests/orchestrator_service.rs, crates/infrastructure/src/orchestrator/mcp/server.rs, crates/infrastructure/src/orchestrator/mcp/tools.rs, crates/infrastructure/tests/mcp_server.rs.
Commandes réelles : cargo check -p domain -p application -p infrastructure -p backend --lib vert ; cargo test -p application --test orchestrator_service 79/79 verts ; cargo test -p application correlated_update_is_preserved_in_the_lean_projection --lib -- --nocapture 1/1 vert ; cargo test -p infrastructure --test mcp_server 40/40 verts ; cargo test -p domain live_state --lib 15/15 verts ; cargo fmt --all -- --check vert ; git diff --check vert.
Risques / réserves backend : le registre de corrélation est volontairement en mémoire et ne survit pas à un redémarrage, comme les tours structurés qu’il représente. Le lot n’étend pas le runtime des tools MCP contribués par plugin : ce sujet n’est pas un correctif simple/local et reste la réserve #282 (catalogue dynamique de tools absent). Aucun fichier frontend n’a été touché par DevBackend.
2026-09-08 QA — validation indépendante effectuée sur la branche fix/284-cross-project-contact-plugin-assignment, sans commit. Fichiers modifiés relus/identifiés : backend cross-project dans crates/application/src/orchestrator/service.rs, crates/application/src/workstate/live.rs, crates/domain/src/live_state.rs, crates/infrastructure/src/orchestrator/mcp/server.rs, crates/infrastructure/src/orchestrator/mcp/tools.rs et tests associés ; frontend assignation plugin dans frontend/src/features/plugins/ProjectPluginsPanel.tsx, PluginsPanel.tsx, AgentPluginCapabilities.tsx, ProjectPluginSettings.test.tsx, frontend/src/features/settings/SettingsView.tsx, frontend/src/features/projects/ProjectsView.tsx.
Commandes réelles QA : git status --short --branch confirme la branche ; git diff --name-status et git diff --stat confirment le périmètre ; git diff -- ... backend/frontend relu ; cargo check -p domain -p application -p infrastructure -p backend --lib vert ; cargo test -p application --test orchestrator_service 79/79 vert ; cargo test -p infrastructure --test mcp_server 40/40 vert ; cargo test -p domain live_state --lib 15/15 vert ; cargo test -p application correlated_update_is_preserved_in_the_lean_projection --lib -- --nocapture 1/1 vert ; npm --prefix frontend test -- --run src/features/plugins/ProjectPluginSettings.test.tsx 1 fichier / 3 tests verts ; npm --prefix frontend run build vert avec l’avertissement Vite habituel chunk > 500 kB ; cargo fmt --all -- --check vert ; git diff --check vert ; rg -n "Attribuer aux agents|Capabilities de plugins|onAssignPluginCapabilities|Skills de plugins|Tools MCP de plugins" frontend/src/features/plugins frontend/src/features/settings frontend/src/features/projects confirme la surface visible/testée.
Verdict QA : VERT pour le périmètre source/test. Réserves : la validation runtime réelle du contact UnityPlugin cross-project dans l’application en cours d’exécution nécessite un rebuild AppImage puis une validation live, car le binaire utilisé est l’AppImage et non les sources locales. Cette validation live AppImage n’a pas été exécutée dans ce passage. La surface web reste hors périmètre/unsupported, et le catalogue dynamique des tools MCP de plugins reste la réserve connue #282.
2026-09-08 Main — rebuild AppImage exécuté après QA via workflow build-appimage. Commandes : npm --prefix frontend run build vert ; depuis crates/app-tauri, mkdir -p /tmp/idea-cargo-home && CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage vert. Artefact produit : target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage. Conformément au workflow, Main n’a pas remplacé /home/anthony/Documents/IdeA_0.1.0_amd64.AppImage et n’a pas relancé IdeA pour ne pas tuer l’orchestrateur actif ; validation live UnityPlugin à faire après remplacement/relance par l’utilisateur.