Files
IdeA/.ideai/tickets/13/carnet.md
Blomios 5ee25d1ef6 chore(ideai): état d'orchestration du sprint serveur headless (#65, #68-#70)
É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>
2026-07-16 15:02:14 +02:00

4.6 KiB

issueRef, version, updatedBy, updatedAt
issueRef version updatedBy updatedAt
#13 19
kind agent_id
agent a6ced819-b893-4213-b003-9e9dc79b9641
1784193634690

Ticket #13 — Server/client mode (carnet de chantier)

Ticket gated : review agent-utilisateur faite 2026-07-15. Base develop. Aucune action sortante.

Arbitrages produit validés (utilisateur)

  • Remote perso, 1 SEUL user. Pas de multi-tenant. CLI natif via WS PTY, xterm.js inchangé, PTY serveur. SSH écarté.
  • Desktop Tauri ET client/serveur sur cœur backend commun. Exposition Internet ⇒ TLS/reverse proxy obligatoire.
  • Packaging idea --serve, artefact unique. Auth pairing code + cookie session, jamais dans l'URL.
  • Multi-fenêtres OS HORS V1 web. B6→B8 + servir dist, validation live groupée à la fin.

Contrat de transport figé (Architect)

  • POST /api/invoke {command,args} (allowlist read-only). Cookie session HttpOnly,Secure,SameSite=Strict au pairing (POST /api/pair). POST /api/logout = révocation (B8). Cookie invalide→401 ; mauvais code→403 ; Origin refusée→403.
  • Frames WS JSON base64, ack unifié terminal.attached, output APRÈS l'ack. structured→UNSUPPORTED.
  • Flags : --listen, --public-origin, --allow-remote, --trust-reverse-proxy, --app-data-dir, --web-root (B8).

Plan de lots — TOUS LES LOTS DEV LIVRÉS

B0→B8 + F1→F6 livrés/verts/committés. + correctifs live écarts 1/2. Reste : finir la validation live groupée (utilisateur) puis merge develop + clôture.

Livrés VERT

⚙️ Validation live 1er passage (utilisateur) — 3 écarts remontés

  1. Erreur __TAURI_INTERNALS__ undefined + projets vides = MA commande de test était incomplète (build sans VITE_TRANSPORT=http → build desktop dans le navigateur ; et --app-data-dir non pointé sur le dossier desktop). PAS un bug de code.
  2. Défaut app-data-dir désaligné (RÉSOLU c9ce3d7) : default_app_data_dir() retournait ~/.local/share/IdeA alors que le desktop = identifier tauri app.idea.ide (~/.local/share/app.idea.ide). Corrigé : précédence --app-data-dir > IDEA_APP_DATA_DIR > $XDG_DATA_HOME/app.idea.ide > $HOME/.local/share/app.idea.ide + log démarrage idea --serve: app data dir = <path>. Doc corrigée (npm + VITE_TRANSPORT=http + avertissement double-writer). Garde-fou lock inter-process app-data-dir = ticket court à créer AVANT d'ouvrir des écritures web.
  3. Bouton Browse (créer/ajouter projet) inopérant en web = pickFolder()UNSUPPORTED_ON_WEB (dialogue natif OS absent du navigateur). PAS régression : report documenté F1. Sélection d'un projet EXISTANT couverte par list_projects/open_project (OK une fois écart 2 corrigé). Créer un NOUVEAU projet en web = nouveau lot (folder browser serveur sandboxé + create_project write) → ticket #64 créé (dependsOn #13), cadré par Architect, hors #13.

⚠️ RESTE : re-passage validation live (utilisateur, HORS SANDBOX)

Commande corrigée :

  1. cd frontend && VITE_TRANSPORT=http npx vite build (npm, jamais pnpm — voir mémoire frontend-uses-npm-not-pnpm).
  2. Fermer l'app desktop, puis cargo run --release -p app-tauri -- --serve --web-root frontend/dist --app-data-dir ~/.local/share/app.idea.ide (pairing code + app data dir sur stderr).
  3. Navigateur http://127.0.0.1:17373 → écran pairing → code.
  4. Vérifier : liste projets (existants visibles), ouvrir projet, terminal CLI (frappe→serveur, reload→réattache/scrollback), cellule agent, surfaces live (workstate/background Cancel-Retry/inbox), reconnexion, logout→pairing.

Réserves / écarts V1 (acceptés)

  • Replay V1 = repaint scrollback complet. Multi-onglets « dernier gagne » silencieux. F4 write-portal NON câblé web. Browse créer-projet web → #64. Lock double-writer app-data-dir → ticket court à créer.

Branches

feature/ticket13-pty-websocket (courante). À merger dans develop après validation live OK.

Prochaine étape

Re-passage validation live (commande corrigée ci-dessus). Si OK → Git merge dans develop → clôture #13. #64 (Browse web) à planifier après. Aucune action sortante sans validation utilisateur.

Dette hors chantier

Warnings clippy pré-existants crates/domain (fileguard/profile/sprint).