yoi/.yoi/tickets/00001KX6Y2A9Q/thread.md

8.4 KiB
Raw Blame History

作成

LocalTicketBackend によって作成されました。


Plan

整理結果:

  1. 00001KX6Y2A9Q WorkerFilesystemAuthority

    • hard dependency なし。
    • no-workdir を filesystem authority none として型で表現する基盤。
  2. 00001KX6WVNPD Embedded no-workdir Worker authority policy

    • depends_on: 00001KX6Y2A9Q。
    • UI/API の workdir 任意化と embedded no-workdir tool surface 制御を実装する。
  3. 00001KX6Y6ZEA WorkspaceBackend / workspace_id 分離

    • depends_on: 00001KX6Y2A9Q。
    • workspace_root path 依存を workspace_id + Runtime-injected WorkspaceClient へ移行する。
    • embedded no-workdir MVP をブロックしない。

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.


Intake summary

Marked ready by yoi ticket state.


State changed

Marked ready by yoi ticket state.


State changed

Ticket を workspace-panel が queued にしました。


Decision

Routing decision: accept for implementation

Evidence checked:

  • Ticket 00001KX6Y2A9Q is queued and has a concrete implementation scope。
  • TicketRelationQuery(00001KX6Y2A9Q) shows incoming dependents (00001KX6WVNPD, 00001KX6Y6ZEA) but no outgoing unresolved blockers for this Ticket。
  • TicketOrchestrationPlanQuery(00001KX6Y2A9Q) had no prior plan; accepted plan was recorded in this routing pass。
  • TicketList(inprogress) shows 0 inprogress Tickets。
  • Orchestrator worktree /home/hare/Projects/yoi/.worktree/orchestration is clean。

Accepted plan:

  • Create dedicated implementation worktree /home/hare/Projects/yoi/.worktree/00001KX6Y2A9Q-worker-filesystem-authority from current orchestration branch。
  • Use branch work/00001KX6Y2A9Q-worker-filesystem-authority
  • Route implementation to sibling Coder Pod, then external review to sibling Reviewer Pod。
  • Orchestrator retains merge, final validation, Ticket close, and child worktree/branch cleanup authority。

Implementation focus:

  • Add explicit WorkerFilesystemAuthority with no-workdir None and local Local(LocalWorkingDirectory) representation。
  • Remove Worker-level cwd: PathBuf field and worker.cwd() accessor。
  • Gate core filesystem tools and Bash on WorkerFilesystemAuthority::Local; no-workdir Workers must not register those tools。
  • Update constructor / restore / embedded / child-spawn paths to pass filesystem authority explicitly。
  • Separate workspace context from filesystem authority; do not use workspace root / process cwd / runtime cwd fallback as no-workdir authority。
  • Add tests for no-workdir model-visible tool surface and execution construction behavior, plus grep/equivalent assurance that worker.cwd() usages are gone。

State changed

Dashboard queue authorization was inspected, no blockers were found, and an accepted plan was recorded. Moving queued Ticket to inprogress before creating implementation worktree or spawning Pods.


Implementation report

Implementation progress report:

  • Coder Pod yoi-coder-00001KX6Y2A9Q-worker-fs-authority completed implementation in /home/hare/Projects/yoi/.worktree/00001KX6Y2A9Q-worker-filesystem-authority on branch work/00001KX6Y2A9Q-worker-filesystem-authority
  • Implementation commit: b50b94612a1185dc5bdc935d83d63f9d6ace826b feat: add explicit worker filesystem authority
  • Orchestrator inspected the worktree status, branch log, commit stats, git diff --check db3a7165..HEAD, and grep checks for worker.cwd() / Worker fn cwd; worktree was clean, diff check passed, and no matches were found。

Coder-reported implementation summary:

  • Added explicit WorkerFilesystemAuthority::{None, Local(LocalWorkingDirectory)} boundary。
  • Removed Worker-level cwd: PathBuf and worker.cwd() accessor。
  • Local Workers carry authority root and cwd separately。
  • No-workdir embedded Worker spawn passes WorkerFilesystemAuthority::None explicitly instead of falling back to runtime/process cwd。
  • Controller tool registration branches on local filesystem authority:
    • Local Workers register Read, Write, Edit, Glob, Grep, Bash and get fs view/completions。
    • No-workdir Workers do not construct/register filesystem or Bash tools。
  • Ticket / worker-spawn / peer-discovery cwd-dependent paths now require local filesystem authority instead of using workspace root as fallback。
  • Tests added/updated for no-workdir tool omission, no cwd fallback, and local/materialized Worker filesystem/Bash behavior。

Coder-reported validation passed:

  • 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
  • git diff --check
  • cargo run -p yoi -- ticket doctor
  • nix build .#yoi --no-link
  • rg "worker\\.cwd\\(" crates || true: no matches。
  • rg "pub fn cwd\\(" crates/worker/src/worker.rs || true: no Worker cwd accessor remains。

Not run by Coder:

  • cd web/workspace && deno task check && deno task test because web/API/types were not touched。

Next action:

  • Route to external Reviewer Pod before merge/close decisions。

Review: approve

External review result: approve

Evidence:

  • WorkerFilesystemAuthority::{None, Local(LocalWorkingDirectory)} and separate root/cwd are present in crates/worker/src/worker.rs; Worker now stores filesystem_authority plus separate workspace_root, with no cwd: PathBuf Worker field。
  • Core filesystem/Bash registration is gated on worker.local_working_directory() in crates/worker/src/controller.rs:619-636; no-local Workers return (None, None) and do not construct/register Read/Write/Edit/Glob/Grep/Bash
  • Ticket and worker-spawn surfaces require local authority rather than falling back to workspace_root (controller.rs:647-667, 719-733)。
  • Embedded runtime creates WorkerFilesystemAuthority::Local(binding.root, binding.cwd) only when a working directory binding exists, otherwise WorkerFilesystemAuthority::None (crates/worker-runtime/src/worker_backend.rs:297-310)。
  • Tests cover no-workdir omission and no cwd fallback via empty observed materialized cwds plus forbidden core tool names (worker_backend.rs:1133-1201), and materialized local Workers exposing core tools with materialized cwd (worker_backend.rs:1203-1260)。
  • Grep check found no worker.cwd() / Worker fn cwd; the only remaining pub fn cwd hit is WorkingDirectory binding API, not Worker

Blockers: none。

Validation performed by reviewer:

  • Read-only ticket/diff/source/test inspection and grep checks。
  • Reviewer did not rerun cargo/nix tests; coder-reported validation covers the requested test/build set。

Non-blocking note:

  • Workspace-context surfaces such as memory/MCP/resident prompt loading can still be backed by workspace_root when enabled; this was treated as outside this Tickets focused core filesystem/Bash authority gate, but may need follow-up if the intended invariant becomes “no local file reads of any kind” for no-workdir Workers。