--- issueRef: "#197" version: 9 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} updatedAt: 1786712736077 --- 2026-08-14 Main - Ticket créé suite au bug utilisateur sur la dernière AppImage: même avec toutes les permissions accordées dans le menu IdeA, les agents ne peuvent pas écrire dans le root du projet. - Aucun ticket ouvert correspondant trouvé. - Architect: RCA principale = split de contrat entre projection générique Codex et launch structuré des agents. Le chemin structuré ne propage que des racines Git en writable_roots au lieu des write grants effectifs du menu, donc le root projet n'est jamais accordé à Codex même quand il devrait l'être. RCA secondaire = sélection sandbox_mode trop dépendante du fallback posture au lieu des write grants effectifs. Inverse bug lié côté ticket assistant = sur-grant whole project root hardcodé. - Git: branche locale préparée `fix/197-sandbox-permissions-match-menu` depuis `develop` @ `6a98752c`. - DevBackend a livré le fix backend sans commit: ajout d'un compilateur canonique de permissions Codex partagé par le launch structuré et ticket assistant; writable_roots dérivés des grants effectifs; sandbox_mode dérivé des writable_roots effectifs; tests ciblés verts sur agent_lifecycle et ticket_assistant. - QA a d'abord donné `PASS WITH RISK` à cause d'un risque d'overgrant si une policy autorise large puis refuse un sous-chemin. - DevBackend a confirmé le finding, corrigé en fail-closed la traduction Codex quand un deny d'écriture n'est pas représentable par `--add-dir`, et ajouté des tests de régression couvrant broad allow + subpath deny, fallback-wide write + subpath deny, disjoint explicit allow + unrelated deny, et ticket assistant. - QA verdict final `PASS`: le symptôme exact est couvert et le contrat fort est respecté côté runtime/source. Quand la policy est représentable, les writable_roots correspondent aux grants; sinon le système fail-close en read-only. Verdict crédible: le fix doit fonctionner après rebuild d'un nouveau binaire. - Limite assumée: la dernière AppImage déjà buildée n'a pas été revalidée et ne peut pas être modifiée sans rebuild; la validation a été faite depuis les sources/runtime local et les tests exécutés.