--- issueRef: "#223" version: 3 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} updatedAt: 1787578200000 --- ## Triage 2026-08-17 - Symptôme utilisateur: - le startup MCP échoue; - l'utilisateur précise qu'il utilise la surface Web fournie par l'AppImage IdeA, pas le binaire Web standalone. - Vérifications statiques: - `crates/app-tauri/src/lib.rs`: le binaire AppImage route `--serve` vers `server::run_from_args(...)`; - `crates/app-tauri/src/server.rs`: ce wrapper appelle `web_server::run_from_args(...)`; - `crates/app-tauri/src/commands.rs`: `open_project_for_adapter(...)` appelle `state.ensure_orchestrator_watch(&output.project)`; - `crates/web-server/src/lib.rs`: `invoke_open_project(...)` se contente de `resolve_project_readonly(...)` et sérialise le DTO. - Hypothèse principale: - en surface Web embarquée, l'ouverture de projet ne passe pas par la logique partagée qui réconcilie l'état et démarre `ensure_orchestrator_watch`; - conséquence probable: watcher/orchestrateur/MCP non armés pour le projet ouvert via HTTP, alors que le desktop le fait. - Références de code utiles: - `crates/app-tauri/src/commands.rs:462` - `crates/web-server/src/lib.rs:3094` - `crates/backend/src/lib.rs:3301` - Travail attendu: - Architect: valider la cause racine et le contrat de convergence desktop/Web; - Git: décider la branche locale; - DevBackend: faire passer l'ouverture de projet Web par le même flux que le desktop, sans régression sur les lectures read-only non concernées; - QA: prouver que le startup MCP remarche réellement en surface Web embarquée, avec commandes/sorties réelles. ## Implémentation 2026-08-17 - Correctif appliqué dans `crates/web-server/src/lib.rs`. - Changement: - `invoke_open_project(...)` ne fait plus une simple lecture read-only; - nouveau helper `open_project_for_web(...)` qui exécute `open_project`, réconcilie layouts/live-state/background tasks, arme `ensure_orchestrator_watch`, puis lance `reconcile_claude_run_dirs`, comme le flux desktop. - Test ajouté: - `authorized_open_project_arms_orchestrator_watch` - preuve: après `open_project` via `/api/invoke`, `state.app.open_project_ids()` contient bien le projet ouvert. ## QA 2026-08-17 - Commandes: - `cargo test -p web-server authorized_open_project -- --nocapture` - `cargo test -p web-server web_invoke_routes_agent_commands -- --nocapture` - Résultat: - `authorized_open_project_returns_readonly_project_dto ... ok` - `authorized_open_project_arms_orchestrator_watch ... ok` - `web_invoke_routes_agent_commands ... ok` - Verdict: - `QA` sur preuve automatisée ciblée. - Validation live restante utile: vérifier en AppImage surface Web qu'un projet ouvert puis un agent MCP-capable lancé déclenche bien un startup MCP réussi de bout en bout. ## Reprise 2026-08-20 - Signal utilisateur: - "le mcp fail encore sur la version web". - Vérification de l'état courant du code: - `crates/web-server/src/lib.rs` contient a nouveau le helper `open_project_for_web(...)`; - le flux HTTP `invoke_open_project(...)` n'utilise plus `resolve_project_readonly(...)` mais execute `open_project`, puis `reconcile_layouts`, `reconcile_live_state`, `reconcile_background_tasks`, `ensure_orchestrator_watch(&output.project)` et `reconcile_claude_run_dirs(&output.project)`; - `crates/web-server/src/bin/idea-serve.rs` route maintenant aussi le sous-mode `mcp-server` vers `backend::mcp_bridge::run_mcp_bridge(...)`; - `crates/backend/src/lib.rs` exporte le module partage `mcp_bridge` pour reutiliser le meme pont stdio<->loopback entre desktop et binaire web. - Validation automatisee du 2026-08-20: - `cargo check -p web-server` -> OK - `cargo test -p web-server authorized_open_project_arms_orchestrator_watch -- --nocapture` -> OK - `cargo test -p web-server web_root_candidates_include_appimage_resource_dir -- --nocapture` -> OK - `cargo test -p web-server web_invoke_routes_agent_commands -- --nocapture` -> OK - Conclusion de pilotage: - le correctif backend/web pour re-armer l'orchestrateur/MCP sur `open_project` web est present dans l'arbre courant et vert en tests cibles; - le ticket passe en `QA`; - fermeture a garder conditionnee a une preuve live AppImage/web montrant qu'un agent MCP-capable lance depuis la surface web demarre bien son MCP de bout en bout.