5.9 KiB
issueRef, version, updatedBy, updatedAt
| issueRef | version | updatedBy | updatedAt | ||||
|---|---|---|---|---|---|---|---|
| #306 | 4 |
|
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/IdeaAndroidPluginendrwxrwxrwx; ce n'est pas une permission OS classique. .ideai/permissions.jsonaprojectDefaults.write:**enallow; les permissions metier autorisent l'ecriture.AGENTS.mddeDevBackendpointe correctement vers/home/anthony/Documents/Projects/IdeaAndroidPlugin.config.tomlCodex genere contientsandbox_mode = "workspace-write"et les sections[projects."..."] trust_level = "trusted", mais pas de racines dynamiques; pourcodex exec, les roots writable sont transmis par argv--add-dirviaCodexExecSession::build_spawn_line.- Sessions OK de
DevBackend:turn_context.workspace_rootscontient[runDir, projectRoot, managedTmp]etsandbox_policy.writable_rootscontient[projectRoot, managedTmp]. - Sessions KO de
Mainet certaines sessionsDevBackend:workspace_rootscontient seulement[runDir, managedTmp];sandbox_policy.writable_rootscontient seulement[managedTmp]; la sondetouch .idea-write-checkdepuis le root echoue avecRead-only file system. - Les sessions KO affichent
developer_instructions=nullet/ou chemin custom/reprise ancien; une trace Main KO est enmulti_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, appellaunch_structured.crates/application/src/codex_permissions.rs: contrat purEffectivePermissions + project_root + extra_writable_roots -> StructuredProviderLaunchPolicy::Codex.crates/infrastructure/src/session/factory.rs: passage de la policy versCodexExecSession.crates/infrastructure/src/session/codex.rs:build_spawn_line,--add-dirsur 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_rootexterne au runDir etwrite:**doit produire une policy contenantprojectRoot + 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.0sureb86366(dernier tag precedentv0.45.0, incrementycar commit surdevelop). - 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.