Versionne l'état runtime IdeA produit pendant le sprint #13 : store de tickets (dont les nouveaux #55 à #67), compteur et index, notes de mémoire projet des lots F0 à F5, et journal des tâches de fond. Séparé du code applicatif conformément à la convention du dépôt (cf.ad1f225,a244f32) : métadonnée d'orchestration last-writer-wins, sans impact sur le build. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.6 KiB
4.6 KiB
issueRef, version, updatedBy, updatedAt
| issueRef | version | updatedBy | updatedAt | ||||
|---|---|---|---|---|---|---|---|
| #13 | 18 |
|
1784184002362 |
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 sessionHttpOnly,Secure,SameSite=Strictau 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
- develop (
e457152) : B05505acc· B1955db79· B2c8fef2a· F1e0cdb4a· B34ed0b16· B4fa353f6· F2e500e31. - feature/ticket13-pty-websocket : B5
917be99· F37487902· B66391d1c· F45254f16· B71bc5217· F5dd1d083· B8d538808· F66117177· fix live écarts 1+2c9ce3d7. - B8 : sert dist/ same-origin, serve_static durci,
/api/logout, logs sécurité, doc remote. 57/57. - F6 : logout, 401→pairing, bannière reconnexion, serveur indispo. build+vitest 758/758.
⚙️ Validation live 1er passage (utilisateur) — 3 écarts remontés
- Erreur
__TAURI_INTERNALS__ undefined+ projets vides = MA commande de test était incomplète (build sansVITE_TRANSPORT=http→ build desktop dans le navigateur ; et--app-data-dirnon pointé sur le dossier desktop). PAS un bug de code. - Défaut app-data-dir désaligné (RÉSOLU
c9ce3d7) :default_app_data_dir()retournait~/.local/share/IdeAalors que le desktop = identifier tauriapp.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émarrageidea --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. - 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 :
cd frontend && VITE_TRANSPORT=http npx vite build(npm, jamais pnpm — voir mémoirefrontend-uses-npm-not-pnpm).- 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). - Navigateur
http://127.0.0.1:17373→ écran pairing → code. - 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).