--- name: web-client-is-single-column-no-desktop-shell description: memory note web-client-is-single-column-no-desktop-shell metadata: type: project --- # Le client web n'a pas de shell desktop (ni docks, ni layout grid) Constat établi en livrant le ticket #69 (adaptibilité téléphone), sur `develop @ 506d589`. ## Le fait Le client web livré par #13 (`VITE_TRANSPORT=http`) **n'a jamais eu** de docks gauche/droite, de fenêtres flottantes, de `LayoutTree`, de tabs projet, de menus ni de toasts. `main.tsx` route `isWeb` vers `WebApp`, qui est une surface autonome : - `WebApp` → `PairingScreen` **ou** `WebWorkspace` (rien d'autre) ; - `WebWorkspace` → une **colonne verticale unique** (`flex flex-col overflow-y-auto`) ; - `WebAgentCell` → `TerminalView`. Les seuls imports `@/features/*` de tout `features/web/` sont `terminals` et `workstate/useProjectWorkState`. Le shell desktop (`App`, layout, docks) n'est atteignable que par la branche non-web de `main.tsx`. ## Pourquoi ça compte Le cadrage de #69 prévoyait un lot « remplacer les docks gauche/droite/floating par une pile verticale, drawer ou bottom sheet ». Ce lot était **sans objet** : il n'y a pas de dock à remplacer, et l'arbitrage produit « bottom sheet vs drawer » ne se pose pas sur cette surface. Le vrai travail téléphone était ailleurs (terminal xterm pilotable au doigt, `dvh`, safe-area, rangées qui débordent à 360px). **Avant de cadrer un ticket « responsive / mobile » sur le client web, partir de `features/web/`, pas du shell desktop.** Les deux surfaces ne partagent que `TerminalView` et les hooks transport-neutres. ## Garde en place `frontend/src/features/web/WebMobile.test.tsx` épingle la frontière : le client web ne doit monter aucun `layout-grid` / `layout-grid-container` / `layout-split` / `layout-tabs`. Si un jour on veut du desktop-shell dans le web, ce test tombe — et c'est le signal qu'il faut re-cadrer, pas le supprimer. Voir aussi [[ui-rework-sprint-scoping-contracts]].