diff --git a/.yoi/tickets/00001KX6Y2A9Q/item.md b/.yoi/tickets/00001KX6Y2A9Q/item.md index f9d1ecb5..160c32ef 100644 --- a/.yoi/tickets/00001KX6Y2A9Q/item.md +++ b/.yoi/tickets/00001KX6Y2A9Q/item.md @@ -3,7 +3,7 @@ title: 'Implement WorkerFilesystemAuthority for no-workdir Workers' state: 'planning' priority: 'P1' created_at: '2026-07-10T21:13:49Z' -updated_at: '2026-07-10T21:32:47Z' +updated_at: '2026-07-10T21:46:21Z' assignee: null --- @@ -16,11 +16,12 @@ no-workdir Worker は、内部プロセスの実 cwd や fallback 元が何で ## 要件 - Worker に filesystem authority の有無を表す明示的な型を導入する。 +- Worker の `cwd: PathBuf` property と `worker.cwd()` accessor を削除し、working directory は `WorkerFilesystemAuthority::Local` の中だけで表現する。 - workdir あり Worker は local working directory として `root` と `cwd` を持ち、既存の tools default base / Bash cwd / fs view はこの値を使う。 - no-workdir Worker は filesystem authority を `None` として表現し、Worker authority としての cwd fallback を持たない。 -- filesystem authority が無い Worker では `Read` / `Write` / `Edit` / `Glob` / `Grep` / `Bash` を登録しない、または確実に利用不能にする。 -- `cwd` と `workspace_root` の意味を分離し、filesystem authority は `WorkerFilesystemAuthority` 側に寄せる。 -- 既存の `workspace_root: PathBuf` 依存はこのチケットでは全削除しなくてよいが、filesystem authority として使わない境界を明確にする。 +- filesystem authority が無い Worker では `Read` / `Write` / `Edit` / `Glob` / `Grep` / `Bash` を登録しない。 +- 既存の `worker.cwd()` 参照箇所をすべて分類し、filesystem authority が必要な箇所は `WorkerFilesystemAuthority::Local` 経由に置き換え、workspace 情報が必要な箇所は `workspace_root`/cwd 依存から切り離す方向で明示的に扱う。 +- `workspace_root` はこのチケットでは全削除しなくてよいが、filesystem authority として使わない境界を明確にする。 ## 実装メモ @@ -38,14 +39,20 @@ struct LocalWorkingDirectory { } ``` -最小実装では既存 `cwd: PathBuf` を一気に消さず、Worker 構築時に `WorkerFilesystemAuthority` を導入して tools 登録と runtime/embedded spawn 経路から先に参照させる。no-workdir embedded Worker は `None` を渡す。 +Worker 構築時に `WorkerFilesystemAuthority` を必須入力として受け取り、既存の `cwd: PathBuf` / `worker.cwd()` 経路を削除する。no-workdir embedded Worker は `WorkerFilesystemAuthority::None` を渡す。通常 Worker / workdir あり embedded Worker / spawned child Worker は、既存の working directory 解決結果から `LocalWorkingDirectory { root, cwd }` を作って渡す。 ## 受け入れ条件 - Worker が filesystem authority 有無を型で保持できる。 +- Worker struct から `cwd: PathBuf` field が削除され、`worker.cwd()` accessor も存在しない。 +- Worker の constructor / restore / embedded runtime spawn / child spawn 経路は `WorkerFilesystemAuthority` を明示的に受け渡す。 - workdir あり Worker では、tools の default cwd が `LocalWorkingDirectory.cwd` に一致する。 -- no-workdir Worker では core filesystem tools と Bash が model-visible tool surface に現れない、または実行不能であることをテストで確認できる。 -- no-workdir Worker 作成時に workspace root / process cwd fallback が filesystem authority として使われない。 +- workdir あり Worker では、authority root が `LocalWorkingDirectory.root` として保持され、cwd と root の意味が分かれている。 +- no-workdir Worker では core filesystem tools と Bash が model-visible tool surface に現れないことをテストで確認できる。 +- no-workdir Worker では `Read` / `Write` / `Edit` / `Glob` / `Grep` / `Bash` が実行経路上も構築されず、空 scope や実行時エラー頼りの制御になっていない。 +- no-workdir Worker 作成時に workspace root / process cwd / runtime cwd fallback が filesystem authority として使われない。 - embedded no-workdir Worker の spawn 経路から `WorkerFilesystemAuthority::None` を指定できる。 +- 既存の `worker.cwd()` 利用箇所が残っていないことを grep または同等のテストで確認できる。 +- Ticket / memory / workflow / child spawn など、従来 cwd に依存していた箇所は `WorkerFilesystemAuthority::Local` 必須箇所と workspace context 箇所に分類され、no-workdir で local filesystem に触れない。 - 既存の通常 Worker / workdir あり embedded Worker / spawned child Worker の動作が回帰しない。 - `cargo test` と `nix build .#yoi` が通る。 diff --git a/.yoi/tickets/00001KX6Y2A9Q/thread.md b/.yoi/tickets/00001KX6Y2A9Q/thread.md index bae4105a..e99f62de 100644 --- a/.yoi/tickets/00001KX6Y2A9Q/thread.md +++ b/.yoi/tickets/00001KX6Y2A9Q/thread.md @@ -28,4 +28,13 @@ LocalTicketBackend によって作成されました。 Hard dependencies は WorkerFilesystemAuthority を共通前提に限定する。WorkspaceBackend 分離は embedded no-workdir policy の MVP には related だが depends_on にはしない。 +--- + + + +## Decision + +Clarification: `process_cwd` is not part of this design. The Worker-level `cwd: PathBuf` property and `worker.cwd()` accessor should be removed rather than kept as a legacy authority surface. Working directory exists only under `WorkerFilesystemAuthority::Local`; no-workdir uses `WorkerFilesystemAuthority::None`. Tool registration must be derived from that authority, not manifest override or cwd fallback. + + ---