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>
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. |
|
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.