From ab9162f686919b22e551abf4a8b04160889ad479 Mon Sep 17 00:00:00 2001 From: Blomios Date: Tue, 16 Jun 2026 08:51:57 +0200 Subject: [PATCH] docs(memory): consigne l'etat du systeme de permissions/sandbox + risque residuel $HOME Co-Authored-By: Claude Opus 4.8 --- .ideai/memory/MEMORY.md | 1 + .../permissions-sandbox-system-state.md | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 .ideai/memory/permissions-sandbox-system-state.md diff --git a/.ideai/memory/MEMORY.md b/.ideai/memory/MEMORY.md index 5492db9..5cefda9 100644 --- a/.ideai/memory/MEMORY.md +++ b/.ideai/memory/MEMORY.md @@ -4,3 +4,4 @@ - [idea-product-directives-main-handoff](idea-product-directives-main-handoff.md) — Directives produit consolidees pour guider Main sur la robustesse, la persistance, le handoff cross-profile et la sobriete UX. - [remaining-work-idea-agent-control-ide](remaining-work-idea-agent-control-ide.md) — Etat des lieux des acquis et des chantiers restants pour aligner IdeA avec la cible d'IDE de controle d'agents IA. - [mcp-bridge-and-delegation-runtime-notes](mcp-bridge-and-delegation-runtime-notes.md) — Pieges runtime du pont MCP/delegation et regle de rebuild de l'AppImage (binaire qui tourne = AppImage, pas les sources). +- [permissions-sandbox-system-state](permissions-sandbox-system-state.md) — Systeme de permissions/sandbox complet (Landlock sur PTY + structure) et le risque residuel $HOME/resume du chemin structure. diff --git a/.ideai/memory/permissions-sandbox-system-state.md b/.ideai/memory/permissions-sandbox-system-state.md new file mode 100644 index 0000000..9d01832 --- /dev/null +++ b/.ideai/memory/permissions-sandbox-system-state.md @@ -0,0 +1,26 @@ +--- +name: permissions-sandbox-system-state +description: Etat du systeme de permissions/sandbox IdeA (domaine pur -> projection advisory -> enforcement OS Landlock sur PTY ET structure) et l'unique risque residuel. +metadata: + type: project +--- +# Systeme de permissions / sandbox IdeA + +Chantier "permissions des agents" complet bout-en-bout au 2026-06-16, sur la branche `wip/p8c-checkpoint-before-codex`. Lots committes : LP4-0 (`b05d04a`), LP4-1/LP4-2 (`17ca65e`), LP4-3 (`7e01ac6`), LP4-4 (`6236cd7`). + +## Acquis (tout vert, ~80 suites) + +- **Domaine pur** (`crates/domain/src/permission.rs`, `sandbox.rs`) : modele declaratif (`Capability`, `Effect`, `Posture` Allow `None` => CLI garde son prompting natif), `compile_sandbox_plan(eff, ctx) -> Option`, port `SandboxEnforcer`, `render_permission_summary` (honnetete : fichiers = OS-enforced, commandes = advisory). +- **Store** : `.ideai/permissions.json` (separe d'`agents.json` : securite projet, pas identite). +- **Projection advisory LP3** : projecteurs Claude (`settings.json`) + Codex (sandbox/`config.toml`). +- **Enforcement OS LP4** : `LandlockSandbox` (Linux) / `NoopSandbox` / `default_enforcer()`. Actif sur **les deux chemins** : PTY brut (`pty/mod.rs` `spawn_command_sandboxed`) ET structure Claude/Codex JSON (`session/process.rs` `run_turn_sandboxed`). + +## Technique d'enforcement (load-bearing, ne pas casser) + +`enforce(plan)` tourne sur un **thread jetable AVANT le spawn**, puis le child est spawne depuis ce thread => il herite le domaine Landlock via les credentials de la tache (garanti par le noyau a travers fork/clone/execve, y compris posix_spawn). **Pas de `pre_exec`** : `infrastructure` est `#![forbid(unsafe_code)]` (intact), et le pre_exec n'aurait ete qu'une assurance de determinisme, sans valeur de securite ; allouer dans `landlock` post-fork (pre_exec) serait au contraire dangereux (deadlock malloc en process multithreade). Fail-closed : `Err` d'enforce => aucun child. Le garde-fou anti-regression est le test e2e **"ecriture hors-grant bloquee"** (present pour PTY et structure) : tant qu'il est vert, l'heritage tient. + +## Risque residuel a traiter (signale par l'Architecte, NON couvert) + +Les CLI structurees (claude/codex = binaires Node) ont des besoins FS ambiants lourds : `~/.claude`/`~/.codex` (credentials + cache de session pour le **resume**), `node_modules`, libs systeme, caches temp. `compile_sandbox_plan` ne fence que les classes explicitement posees et garde les lectures ouvertes — mais une policy posant un `Deny`/posture restrictive touchant `$HOME` **peut casser le resume**. Le mecanisme est valide au fake CLI (zero token), mais **avant d'activer un plan restrictif en prod sur le chemin structure**, valider e2e manuellement qu'un vrai tour claude/codex sous plan representatif garde run_dir + home de la CLI atteignables. C'est un sujet de **composition du plan** (run_dir reachability ; `SandboxContext.run_dir` existe mais n'est pas encore consomme par la traduction pure), pas du mecanisme — lot suivant si besoin. + +Voir [[remaining-work-idea-agent-control-ide]] pour le reste des chantiers produit.