Files
IdeA/.ideai/memory/ticket25-assistant-sandbox-eacces-rootcause.md
Blomios ffc458e477 docs(memory): notes projet du sprint UI rework et des tickets #7/#14/#16/#17/#18/#25/#28
Capitalise les notes durables produites pendant le sprint UI rework et les
tickets livrés depuis. Commit séparé du code : `.ideai/memory/` est le store
durable versionné, il ne doit jamais être mélangé aux commits de feature.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-08 08:38:16 +02:00

1.8 KiB

name, description, metadata
name description metadata
ticket25-assistant-sandbox-eacces-rootcause Root cause et contrat de fix du EACCES (os error 13) au spawn de la CLI d'un assistant de ticket — le preset SandboxPlan::project_read_only handle la classe exec Landlock.
type
reference

Symptôme : ouvrir un assistant de ticket (Codex ou Claude), premier message ⇒ process error: agent session start failed: <cli>: Permission non accordée (os error 13). Indépendant de la CLI.

Root cause : OpenTicketAssistant::execute (application/src/ticket_assistant.rs:97) fabrique un plan bespoke via SandboxPlan::project_read_only (domain/src/sandbox.rs:153) = grant RO sur project_root + RW sur le run_dir, posture Deny. Dans l'adapter Landlock (infrastructure/src/sandbox/landlock.rs:70), un grant RO handle la classe read, et AccessFs::from_read(V1) inclut AccessFs::Execute. Le binaire CLI vit hors du project root ⇒ execve refusé ⇒ EACCES au spawn() sandboxé (process.rs:248). Le chemin workspace n'a pas le bug car son plan vient de compile_sandbox_plan sous posture Allow/write-only ⇒ l'adapter no-op ou ne handle que write, read/exec restent ouverts. Piège déjà documenté dans l'adapter (« enrichment is the launch-path's concern LP4-2 »).

Fix (backend-pur, zéro port/DTO) : remplacer le preset par un write-fence — ne jamais handle read/exec (pas de grant RO), handle write seul, RW-grant = run_dir + state/home CLI + temp, posture Deny ⇒ écriture projet refusée, binaire/libs/home lisibles-exécutables. Fallback sûr : passer None à factory.start pour la surface ticket (garde policy MCP + projection advisory). Garde-fous fonctionnels réels = policy MCP idea_ticket_read/update* + LP3, pas l'OS-sandbox. Lié à ui-rework-sprint-scoping-contracts.