Files
IdeA/.ideai/tickets/25/carnet.md
Blomios 2fa226e413 chore(tickets): versionne le store de tickets et de sprints du projet
`.ideai/tickets/` et `.ideai/sprints/` sont le registre durable du projet (les
tickets sont déjà référencés par les messages de commit : #14, #21..#25, #28),
au même titre que `.ideai/memory/`. Ils entrent donc dans le dépôt.

À l'inverse, `.ideai/background-tasks/` (snapshots de rendez-vous headless) et
`.ideai/proposals/` (amendements de contexte en attente d'arbitrage) restent de
l'état d'exécution transitoire, de la même classe que `live-state.json` et
`.ideai/requests/` : ils doivent être ignorés (patch `.gitignore` à venir).

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

1.7 KiB

issueRef, version, updatedBy, updatedAt
issueRef version updatedBy updatedAt
#25 11
kind
user
1783491435654

Root cause

OpenTicketAssistant::execute fabriquait un plan OS-sandbox bespoke via SandboxPlan::project_read_only (grant RO sur project_root, posture Deny). Sous Landlock, un grant RO fait handle la classe read/exec (AccessFs::from_read(V1) inclut Execute). Le binaire CLI (codex/claude) vit hors du project root ⇒ execve refusé ⇒ EACCES (os error 13) au spawn sandboxé. Indépendant de la CLI. Les agents workspace n'ont pas le bug (plan no-op sous posture Allow).

Correctif (backend-pur, zéro port/DTO)

Décision Main : option fallback None. La surface assistant de ticket passe désormais None en 5e arg de factory.start (aligné sur les agents workspace). Garde-fous restants : policy MCP idea_ticket_read/update* + advisory LP3. Helper ticket_assistant_sandbox et preset SandboxPlan::project_read_only supprimés (plus aucun appelant).

Fichiers : crates/application/src/ticket_assistant.rs (+tests), crates/domain/src/sandbox.rs.

Validation

  • cargo test --workspace VERT (app-tauri 63, application 80, infrastructure 254, domain OK).
  • Test ciblé : factory.start reçoit SessionPlan::None + sandbox.is_none().
  • Tests Landlock infra verts sur la machine.
  • RÉSERVE : repro live Codex+Claude non exécutée — nécessite rebuild + swap de l'AppImage active + relance IdeA (interrompt la session).

Git

Commit 961a2ca → merge --no-ff cb20fab dans develop. Local only, pas de push.

Reste à faire

Repro live après rebuild AppImage pour clôture définitive. Dette différée : write-fence OS uniforme sur toutes les surfaces (cf. cadrage Architect) si l'on veut une clôture write-OS.