diff --git a/.yoi/tickets/00001KVJABS1A/artifacts/orchestration-plan.jsonl b/.yoi/tickets/00001KVJABS1A/artifacts/orchestration-plan.jsonl new file mode 100644 index 00000000..d9f0ad0b --- /dev/null +++ b/.yoi/tickets/00001KVJABS1A/artifacts/orchestration-plan.jsonl @@ -0,0 +1 @@ +{"id":"orch-plan-20260620-115258-1","ticket_id":"00001KVJABS1A","kind":"accepted_plan","accepted_plan":{"summary":"Profile launch時に workspace-local `.yoi/override.local.toml` 等で明示された追加 `scope.allow` が `apply_profile_launch_policy()` の workspace_scope 再代入で失われないように修正する。Workspace root write scope / `.worktree` write deny の既定と Ticket role policyは維持する。","branch":"impl/00001KVJABS1A-profile-override-scope","worktree":"/home/hare/Projects/yoi/.worktree/00001KVJABS1A-profile-override-scope","role_plan":"Orchestrator は acceptance records を commit 後、専用 implementation worktree `.worktree/00001KVJABS1A-profile-override-scope` を作成し、Coder をその child worktree への narrow write scope で起動する。Coder 実装後、Reviewer が Profile launch policyのscope merge、workspace default scope/write-deny維持、Ticket role launch制約、snapshot/tool-visible scope一致、restore non-goalを確認する。"},"author":"yoi-orchestrator","at":"2026-06-20T11:52:58Z"} diff --git a/.yoi/tickets/00001KVJABS1A/item.md b/.yoi/tickets/00001KVJABS1A/item.md index ca7ab34a..abbb87f1 100644 --- a/.yoi/tickets/00001KVJABS1A/item.md +++ b/.yoi/tickets/00001KVJABS1A/item.md @@ -1,8 +1,8 @@ --- title: 'Profile launch should preserve override scope allowances' -state: 'queued' +state: 'inprogress' created_at: '2026-06-20T10:48:57Z' -updated_at: '2026-06-20T11:52:33Z' +updated_at: '2026-06-20T11:53:45Z' assignee: null queued_by: 'workspace-panel' queued_at: '2026-06-20T11:52:33Z' diff --git a/.yoi/tickets/00001KVJABS1A/thread.md b/.yoi/tickets/00001KVJABS1A/thread.md index 2d005313..ee2ae7f6 100644 --- a/.yoi/tickets/00001KVJABS1A/thread.md +++ b/.yoi/tickets/00001KVJABS1A/thread.md @@ -30,4 +30,67 @@ Marked ready by `yoi ticket state`. Ticket を `workspace-panel` が queued にしました。 +--- + + + +## Decision + +Routing decision: implementation_ready + +Reason: +- Panel Queue により、この Ticket は Orchestrator routing 対象として明示許可された。 +- Ticket body は Profile launch 時に workspace override 由来の追加 `scope.allow` が `apply_profile_launch_policy()` の `workspace_scope(...)` 再代入で失われる具体原因、再現例、維持すべき既定 scope / delegation、Ticket role policy、受け入れ条件を実装可能な粒度で定義している。 +- 未解決 relation blocker はない。 +- 現在 queued はこの Ticket のみ、inprogress は 0 件、child implementation Pods はなし、matching branch/worktree はなし、Orchestrator worktree は clean。 +- Risk domain は scope / profile / launch-policy / security boundary だが、Ticket は workspace root write scope と `.worktree` write deny の維持、Ticket role launch constraints、snapshot と tool-visible scope の一致、restore non-goal を明示している。bounded context check 後も implementation 前に必要な追加 human decision は見つからなかった。 + +Evidence checked: +- Ticket `00001KVJABS1A` body / thread / relations / artifacts。 +- `TicketRelationQuery(00001KVJABS1A)`: no blockers。 +- `TicketOrchestrationPlanQuery(00001KVJABS1A)`: no previous plan records; accepted plan recorded now。 +- Workspace state: + - Orchestrator worktree clean at `9e7c84a4`。 + - queued: this Ticket only。 + - inprogress: 0。 + - visible Pods: self + peers only; spawned children 0。 + - no matching implementation branch/worktree。 + +IntentPacket: + +Intent: +- Fix Profile launch policy so explicit additional `scope.allow` entries from Profile / workspace override survive the final launch policy application。 +- Preserve the safe workspace defaults and role-specific constraints while ensuring `resolved_manifest_snapshot.scope.allow` matches the actual readable/writable tool scope presented to the Pod。 + +Binding decisions / invariants: +- Do not discard explicit Profile/override `scope.allow` entries when adding workspace default scope。 +- Preserve normal Pod launch default workspace root write scope。 +- Preserve `.worktree` write deny default behavior。 +- Preserve Ticket role launch constraints and delegation defaults。 +- Do not re-evaluate overrides during restore from existing metadata snapshot; restore behavior is out of scope unless tests reveal an accidental regression。 +- Snapshot saved in Pod metadata must reflect final effective manifest/scope, not an intermediate manifest。 +- Avoid broad profile/config semantics changes beyond launch policy scope merging。 + +Requirements / acceptance criteria: +- Test that `.yoi/override.local.toml` extra `[[scope.allow]]` remains in `resolved_manifest_snapshot.scope.allow` after Profile launch。 +- Test that normal Pod launch still receives workspace root write scope and `.worktree` write deny。 +- Test that Ticket role launch scope/delegation defaults are not broken。 +- Relevant `cargo test` / `cargo check` / `cargo fmt --check` / `git diff --check` pass。 + +Escalate if: +- Fixing the merge would broaden runtime authority beyond explicit profile/override scope。 +- Current scope model cannot distinguish launch-policy default grants from user-specified grants without a schema/API decision。 +- Ticket role policy requires an authority decision not specified in the Ticket。 + +Next action: +- Record `queued -> inprogress` and commit Ticket records before creating implementation worktree and spawning Coder。 + +--- + + + +## State changed + +Ticket body/thread, relation metadata, Orchestrator worktree state, visible Pods, existing branch/worktree, and bounded Profile launch/scope policy context were checked. There is no unresolved blocking dependency, no inprogress/capacity blocker, and no missing planning decision. Accepting this queued Ticket for implementation before worktree/Pod side effects. + ---