Files
IdeA/.ideai/tickets/306/carnet.md

5.9 KiB

issueRef, version, updatedBy, updatedAt
issueRef version updatedBy updatedAt
#306 4
kind agent_id
agent a6c6ea12-bfc6-4bdc-8031-324102dfa34d
1789030701539

Carnet

2026-09-10 — Diagnostic root writable perdu en headless/custom CLI

Demande utilisateur : comprendre pourquoi, sur IdeaAndroidPlugin, les agents ont l'ecriture au project root via TUI Native mais pas via delegation headless ou CLI custom.

Preuves collectees :

  • Root Unix /home/anthony/Documents/Projects/IdeaAndroidPlugin en drwxrwxrwx; ce n'est pas une permission OS classique.
  • .ideai/permissions.json a projectDefaults.write:** en allow; les permissions metier autorisent l'ecriture.
  • AGENTS.md de DevBackend pointe correctement vers /home/anthony/Documents/Projects/IdeaAndroidPlugin.
  • config.toml Codex genere contient sandbox_mode = "workspace-write" et les sections [projects."..."] trust_level = "trusted", mais pas de racines dynamiques; pour codex exec, les roots writable sont transmis par argv --add-dir via CodexExecSession::build_spawn_line.
  • Sessions OK de DevBackend : turn_context.workspace_roots contient [runDir, projectRoot, managedTmp] et sandbox_policy.writable_roots contient [projectRoot, managedTmp].
  • Sessions KO de Main et certaines sessions DevBackend : workspace_roots contient seulement [runDir, managedTmp]; sandbox_policy.writable_roots contient seulement [managedTmp]; la sonde touch .idea-write-check depuis le root echoue avec Read-only file system.
  • Les sessions KO affichent developer_instructions=null et/ou chemin custom/reprise ancien; une trace Main KO est en multi_agent_version="v1".

Cadrage Architect : cause probable dans le chemin structured/headless resume/custom CLI qui reconstruit ou rattache une session Codex sans recalculer/transmettre la StructuredProviderLaunchPolicy::Codex issue de project_root + EffectivePermissions. Le lancement standard sait le faire via compile_codex_launch_policy; la factory et CodexExecSession savent ensuite passer les --add-dir si la policy arrive.

Fichiers a inspecter pour correctif :

  • crates/application/src/agent/lifecycle.rs : calcul des permissions effectives, managed tmp, build_structured_launch_policy, appel launch_structured.
  • crates/application/src/codex_permissions.rs : contrat pur EffectivePermissions + project_root + extra_writable_roots -> StructuredProviderLaunchPolicy::Codex.
  • crates/infrastructure/src/session/factory.rs : passage de la policy vers CodexExecSession.
  • crates/infrastructure/src/session/codex.rs : build_spawn_line, --add-dir sur nouveaux tours et resume.
  • Chemins de reprise/rattache/custom CLI qui creent des thread settings ou relancent une session sans passer par la policy complete.

Fix minimal recommande : garantir que tout lancement/reprise/rattache structured Codex recalcule et transmet la policy Codex depuis le project root courant et les permissions courantes; ajouter un invariant/log fort quand workspace-write est produit sans projectRoot alors que les permissions autorisent write:**.

Tests requis :

  • Application : reprise structured Codex avec cwd=runDir, project_root externe au runDir et write:** doit produire une policy contenant projectRoot + managedTmp.
  • Infrastructure : codex exec resume <thread> doit contenir --add-dir <projectRoot> et --add-dir <managedTmp>.
  • Non-regression read-only/deny : ne pas injecter le project root quand la policy refuse l'ecriture.

Etat : diagnostic trouve; aucun correctif code applique dans ce tour.

2026-09-10 10:32 CEST — Verdict QA post-correctif

Verdict : VERT.

Diff inspecte sur les fichiers annonces : crates/backend/src/lib.rs, crates/infrastructure/src/session/factory.rs, crates/application/tests/agent_lifecycle.rs, crates/infrastructure/src/session/mod.rs.

Commandes executees :

  • git diff --check : OK, aucune sortie.
  • cargo fmt --all --check : OK, aucune sortie.
  • cargo test -p application --test agent_lifecycle custom_chat_codex_resume_recomputes_project_and_managed_tmp_writable_roots : 1 passed; 0 failed; 110 filtered out.
  • cargo test -p infrastructure --lib codex : 42 passed; 0 failed; 336 filtered out. Couvre notamment le refus Codex sans policy explicite, les commandes resume Codex, les policies read-only/workspace-write et les --add-dir.
  • cargo test -p backend --lib automatic_resume_preserves_custom_chat_structured_routing : 1 passed; 0 failed; 100 filtered out.
  • cargo check -p app-tauri : OK.
  • cargo check -p web-server : OK.

Note QA : une premiere tentative cargo test -p infrastructure --lib factory_rejects_codex_launch_without_explicit_policy factory_routes_claude_and_codex ... a echoue avant execution car Cargo n'accepte pas plusieurs filtres de test positionnels. Elle a ete remplacee par le filtre valide codex, plus large et couvrant les tests cibles.

Risque residuel : validation par tests unitaires/integration fake CLI et checks de compilation, pas de lancement AppImage ni reproduction manuelle sur IdeaAndroidPlugin.

2026-09-10 10:57 CEST — Commit, tag et AppImage

Commit local cree via runner IdeA car Main ne peut pas ecrire dans .git et Git ne repondait pas aux rendez-vous :

  • Commit : eb86366 fix(codex): preserve project root on structured resume.
  • Branche : develop.
  • Tag local : v0.46.0 sur eb86366 (dernier tag precedent v0.45.0, increment y car commit sur develop).
  • Aucun push.

Build AppImage execute avec le skill build-appimage :

  • npm --prefix frontend run build : OK.
  • Depuis crates/app-tauri : CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage : OK.
  • Artefact produit : target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage.
  • Taille verifiee : 115M.

Etat final : correctif commite, tagge, AppImage construite. Remplacement de l'AppImage installee et relance d'IdeA non automatises car cela tue l'orchestrateur actif; etape manuelle utilisateur.