--- issueRef: "#306" version: 4 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} updatedAt: 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 ` doit contenir `--add-dir ` et `--add-dir `. - 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.