Files
IdeA/.ideai/memory/checkpoint-rendezvous-redesign-devbackend-todo.md
Blomios 50e99e5ced chore(workstate): notes mémoire campagne MCP T1→T10 + état runtime
Capitalise la mémoire projet produite pendant la campagne de tests fonctionnels
MCP (rendez-vous inter-agents, backstop no-reply, réconciliation live-state au
reboot) et synchronise l'état runtime `.ideai/` (agents, layouts, skills, index
mémoire). Inclut la mise à jour du contexte de l'agent Git.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 13:32:28 +02:00

3.7 KiB

name, description, metadata
name description metadata
checkpoint-rendezvous-redesign-devbackend-todo memory note checkpoint-rendezvous-redesign-devbackend-todo
type
project

Checkpoint — Backstop no-reply : 1ère validation live ÉCHOUÉE → cause racine corrigée → RE-VALIDATION LIVE EN ATTENTE (MAJ 2026-06-23 ~19:40)

Résultat du 1er test live (AppImage 0.3.0 du commit e87c05f) : ÉCHEC reproduisant le wedge

Scénario joué : DevBackend→QA ping (test backstop), QA répond pong EN PROSE sans idea_reply.

  • QA a bien émis un vrai turn_duration durationMs=2218 (transcript, ts 17:23:40.161Z).
  • MAIS [turn-watcher] turn_ended JAMAIS émis (grep -c turn_ended sur tout le log = 0) → DevBackend resté coincé → rendez-vous Main→DevBackend a timeout 600s (MCP error -32001).

CAUSE RACINE (prouvée) — encodage du slug projet Claude faux

Traces [turn-watcher] arm : toutes conversation=<none> + baseline … count=0. Le dossier transcript calculé n'existait pas :

  • calculé (faux) : …/-home-…-IdeA-.ideai-run-<uuid> (point conservé) → ls = absent
  • réel (disque) : …/-home-…-IdeA--ideai-run-<uuid> (DOUBLE tiret) encode_cwd (crates/infrastructure/src/inspector/claude_paths.rs) ne remplaçait que //\\ et gardait le .. Claude Code encode replace(/[^a-zA-Z0-9]/g,'-'). Dir introuvable → conversation non résolue → baseline 0 → turn_duration jamais vu → backstop mort. Log de référence : /home/anthony/.local/share/app.idea.ide/logs/idea.log.

FIX LIVRÉ par DevBackend (NON commité — Git tranche)

  • encode_cwd : .map(|c| if c.is_ascii_alphanumeric() { c } else { '-' }) (algo exact Claude Code). /IdeA/.ideai/run-IdeA--ideai-run.
  • Test non-régression ajouté encode_cwd_encodes_dot_in_run_dir_to_double_dash (PASS). Test Windows maj C:\\Users\\meC--Users-me.
  • DevBackend précise : count_turn_ends agrège déjà tous les .jsonl du dossier ⇒ pas besoin de choisir un .jsonl ; conversation=<none> à l'armement est normal et sans impact une fois le dir correct.

QA PRÉ-VALIDATION : VERTE

cargo test --workspace = 1616 passed, 0 failed ; cargo clippy --workspace --all-targets = 0 erreur. Nouveau test + 5 tests turn-watcher tous PASS.

EN COURS : rebuild AppImage (par Main, perms project-root OK)

Recette : npm --prefix frontend run build puis depuis crates/app-tauri/ APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage. Logs scratchpad fe-build.log / appimage-build.log. Sortie : /home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage.

SEUL RESTE À FAIRE = RE-VALIDATION LIVE (garde-fou Git : pas de merge sans wedge prouvé levé EN LIVE)

  1. Utilisateur remplace l'AppImage installée par la nouvelle + relance IdeA (coupe la session).
  2. Session fraîche : rejouer DevBackend→QA pong-sans-idea_reply. ATTENDU cette fois : trace arm … dir=…IdeA--ideai-run-… conversation=… sur dossier EXISTANT + baseline NON nulle + [turn-watcher] turn_duration detected … -> turn_ended ⇒ libération du demandeur ~grâce (≈2s) avec résultat no-reply synthétique, et non-régression du chemin propre idea_reply.
  3. Si VERT → demander à Git d'amender/committer le fix sur feature/rendezvous-no-reply-backstop puis décider du merge develop. Si KO → relayer trace réelle à DevBackend.

Trou produit confirmé (hors scope, à planifier)

Au reboot, .ideai/live-state.json non réconcilié : agents restent working fantôme (process morts). Fichier file-guardé, idea_workstate_set = self only, aucun reset cross-agent. Manque : réconciliation au boot OU outil orchestrateur de reset.