yoi/.yoi/tickets/00001KW55B33B/thread.md

14 KiB

作成

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


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: blocked_by_dependency_or_missing_authority

Reason:

  • Dashboard Queue 後に Ticket / relations / orchestration plan / workspace state を確認した。
  • 本 Ticket は 00001KW55B32Y (worker-runtimeにWorker実行Backend境界を追加する) に depends_on relation を持つ。
  • 00001KW55B32Y は本 routing pass で accepted され inprogress になった。
  • Adapter は execution backend boundary に接続する必要があるため、boundary の shape が review/merge/done になる前に開始しない。

Evidence checked:

  • Ticket body: adapter placement/dependency boundary、Profile/config/authority resolution、input/run lifecycle、protocol event bridge、Non-goals。
  • Relations: outgoing depends_on -> 00001KW55B32Y; incoming dependent 00001KW55B33H
  • Orchestration plan: blocker record orch-plan-20260627-190816-1 を追加。
  • Workspace state: 00001KW55B32Y is inprogress; current worktree clean before implementation side effects.

Next action:

  • 本 Ticket は queued のまま待機。
  • 00001KW55B32Y が reviewer approve / merge / validation / done になった後に再 routing する。

Decision

Routing decision:

Queue continuation was explicitly requested. The upstream boundary Ticket 00001KW55B32Y is closed after merge and validation, so this Ticket is now unblocked and accepted for implementation.

Plan:

  • Create child implementation worktree:
    • /home/hare/Projects/yoi/.worktree/00001KW55B33B-worker-runtime-worker-adapter
  • Branch:
    • work/00001KW55B33B-worker-runtime-worker-adapter
  • Route implementation to a sibling Coder Worker with focused write scope.
  • Route read-only review to a sibling Reviewer Worker after implementation.
  • Orchestrator retains merge, final validation, Ticket completion, child worktree/branch cleanup, and role Pod shutdown.

Review/implementation focus:

  • choose adapter placement without introducing crate dependency cycles, and record the rationale
  • connect embedded worker-runtime execution backend to existing worker crate execution
  • preserve Profile/config bundle and authority resolution boundaries
  • dispatch input to real Worker run lifecycle, not providerless/fake responses
  • bridge protocol::Event to Runtime observation bus / Backend WS
  • return typed diagnostics/rejections for missing config/provider/busy/unsupported operations
  • do not expose raw handles, sockets, credentials, session paths, or manifest paths to Browser-facing APIs
  • leave 00001KW55B33H queued until this adapter is merged/validated

Operational note:

  • StopPod must be called serially during cleanup; do not use parallel StopPod calls.

State changed

Queue continuation requested by user. Upstream dependency 00001KW55B32Y is closed with merge and validation complete, and this Ticket has no remaining blockers. Accepting implementation before child worktree / role Pod side effects.


Implementation report

Implementation kickoff:

  • Worktree created: /home/hare/Projects/yoi/.worktree/00001KW55B33B-worker-runtime-worker-adapter
  • Branch: work/00001KW55B33B-worker-runtime-worker-adapter
  • Coder Worker spawned: yoi-coder-00001KW55B33B-worker-adapter

Scope notes:

  • Coder write scope is limited to crates/worker-runtime/**, crates/worker/**, crates/workspace-server/**, root Cargo.toml, Cargo.lock, and package.nix if dependency/package changes are needed.
  • Coder is instructed not to modify Ticket records and not to operate in root/orchestration worktrees.

Implementation focus:

  • adapter placement without crate dependency cycles, with rationale reported back
  • connect worker-runtime execution backend boundary to existing worker crate run lifecycle
  • bridge existing protocol::Event to Runtime observation bus / Backend WS
  • preserve typed diagnostics for missing config/provider/secret and busy/unsupported operations
  • avoid fake/providerless responses and Browser-facing raw handle/path/credential/session leaks
  • leave downstream Workspace Companion real execution Ticket 00001KW55B33H queued until this adapter is merged/validated

Implementation report

Implementation report:

実装完了。マージ / close / cleanup は未実施。

Commit:

  • 18526ee36264610048f48b07b5db50ce86852fd2 feat: connect runtime worker execution adapter

Adapter 配置方針:

  • worker crate 側に runtime-adapter feature 付きで配置。
  • 理由:
    • worker-runtime は Runtime 境界 / 投影 / Backend trait を持つ下位境界として保ち、実 Worker 実装への依存を持たせない。
    • worker crate は既存の WorkerController / WorkerHandle / Method::Run lifecycle を直接扱えるため、fake/canned 応答を挟まずに adapter を組める。
    • workspace-serverworker = { features = ["runtime-adapter"] } を有効化して embedded Runtime に接続する形にし、crate dependency cycle を避けた。

変更概要:

worker crate

  • crates/worker/src/runtime_adapter.rs を追加。
  • WorkerRuntimeExecutionBackend を追加し、worker_runtime::execution::WorkerExecutionBackend を実装。
  • Runtime worker 作成時に WorkerController を spawn し、内部にのみ real WorkerHandle を保持。
  • Runtime input は Method::Run { input: vec![Segment::text(...)] } へ変換して既存 Worker run lifecycle に投入。
  • Worker の protocol::Event broadcast を購読し、WorkerExecutionContext::publish_protocol_event 経由で Runtime observation bus へ橋渡し。
  • Provider/profile/config 不足などは spawn/create 時の typed error/rejection として返し、fake assistant text は生成しない。
  • v0 double-run policy として queue は持たず、adapter 側 atomic busy flag + Worker status で二重 input を typed busy rejection。
  • stop/cancel は既存 Method::Shutdown / Method::Cancel へ接続。
  • Focused test を追加し、fake deterministic LLM client で Runtime input -> real Worker run lifecycle -> assistant output -> protocol::Event -> Runtime transcript projection の流れを検証。

worker-runtime

  • observe_worker_event で受けた real protocol::Event から transcript projection を更新。
    • TextDone -> Assistant transcript
    • Error -> System transcript
    • ToolResult -> System transcript
  • observation bus には既存 protocol::Event をそのまま保持し、subset output model は追加していない。

workspace-server

  • embedded Runtime 作成時に WorkerRuntimeExecutionBackend を接続。
  • EmbeddedWorkerRuntime::new_memory_with_execution_backend を追加。
  • Browser/API-facing projection に raw worker::Worker handle / raw execution handle / socket path / session path / credential / secret ref / manifest path は出していない。

package/dependency

  • worker に optional worker-runtime dependency + runtime-adapter feature を追加。
  • workspace-serverworkerruntime-adapter feature を有効化。
  • Cargo.lockpackage.nixcargoHash を更新。

Validation:

  • cargo fmt --all: success
  • cargo fmt --all --check: success
  • cargo test -p worker --features runtime-adapter runtime_adapter: success
  • cargo test -p worker-runtime --features ws-server: success
  • cargo test -p worker-runtime --features "ws-server fs-store": success
  • cargo test -p yoi-workspace-server: success
  • cargo check -p yoi: success
  • git diff --check: success
  • nix build .#yoi --no-link: success

Residual risks / review focus:

  • Runtime worker profile 解決は production adapter が通常の Worker profile 解決を使う。workspace-server 起動直後に fake 応答へ fallback せず、profile/provider/config 不足は typed error になる。この挙動が downstream 00001KW55B33H の Companion UX 設計と合っているか確認が必要。
  • Transcript projection は現時点で TextDone / Error / ToolResult を投影。より細かい tool-call lifecycle や thinking block の Browser projection が必要なら downstream で拡張対象。
  • Adapter は v0 non-queue policy。二重 input は busy rejection で、background queue/scheduler は実装していない。
  • workspace-serverworker を feature 付きで依存するため、crate layering と public API leak が意図通りかを重点 review してほしい。

Implementation report

Review kickoff:

Reviewer Worker spawned for 00001KW55B33B implementation.

  • Reviewer Worker: yoi-reviewer-00001KW55B33B-worker-adapter
  • Review target commit: 18526ee36264610048f48b07b5db50ce86852fd2 feat: connect runtime worker execution adapter
  • Review mode: read-only implementation worktree review

Review focus:

  • crate layering / runtime-adapter feature dependency cycle risk
  • production Profile/config/authority resolution and typed failure mode
  • protocol event bridge into Runtime observation bus / Backend WS
  • transcript projection consistency for real Worker run output
  • no fake/providerless fallback
  • busy / stop / cancel lifecycle semantics
  • Browser-facing non-leak of worker handles, raw execution handles, sockets, session paths, credentials, secret refs, and raw manifest paths
  • no downstream Workspace Companion bootstrap/UX scope creep

Review: request changes

request_changes

読取専用で差分・主要実装を確認した。crate layering 自体は概ね意図通りで、worker crate 側の runtime-adapter feature に adapter を置き、worker-runtimeworker に依存しない形は保たれている。また fake/providerless の canned response は見当たらない。

ただし、Ticket 受け入れ条件に対して以下が blocker。

Blockers

  1. workspace-server の embedded Worker input API がまだ adapter に接続されていない

    • workspace-server/src/server.rs:101-113 で adapter は embedded Runtime に install されている。
    • しかし browser/backend registry 側の EmbeddedWorkerRuntime::send_inputhosts.rs:1275-1285 で固定 reject のまま。
    • projection も hosts.rs:1008-1010can_accept_input: false, can_stop: false のまま。
    • そのため Ticket 要件の「Backend Worker input API からの user input を Method::Run 相当に渡す」「Runtime / Backend / Web Console が正規経路を共有する」「embedded Worker への user input が実 Worker run に渡る」を満たしていない。
  2. production profile resolution に builtin 二重 prefix の不整合がある

    • workspace-server の Ticket role mapping は hosts.rs:1920-1924ProfileSelector::Builtin("builtin:coder") のように値へ builtin: を含めている。
    • adapter 側は worker/src/runtime_adapter.rs:133-140Builtin(name) を常に format!("builtin:{name}") しているため、内部的に builtin:builtin:coder になる。
    • manifest::ProfileSelector::parse_clibuiltin:builtin:coder を source=builtin, name=builtin:coder と解釈するため、通常の builtin coder 解決に失敗する。Ticket role Worker の実 spawn path で破綻する可能性が高く、Profile/config resolution の受け入れ条件を満たさない。
  3. run_state/status projection が実 run lifecycle と整合していない

    • send_method は input の Method::Run 送信成功時も WorkerExecutionRunState::Idle を返している(worker/src/runtime_adapter.rs:300-313, 445-455)。
    • Runtime 側はその Idle を input accepted 後の execution status として保存する(worker-runtime/src/runtime.rs:369-373)。
    • bridge は protocol::Event を observation bus に流しているが、Worker の running/completed/errored/cancelled status を Runtime execution status に反映していない。
    • Ticket 要件の「run started / completed / errored / cancelled を Runtime Worker status と transcript projection に反映」「busy/double-run lifecycle semantics」の観点で不足。

確認済み

  • worker-runtime -> worker の依存逆流は見当たらず、adapter placement の方向性は良い。
  • protocol::Event bridge は publish_protocol_event を使って observation bus に流す実装になっている。
  • can_stream_events / can_read_bounded_transcript の public flag 復活は見当たらない。
  • downstream 00001KW55B33H の Companion UX 完成まで踏み込む scope creep は見当たらない。
  • Ticket 更新・merge・cleanup・ファイル変更・テスト実行はしていない。Static review のみ。