chore(tickets): sync store local — #307 QA verte finale backend+frontend, merge develop e1dbe56 (branche fix/307-startup-ghost-states-reconciliation commit 57cf825), carnet v7 section Git; AppImage rebuild 14:21 déjà formalisée v0.46.0 (commit dédié 99b400a + tag annoté, artefact sha256 vérifié identique au contenu develop post-merge — pas de nouveau tag); tickets 299-307 + index/counter + #296 carnet/issue; attachments/ et scripts/ hors périmètre; aucun push

This commit is contained in:
2026-09-10 17:32:14 +02:00
parent e1dbe56d9c
commit ca1a27a2b9
22 changed files with 1781 additions and 6 deletions

View File

@ -0,0 +1,79 @@
---
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 <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.

View File

@ -0,0 +1,17 @@
---
id: "19aeb105-a6c3-4e28-ad3b-7adad8c4dc04"
number: 306
title: "IdeaAndroidPlugin: agents headless sans accès écriture au project root"
status: "closed"
priority: "high"
sprint: null
links: []
agentRefs: []
attachments: []
createdBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
createdAt: 1789026800927
updatedAt: 1789030701539
version: 4
---
L'utilisateur constate que sur le projet IdeaAndroidPlugin uniquement, un agent comme DevBackend a bien l'accès écriture au root via la TUI Native, mais déclare ne pas l'avoir quand un autre agent lui demande d'écrire ou quand il est sollicité via la CLI custom. Investiguer la différence de sandbox/permissions/run config entre TUI Native, delegation headless et CLI custom, puis corriger si nécessaire.