111 lines
8.3 KiB
Markdown
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.
|