- Restaure .ideai/tickets/ depuis 851f1f8^ (167 tickets + index.json + counter.json) - Enlève les ignore rules .ideai/tickets/ dans .gitignore (ligne 51 et 75) - Permet le suivi durable du store tickets futur - Ne touche pas sdk/ (reste untracked)
2.5 KiB
id, number, title, status, priority, sprint, links, agentRefs, createdBy, updatedBy, createdAt, updatedAt, version
| id | number | title | status | priority | sprint | links | agentRefs | createdBy | updatedBy | createdAt | updatedAt | version | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 33a844e0-6a06-46c7-b800-d3497a7f45f4 | 94 | Permissions OpenCode ignorées : opencode.json code en dur bash/edit=ask au lieu de projeter EffectivePermissions | closed | high | null |
|
|
1784821271815 | 1784823278030 | 2 |
Bug
Les permissions configurées dans IdeA pour un agent sous profil OpenCode ne sont PAS appliquées dans le opencode.json généré. Le bloc permission est codé en dur à {"bash":"ask","edit":"ask"} quel que soit le réglage IdeA.
Repro
Config IdeA (agent OpenCode) : Read=Allow, Write=Deny, Delete=Allow, bash=Allow.
opencode.json généré (run dir) : "permission":{"bash":"ask","edit":"ask"}.
Attendu : bash reflète la posture bash (Allow→"allow"), edit reflète la posture Write (Deny→"deny").
Claude et Codex appliquent correctement les permissions ; seul OpenCode est touché.
Cause racine
Le pattern de projection des permissions (PermissionProjector + ProjectorKey::{Claude,Codex} dans crates/infrastructure/src/permission/) est bypassé pour OpenCode. Les générateurs opencode.json codent permission en dur à 4 endroits :
crates/application/src/agent/lifecycle.rs:2728-2734(opencode_config_json, variante llamacpp)crates/application/src/agent/lifecycle.rs:2814-2820(opencode_provider_config_json, variante cloud)crates/infrastructure/src/assistant/mod.rs:406-412(opencode_config_json, doublon)crates/infrastructure/src/assistant/mod.rs:494-500(opencode_provider_config_json, doublon)
Les call sites (lifecycle.rs:2361-2378 branche OpenCodeConfig, et assistant/mod.rs:247-256) ne passent pas les EffectivePermissions résolues aux générateurs.
Mapping attendu (à confirmer par Architect)
OpenCode permission = map tool→"allow"|"ask"|"deny". IdéA → OpenCode :
bash← posture bash effectiveedit← posture Write effective- Read/Delete ne sont pas exprimables dans opencode (pas de clé read/delete) — déjà enforcees par le sandbox Landlock (mémoire
permissions-sandbox-system-state).
Périmètre
Backend Rust pur. Validation possible par tests unitaires sur les générateurs (opencode_provider_config_json est déjà testé à lifecycle.rs:4413 et assistant/mod.rs:639) sans rebuild AppImage. Validation live = rebuild AppImage + relance IdeA.