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:
79
.ideai/tickets/306/carnet.md
Normal file
79
.ideai/tickets/306/carnet.md
Normal 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.
|
||||
Reference in New Issue
Block a user