ticket: require cwd authority removal

This commit is contained in:
Keisuke Hirata 2026-07-11 06:46:25 +09:00
parent 6fa3d9d21f
commit 3df1c2dcfa
No known key found for this signature in database
2 changed files with 23 additions and 7 deletions

View File

@ -3,7 +3,7 @@ title: 'Implement WorkerFilesystemAuthority for no-workdir Workers'
state: 'planning' state: 'planning'
priority: 'P1' priority: 'P1'
created_at: '2026-07-10T21:13:49Z' created_at: '2026-07-10T21:13:49Z'
updated_at: '2026-07-10T21:32:47Z' updated_at: '2026-07-10T21:46:21Z'
assignee: null assignee: null
--- ---
@ -16,11 +16,12 @@ no-workdir Worker は、内部プロセスの実 cwd や fallback 元が何で
## 要件 ## 要件
- Worker に filesystem authority の有無を表す明示的な型を導入する。 - 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 はこの値を使う。 - workdir あり Worker は local working directory として `root``cwd` を持ち、既存の tools default base / Bash cwd / fs view はこの値を使う。
- no-workdir Worker は filesystem authority を `None` として表現し、Worker authority としての cwd fallback を持たない。 - no-workdir Worker は filesystem authority を `None` として表現し、Worker authority としての cwd fallback を持たない。
- filesystem authority が無い Worker では `Read` / `Write` / `Edit` / `Glob` / `Grep` / `Bash` を登録しない、または確実に利用不能にする - filesystem authority が無い Worker では `Read` / `Write` / `Edit` / `Glob` / `Grep` / `Bash` を登録しない。
- `cwd``workspace_root` の意味を分離し、filesystem authority は `WorkerFilesystemAuthority` 側に寄せる - 既存の `worker.cwd()` 参照箇所をすべて分類し、filesystem authority が必要な箇所は `WorkerFilesystemAuthority::Local` 経由に置き換え、workspace 情報が必要な箇所は `workspace_root`/cwd 依存から切り離す方向で明示的に扱う
- 既存の `workspace_root: PathBuf` 依存はこのチケットでは全削除しなくてよいが、filesystem authority として使わない境界を明確にする。 - `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 が 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` に一致する。 - workdir あり Worker では、tools の default cwd が `LocalWorkingDirectory.cwd` に一致する。
- no-workdir Worker では core filesystem tools と Bash が model-visible tool surface に現れない、または実行不能であることをテストで確認できる。 - workdir あり Worker では、authority root が `LocalWorkingDirectory.root` として保持され、cwd と root の意味が分かれている。
- no-workdir Worker 作成時に workspace root / process cwd fallback が filesystem authority として使われない。 - 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` を指定できる。 - 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 の動作が回帰しない。 - 既存の通常 Worker / workdir あり embedded Worker / spawned child Worker の動作が回帰しない。
- `cargo test``nix build .#yoi` が通る。 - `cargo test``nix build .#yoi` が通る。

View File

@ -28,4 +28,13 @@ LocalTicketBackend によって作成されました。
Hard dependencies は WorkerFilesystemAuthority を共通前提に限定する。WorkspaceBackend 分離は embedded no-workdir policy の MVP には related だが depends_on にはしない。 Hard dependencies は WorkerFilesystemAuthority を共通前提に限定する。WorkspaceBackend 分離は embedded no-workdir policy の MVP には related だが depends_on にはしない。
---
<!-- event: decision author: hare at: 2026-07-10T21:46:21Z -->
## 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.
--- ---