From 45b9912c8f66bc1d4baa47b9383826dd24b2206f Mon Sep 17 00:00:00 2001 From: Hare Date: Sat, 9 May 2026 03:27:22 +0900 Subject: [PATCH] =?UTF-8?q?docs(tickets):=20permission=E6=97=A2=E5=AE=9Apo?= =?UTF-8?q?licy=E6=95=B4=E7=90=86=E3=83=81=E3=82=B1=E3=83=83=E3=83=88?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 1 + tickets/permission-default-policy.md | 31 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 tickets/permission-default-policy.md diff --git a/TODO.md b/TODO.md index 2ba2561a..18e6cce8 100644 --- a/TODO.md +++ b/TODO.md @@ -3,6 +3,7 @@ - 半自動開発運用 Workflow → [tickets/auto-maintain-workflow.md](tickets/auto-maintain-workflow.md) - Workflow を memory crate から独立させる → [tickets/workflow-crate-extraction.md](tickets/workflow-crate-extraction.md) - Prompt / Workflow 評価メトリクスと改善 Offer → [tickets/prompt-eval-metrics.md](tickets/prompt-eval-metrics.md) +- Permission: allow-all 既定 policy への整理 → [tickets/permission-default-policy.md](tickets/permission-default-policy.md) - Pod CLI: マニフェスト関連フラグの整理 → [tickets/pod-cli-manifest-flags.md](tickets/pod-cli-manifest-flags.md) - Pod: 空応答ターン (Submit 後 AI 応答ゼロで Pause/Cancel) を自動巻き戻し → [tickets/pod-empty-turn-rollback.md](tickets/pod-empty-turn-rollback.md) - Pod: 任意ターンからの Fork(複数ターン巻き戻しを汎用化) → [tickets/pod-session-fork.md](tickets/pod-session-fork.md) diff --git a/tickets/permission-default-policy.md b/tickets/permission-default-policy.md new file mode 100644 index 00000000..d46edfee --- /dev/null +++ b/tickets/permission-default-policy.md @@ -0,0 +1,31 @@ +# Permission: allow-all 既定 policy への整理 + +## 背景 + +現在の tool permission は `[permissions]` セクションが無い場合に permission 層を無効化し、`[permissions]` がある場合だけ `default_action` を必須としている。 + +実行時の意味として、未指定時の挙動はほぼ `default_action = "allow"` と同じであり、`Option` による「無効」と allow-all policy が型上で分かれていることが仕様理解と実装の分岐を増やしている。 + +## 要件 + +- resolved manifest の permission は常に policy として存在する形に整理する。 +- 既定 policy は allow-all とし、`default_action = "allow"` かつ rule なしと同等にする。 +- manifest に `[permissions]` が無い既存ユーザー設定は従来通り全ツール実行可能にする。 +- `default_action = "deny"` による allowlist 型運用と、`default_action = "allow"` + deny rule による blocklist 型運用を明確に維持する。 +- merge/parse 用の partial config では、「その層が permissions に触れていない」ことを表現できるようにする。 + +## 方針 + +`PodManifest` のような resolve 後の型では `permissions: ToolPermissionConfig` を持ち、`ToolPermissionConfig::default()` を allow-all とする。 + +`PodManifestConfig` / partial 側では階層 manifest の merge semantics のために `Option` を残してよい。resolve 時に未指定を allow-all default policy へ畳み込む。 + +`[permissions]` セクションを書いた場合の `default_action` 必須制約は見直す。rule だけを書いた場合は `default_action = "allow"` と解釈できるようにするか、明示必須を維持する場合でも resolved 型上は allow-all default と矛盾しない形にする。 + +## 完了条件 + +- resolve 後の manifest から permission policy の `Option` が消えている。 +- `[permissions]` 未指定時に allow-all policy が得られる。 +- permission rule 評価と Pod への built-in hook 登録が、常在 policy 前提で単純化されている。 +- manifest resolve / merge / permission hook のテストが新しい既定値をカバーしている。 +- docs の `[permissions]` 説明が allow-all 既定であることを明記している。