From 74b07bd787ec9356df9f2f79ea6f1f0d8ccfc2e7 Mon Sep 17 00:00:00 2001 From: Hare Date: Sat, 11 Jul 2026 09:15:16 +0900 Subject: [PATCH] ticket: accept workspace backend work --- .../artifacts/orchestration-plan.jsonl | 1 + .yoi/tickets/00001KX6Y6ZEA/item.md | 4 +- .yoi/tickets/00001KX6Y6ZEA/thread.md | 97 +++++++++++++++++++ 3 files changed, 100 insertions(+), 2 deletions(-) diff --git a/.yoi/tickets/00001KX6Y6ZEA/artifacts/orchestration-plan.jsonl b/.yoi/tickets/00001KX6Y6ZEA/artifacts/orchestration-plan.jsonl index f8d318b4..36eb37c8 100644 --- a/.yoi/tickets/00001KX6Y6ZEA/artifacts/orchestration-plan.jsonl +++ b/.yoi/tickets/00001KX6Y6ZEA/artifacts/orchestration-plan.jsonl @@ -1,3 +1,4 @@ {"id":"orch-plan-20260710-220343-1","ticket_id":"00001KX6Y6ZEA","kind":"after","related_ticket":"00001KX6Y2A9Q","note":"Ticket has explicit typed `depends_on` relation to `00001KX6Y2A9Q`. The prerequisite WorkerFilesystemAuthority refactor is currently `inprogress` and establishes the filesystem-authority/workspace-boundary this Ticket builds on. Start only after the prerequisite is approved, merged, and closed or an explicit combined-work decision is made.","author":"orchestrator","at":"2026-07-10T22:03:43Z"} {"id":"orch-plan-20260710-220349-2","ticket_id":"00001KX6Y6ZEA","kind":"waiting_capacity_note","note":"Dashboard queue routing inspected. This Ticket is concrete but blocked by typed `depends_on` relation to `00001KX6Y2A9Q`, which is currently inprogress. Starting now would conflict with the Worker struct/context/constructor refactor and filesystem-authority boundary. Leave queued and re-route after prerequisite merge/close.","author":"orchestrator","at":"2026-07-10T22:03:49Z"} {"id":"orch-plan-20260710-233841-3","ticket_id":"00001KX6Y6ZEA","kind":"waiting_capacity_note","note":"Queue review resumed after prerequisite `00001KX6Y2A9Q` closed. `00001KX6WVNPD` was accepted first because it is the smaller embedded no-workdir policy MVP and explicitly does not require WorkspaceBackend migration. This Ticket remains queued due migration-boundary/conflict risk: it removes Worker `workspace_root` and introduces WorkspaceBackend/WorkspaceClient surfaces in the same Worker context/constructor/runtime code that `00001KX6WVNPD` is now changing. Re-route after `00001KX6WVNPD` is reviewed/merged/closed, unless a human explicitly requests a combined branch.","author":"orchestrator","at":"2026-07-10T23:38:41Z"} +{"id":"orch-plan-20260711-001433-4","ticket_id":"00001KX6Y6ZEA","kind":"accepted_plan","accepted_plan":{"summary":"Replace Worker `workspace_root: PathBuf` identity with path-free workspace identity and Runtime/host-owned WorkspaceBackend/WorkspaceClient boundary. Preserve filesystem authority exclusively under `WorkerFilesystemAuthority::Local`, allow workspace_id/client without local filesystem authority, and migrate workspace-aware Worker references away from local workspace paths where in scope.","branch":"work/00001KX6Y6ZEA-workspace-backend","worktree":"/home/hare/Projects/yoi/.worktree/00001KX6Y6ZEA-workspace-backend","role_plan":"Orchestrator accepts queued Ticket after prerequisites `00001KX6Y2A9Q` and related `00001KX6WVNPD` were approved, merged, validated, and closed. Use sibling Coder for implementation in a dedicated worktree, then sibling Reviewer for read-only review. Orchestrator retains merge/final-validation/close/worktree cleanup authority. Per user instruction, do not call StopPod during cleanup."},"author":"orchestrator","at":"2026-07-11T00:14:33Z"} diff --git a/.yoi/tickets/00001KX6Y6ZEA/item.md b/.yoi/tickets/00001KX6Y6ZEA/item.md index d2054812..6f90b258 100644 --- a/.yoi/tickets/00001KX6Y6ZEA/item.md +++ b/.yoi/tickets/00001KX6Y6ZEA/item.md @@ -1,9 +1,9 @@ --- title: 'Replace Worker workspace_root path with WorkspaceBackend' -state: 'queued' +state: 'inprogress' priority: 'P1' created_at: '2026-07-10T21:16:22Z' -updated_at: '2026-07-10T23:38:54Z' +updated_at: '2026-07-11T00:15:11Z' assignee: null queued_by: 'workspace-panel' queued_at: '2026-07-10T22:03:27Z' diff --git a/.yoi/tickets/00001KX6Y6ZEA/thread.md b/.yoi/tickets/00001KX6Y6ZEA/thread.md index 913df816..0c4870b2 100644 --- a/.yoi/tickets/00001KX6Y6ZEA/thread.md +++ b/.yoi/tickets/00001KX6Y6ZEA/thread.md @@ -124,3 +124,100 @@ Next action: - 人間が combined branch を明示希望する場合のみ、この待機判断を再検討する。 --- + + + +## Decision + +Routing decision: implementation_ready + +Reason: +- 前提 `00001KX6Y2A9Q` は closed 済みで、`WorkerFilesystemAuthority::{None, Local}` と cwd 除去境界が merge 済み。 +- 関連 `00001KX6WVNPD` も closed 済みで、embedded no-workdir Worker policy / UI/API optionality が merge 済み。 +- この Ticket の typed `depends_on 00001KX6Y2A9Q` は解消済み。`00001KX6WVNPD` は `related` であり blocker ではなく、直前の conflict/migration-boundary waiting note もその Ticket の merge/close により解消済み。 +- `TicketList(inprogress)` は 0 件で、Orchestrator worktree は clean。 +- Ticket body/thread に Worker-level local path identity をなくし、Runtime/host-owned backend/client 境界へ移す binding decision が記録されている。 + +Evidence checked: +- Ticket body / thread / relations / orchestration plan。 +- Closed prerequisite `00001KX6Y2A9Q` and closed related policy Ticket `00001KX6WVNPD`。 +- `TicketRelationQuery(00001KX6Y6ZEA)`: outgoing `depends_on 00001KX6Y2A9Q` is closed; other relations are `related` only。 +- `TicketOrchestrationPlanQuery(00001KX6Y6ZEA)`: prior waiting notes were dependency/conflict notes now resolved by prerequisite and related Ticket closure。 +- `TicketList(inprogress)`: 0 件。 +- Orchestrator worktree status: clean。 + +IntentPacket: + +Intent: +- Worker の workspace identity/context を local path (`workspace_root: PathBuf`) から path-free identity (`Option`) と Runtime/host injected workspace client/handle 境界へ移行する。 +- Filesystem authority は `WorkerFilesystemAuthority` に閉じ込め、workspace identity/client が local filesystem authority を意味しないようにする。 + +Binding decisions / invariants: +- Worker struct は durable/context identity として local workspace path を保持しない。 +- Worker-level `workspace_root: PathBuf` field と local path-returning workspace identity accessor を削除する。 +- Worker が `WorkspaceBackendRef` / endpoint / auth / SecretRef / adapter を直接解決しない。 +- Runtime/host 側が backend binding source を保持・解決し、Worker には narrow `WorkspaceClient` / handle を注入する。 +- `workspace_id = Some(...)` かつ `filesystem = None` を表現できること。 +- `workspace_id = None` かつ `filesystem = None` の会話専用 Worker も表現できること。 +- local path が必要な処理は Runtime/host backend adapter または `WorkerFilesystemAuthority::Local` の内側に閉じ込める。 +- capability を導入する場合でも authority source にせず、tool registration / UX / discovery hint として扱い、enforcement は backend 側に置く。 +- `WorkerFilesystemAuthority` / embedded no-workdir policy を崩さない。workspace root fallback や process cwd fallback を filesystem authority として復活させない。 + +Requirements / acceptance criteria: +- Worker context に `workspace_id: Option` equivalent と injected workspace client/handle equivalent を持てる。 +- Worker struct に `workspace_root: PathBuf` が存在しない。 +- workspace-aware features(Ticket / memory / workflow / project records / workspace metadata)は local workspace path authority ではなく injected workspace client/handle 経由へ移行する、または移行が必要な箇所を fail-closed / unavailable diagnostic にする。 +- Runtime/host が `WorkspaceBackendRef` equivalent を保持・解決し、Worker launch/restore/embedded/spawn path へ安全に materialize できる。 +- No-workdir Worker は workspace API access と local filesystem authority の有無を独立に表現できる。 +- Existing local/workdir Workers still work with `WorkerFilesystemAuthority::Local` and local-path-only operations confined there。 +- Tests cover no local workspace path identity on Worker, workspace_id/client injection shape, no filesystem authority mixing, and representative workspace-aware API/tool behavior。 + +Implementation latitude: +- `WorkspaceId`, `WorkspaceBackendRef`, `WorkspaceClient` / handle の exact placement/name/API surface は existing crate boundaries に合わせてよい。 +- Minimal client/handle can support only currently needed workspace-aware operations if broad API migration would exceed Ticket scope, but it must not leave Worker-local path authority as the active path。 +- If a currently path-backed feature cannot be migrated safely in this Ticket, prefer explicit unavailable/fail-closed diagnostic with follow-up note rather than hidden path fallback。 +- Capability discovery is optional unless needed for safe tool registration/UX。 + +Escalate if: +- Removing `workspace_root` from Worker requires changing product semantics for memory/Ticket/workflow availability beyond local refactor。 +- A workspace-aware feature cannot be migrated without introducing a broad external backend/protocol design not captured by this Ticket。 +- You need to reintroduce Worker-held local workspace path as identity/authority。 +- You need to weaken no-workdir fs/Bash tool omission or `WorkerFilesystemAuthority` invariants。 +- Public API/serialization migration requires incompatible durable-state handling beyond existing restore/test coverage。 + +Validation: +- `rg "workspace_root" crates/worker crates/worker-runtime crates/yoi-pod-client crates/yoi-workspace-server` with expected remaining hits only outside Worker identity/authority or documented adapter boundaries。 +- `rg "worker\.workspace_root|workspace_root\(\)" crates` or equivalent showing Worker local path accessor removed。 +- `git diff --check` +- `cargo test -p worker --lib --tests` +- `cargo test -p worker-runtime --features ws-server,fs-store` +- `cargo test -p yoi-workspace-server --lib` +- `cargo check -p yoi` +- `cd web/workspace && deno task check && deno task test` if API/types/UI are touched。 +- `yoi ticket doctor` +- `nix build .#yoi --no-link` + +Current code map / likely touch points: +- `crates/worker/src/worker.rs` for Worker context fields and accessors。 +- `crates/worker/src/controller.rs` for workspace-aware tool/resource setup currently tied to workspace path。 +- `crates/worker-runtime/src/worker_backend.rs` for Runtime/embedded/restore construction and backend binding materialization。 +- workspace-server/client crates if backend/client DTOs or Worker launch summaries expose workspace identity。 +- tests around no-workdir Workers, restore, child spawn, Ticket/memory/workflow availability。 + +Critical risks / reviewer focus: +- Hidden local path authority retained in Worker under a renamed field/accessor。 +- Workspace identity/client being treated as filesystem authority。 +- WorkspaceBackendRef/endpoint/secret leaking into Worker-owned state。 +- Breaking local/workdir Workers or child spawn/restore while removing path identity。 +- Regressing embedded no-workdir policy or filesystem/Bash tool omission。 +- Over-broad migration that invents a large remote-workspace protocol instead of the minimal safe boundary needed here。 + +--- + + + +## State changed + +Prerequisite and prior conflict/migration-boundary Ticket are now closed. This Ticket is accepted for implementation before creating a worktree or spawning role Pods. + +---