Files
IdeA/.ideai/tickets/299/carnet.md

111 lines
8.3 KiB
Markdown

---
issueRef: "#299"
version: 5
updatedBy: {"kind":"agent","agent_id":"1ff94b51-3e17-4a39-8543-7715d1ff0f80"}
updatedAt: 1788983152377
---
# Ticket #299 - Panneau MCP: detachement silencieux
## Signalement
Le panneau MCP ne fonctionne pas en fenetre detachee: quand l'utilisateur veut le detacher, rien ne se passe.
## Cadrage UX
- `Detacher` doit ouvrir immediatement une fenetre flottante/systeme titree `MCP`, avec le meme contenu/etat.
- Une seule fenetre MCP: clics repetes => focus de la fenetre existante.
- Fermer ou `Rattacher` remet MCP dans la cellule d'origine sans perte d'etat.
- Si detachement impossible: ne pas rester silencieux; desactiver l'action ou afficher `Le panneau MCP ne peut pas etre detache pour le moment.` / erreur retry visible.
## Cadrage Architect
Hypothese forte: desalignement frontend/backend.
- Frontend declare `mcp` detachable dans `frontend/src/features/projects/viewPlacement.ts` et le rend via `ViewPanelBody`.
- Backend Tauri `ViewPanel` dans `crates/app-tauri/src/commands.rs` ne connait probablement pas `Mcp`.
- `open_view_window("mcp")` echoue en `INVALID`, et `detachPanel` dans `ProjectsView.tsx` avale l'echec, donc effet utilisateur: rien.
Correctif attendu:
- Ajouter `Mcp` a l'enum/backend `ViewPanel` et aux branches `parse`, `as_str`, `title`.
- Garantir label `view-mcp`, URL `index.html?panel=mcp`, reconnaissance de `view-mcp`.
- Ne pas refondre docking/FloatingWindow/LeafView; ne pas toucher `McpPanel` sans preuve.
- Preserver: pas de ghost detached slot si erreur backend, `projects` reste non detachable.
Tests attendus:
- Rust app-tauri pour parse/as_str/title/label/url/reconnaissance label MCP.
- Frontend: ViewWindow query `?panel=mcp`, detach MCP, viewPlacement detachable MCP.
## Etat orchestration
Ticket cree par Main le 2026-09-09, statut inProgress. En attente branche Git puis implementation DevBackend/DevFrontend et validation QA.
## Implementation DevBackend - 2026-09-09
- Branche: `fix/299-mcp-panel-detach-window`.
- Ajout de `ViewPanel::Mcp` dans `crates/app-tauri/src/commands.rs` avec les contrats:
- parse `mcp`;
- identifiant `mcp`;
- titre `MCP`;
- label stable `view-mcp`;
- URL `index.html?panel=mcp`.
- La reconnaissance des labels courants et la restauration des fenetres persistees acceptent desormais `view-mcp`.
- Tests Rust ajoutes pour parse/as_str/title/label/url, reconnaissance du label et identite persistee MCP.
- Validation executee:
- `cargo fmt --all -- --check`: vert;
- `cargo test -p app-tauri view_window_tests`: vert, 9 tests passes;
- `cargo test -p app-tauri persisted_identity_accepts_mcp_view_label`: vert, 1 test passe.
- Aucun changement frontend, aucun commit. Les modifications hors perimetre deja presentes dans le worktree ont ete laissees intactes.
## Implementation DevFrontend - 2026-09-09
- Verification du chemin existant: `mcp` est deja un `PanelId`, titre `MCP`, rendu par `ViewPanelBody` et accepte par `isDetachablePanel`; aucune refonte de docking/FloatingWindow/LeafView necessaire.
- `ProjectsView.detachPanel` continue de n'appliquer le placement `detached` qu'apres succes de `openViewWindow("mcp")`, preservant l'absence de ghost slot en cas d'erreur.
- L'echec de detachement n'est plus silencieux: alerte `Le panneau MCP ne peut pas etre detache pour le moment.` avec action `Reessayer`, tandis que le placement courant reste visible.
- Tests frontend ajoutes/ajustes:
- `ViewWindow` accepte explicitement `?panel=mcp`;
- `ProjectsView` ouvre bien la fenetre OS avec l'identifiant `mcp`;
- un echec conserve le panneau flottant, affiche l'alerte et permet un retry concluant;
- `viewPlacement` confirme explicitement que `mcp` est detachable.
- Validation executee:
- `npm test -- --run src/app/ViewWindow.test.tsx src/features/projects/ProjectsView.detach.test.tsx src/features/projects/viewPlacement.test.ts`: vert, 3 fichiers / 22 tests;
- `npm run build`: vert (`tsc --noEmit` + build Vite), avec uniquement l'avertissement existant de taille de chunk.
- Aucun commit. Les changements backend et hors perimetre deja presents ont ete preserves.
## QA - 2026-09-09
Verdict: VERT pour #299 sur `fix/299-mcp-panel-detach-window`.
Audit du diff:
- Backend: `ViewPanel::Mcp` ajoute avec parse/as_str/title, label `view-mcp`, URL `index.html?panel=mcp`, et restauration des labels persistants.
- Frontend: `?panel=mcp` accepte par `ViewWindow`, MCP explicitement detachable, `ProjectsView` ouvre la fenetre OS pour `mcp`, conserve le panneau si `openViewWindow` echoue, et affiche une alerte avec retry.
Commandes executees:
- `git status --short --branch`: branche `fix/299-mcp-panel-detach-window`, worktree non commite avec les changements #299 et fichiers tickets.
- `git diff --stat` / `git diff -- ...`: diff inspecte, conforme au cadrage du ticket.
- `cargo fmt --all -- --check`: vert.
- `cargo test -p app-tauri view_window_tests`: vert, 9 tests passes, 0 failed.
- `cargo test -p app-tauri persisted_identity_accepts_mcp_view_label`: vert, 1 test passe, 0 failed.
- `npm test -- --run src/app/ViewWindow.test.tsx src/features/projects/ProjectsView.detach.test.tsx src/features/projects/viewPlacement.test.ts` depuis la racine: rouge attendu de commande (`ENOENT`, pas de `package.json` a la racine). Relance corrigee depuis `frontend/`.
- Depuis `frontend/`, `npm test -- --run src/app/ViewWindow.test.tsx src/features/projects/ProjectsView.detach.test.tsx src/features/projects/viewPlacement.test.ts`: vert, 3 fichiers passes / 22 tests passes. Sortie avec avertissements Vite existants et `HTMLCanvasElement.getContext()` non implemente par jsdom, sans echec.
- `git diff --check`: vert.
- Depuis `frontend/`, `npm run build`: vert (`tsc --noEmit && vite build`), avec l'avertissement existant de chunk > 500 kB.
Risques residuels:
- Validation limitee aux tests automatises et au build; je n'ai pas ouvert l'AppImage/UI desktop live pour cliquer le detachement MCP dans une fenetre systeme reelle.
- Le worktree contient aussi des modifications de metadonnees/tickets hors fichiers applicatifs #299 deja presentes; elles n'ont pas ete modifiees sauf ce carnet.
## Git - 2026-09-09
- Branche de travail: `fix/299-mcp-panel-detach-window`, creee depuis `develop` @ 602abfe.
- Inspection du diff: 6 fichiers applicatifs dans le perimetre (commands.rs, lib.rs app-tauri; ViewWindow.test, ProjectsView.tsx, ProjectsView.detach.test, viewPlacement.test frontend), +101/-3.
- QA reconfirmee par Git avant commit (note: rustup sans toolchain par defaut, commandes passees via `rustup run stable`):
- `rustup run stable cargo fmt --all -- --check`: vert;
- `git diff --check`: vert;
- `cargo test -p app-tauri view_window_tests`: 9/9 dont `mcp_view_window_contract_is_stable`;
- `cargo test -p app-tauri persisted_identity_accepts_mcp_view_label`: 1/1;
- `npm test` frontend: 3 fichiers / 22 tests verts;
- `npm run build` (`tsc --noEmit && vite build`): vert.
- Commit du correctif: `e4622cd` sur la branche fix — uniquement les 6 fichiers applicatifs.
- Merge local: `c47bc8d` `merge(views)` --no-ff vers `develop`; develop desormais 306 commits devant origin/develop.
- Hors perimetre laisse intact/non commite: `.ideai/tickets/296/*`, `.ideai/tickets/299/` (ce carnet), `.ideai/tickets/counter.json`, `.ideai/tickets/index.json`, `scripts/` — sync store a la charge de Main.
- Restants pour cloture: rebuild AppImage + validation live du detachement MCP depuis l'app installee (point deja signale par QA).
- Aucun push distant.
## AppImage - 2026-09-09
- Rebuild execute par Main sur `develop` apres le merge `c47bc8d`: `npm --prefix frontend run build` vert, puis depuis `crates/app-tauri`: `CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage` vert.
- Artefact: `target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage`, 119523832 octets, sha256 `31e400c6ef6caefef658fe11b51b371c8571ea8011555aa20e4d272a3eb2742b` (verifie par Git: presence, taille, horodatage 21:45 posterieur au merge).
- Commit dedie `941db62` `chore(appimage)` --allow-empty sur `develop` (artefact sous target/ gitignore, bookkeeping store hors perimetre: le message de commit est la trace durable in-repo du rebuild, convention #298).
- Tag annote `v0.42.0` pose sur `941db62` (convention vx.y.z: y incremente pour un rebuild commite sur develop; precedent v0.41.0).
- Restant unique: validation live du detachement MCP depuis l'app installee. Aucun push distant.