État durable de `.ideai/` accumulé pendant le chantier `idea-serve`, séparé du code applicatif conformément aux précédents `8e481ae` / `ad1f225`. - Tickets : #13 clôturé (server/client mode livré), #65 passé en QA avec son carnet de chantier complet (arbitrages Architect sur le propriétaire canonique des DTO, structure livrée, vérif QA, incident de topologie et sa leçon). #64/#66/#67 rattachés au sprint. Nouveaux tickets #68 (activer le serveur depuis le desktop, dépend de #65), #69 (adaptabilité client téléphone, en QA) et #70 (gestion des modèles locaux llama.cpp). - Mémoire : note `web-client-is-single-column-no-desktop-shell` — le client web n'a pas de shell desktop, à lire avant tout cadrage responsive sur cette surface. - Journal des tâches de fond : complétions enregistrées. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.6 KiB
issueRef, version, updatedBy, updatedAt
| issueRef | version | updatedBy | updatedAt | ||||
|---|---|---|---|---|---|---|---|
| #69 | 9 |
|
1784202783353 |
Ticket #69 — Adaptibilité client téléphone (carnet de chantier)
Statut : QA — en attente de validation live utilisateur sur un VRAI téléphone.
Branche : feature/ticket69-mobile-responsive-client (base develop @ 506d589). Commits : e22ea5b (shell), 8f15ad6 (terminal + tests), 6ed0087 (fix typecheck). Frontend uniquement — vérifié.
Cadrage Architect
Ticket frontend-pur : aucun changement DTO, use case, ni modèle LayoutTree. Contrats HTTP/WS et layout/terminal inchangés. Mais PAS du « CSS pur ».
⚠️ Le cadrage initial reposait sur un modèle FAUX (constat majeur)
Le lot 2 prévoyait « remplacer les docks gauche/droite/floating par une pile verticale/drawer/bottom sheet ». Il n'y a rien à remplacer : le client web n'a JAMAIS eu de docks, de fenêtres flottantes ni de LayoutTree. main.tsx route le mode http vers WebApp, surface autonome livrée par #13 : pairing ou WebWorkspace, déjà une colonne verticale unique. Les seuls imports @/features/* de tout features/web/ sont terminals et workstate — le shell desktop n'est pas atteignable depuis le web.
⇒ La question « bottom sheet vs drawer » ne se pose pas. Frontière épinglée par un test (WebMobile.test.tsx) + mémoire web-client-is-single-column-no-desktop-shell, pour que le cadrage ne reparte pas du même modèle faux.
Le vrai blocage était le terminal, pas le layout
Le clavier virtuel n'a ni Esc, ni Tab, ni Ctrl, ni flèches : on pouvait taper un prompt à un agent CLI mais pas l'interrompre, compléter un chemin, sortir d'un éditeur ou rappeler l'historique.
Livré
- Lot 1 (shell) :
100dvh(leheight:100%se résolvait sur le large viewport ⇒ la barre d'URL rétractable masquait le bas),viewport-fit=cover+ safe-area insets, padding responsive,inputMode="numeric"sur le code d'appairage. Zoom laissé libre (accessibilité). - Lot 2 (réinterprété) :
AgentLiveRow+ rangée de tâche de fond (statut/kind/Cancel/Retry ne tenaient pas à 360px) s'empilent soussm, ligne unique dèssm. - Lot 3 (terminal) :
TerminalViewexposeonReady(api)optionnel (desktop inchangé) ;api.sendpasse parterm.input()— même chemin qu'une frappe réelle, donc relais PTY + suspension du write-portal s'appliquent à l'identique (écrire sur le handle aurait court-circuité le portal).TerminalKeyBar: Esc/Tab/Ctrl-C/Ctrl-D/flèches en chips 44px ; chaque tap annule le déplacement de focus puis refocalise xterm (sinon le clavier virtuel se referme à chaque touche). Celluleh-64→h-[60dvh].
Vérif QA (exécution réelle) — VERT
npm run typecheckexit 0 ·npx vitest run→ 85 files / 774 passed ·VITE_TRANSPORT=http npx vite buildOK.- CSS mobile confirmé DANS le bundle (les valeurs arbitraires Tailwind avec
env()no-opent en silence) :100dvh,60dvh, les 4safe-area-inset-*,viewport-fit=cover,.h-\[60dvh\]{height:60dvh}. - Non-régression desktop :
LayoutGridne passe pasonReady; chemin desktop inchangé. - Rendu réel Chrome headless 360×780 : pairing tient sans débordement horizontal.
Réserve ASSUMÉE — trou de couverture réel
jsdom n'évalue PAS les media queries : les tests sont structurels, pas visuels. Ils ne prouvent NI le rendu aux breakpoints, NI l'effet réel de dvh, NI les safe areas, NI le clavier virtuel/focus sur navigateur mobile. QA : « acceptable pour merger avec réserve explicite », pas rouge. C'est exactement ce que la validation utilisateur doit couvrir.
Workspace + keybar non vérifiés visuellement à 360px (demande un serveur appairé + PTY vivant = territoire #65) — angle mort restant.
Écart de périmètre à arbitrer (Playwright)
Lot 4 demandait « Playwright ou équivalent ». DevFrontend a livré l'équivalent (vitest/jsdom) et REFUSÉ d'installer Playwright unilatéralement (binaires navigateur + surface CI = décision de dépendance qui remonte à Architect/Main). Avis QA : non bloquant pour ce lot, mais vitest/jsdom n'est pas un équivalent complet pour un ticket dont le risque principal est visuel mobile. ⇒ Follow-up à décider : ticket « tests de rendu réel aux breakpoints » si le projet accepte une dépendance navigateur/CI.
Prochaine étape
Validation live utilisateur sur un vrai téléphone (build VITE_TRANSPORT=http, servi par idea --serve/idea-serve, accès LAN). Si OK → Git merge dans develop (Git passera #69 avant #65 si les deux sont prêts : petit, frontend-pur, faible risque).