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_onrelation を持つ。 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 dependent00001KW55B33H。 - Orchestration plan: blocker record
orch-plan-20260627-190816-1を追加。 - Workspace state:
00001KW55B32Yis 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-runtimeexecution backend to existingworkercrate execution - preserve Profile/config bundle and authority resolution boundaries
- dispatch input to real Worker run lifecycle, not providerless/fake responses
- bridge
protocol::Eventto 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
00001KW55B33Hqueued until this adapter is merged/validated
Operational note:
StopPodmust 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/**, rootCargo.toml,Cargo.lock, andpackage.nixif 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-runtimeexecution backend boundary to existingworkercrate run lifecycle - bridge existing
protocol::Eventto 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
00001KW55B33Hqueued until this adapter is merged/validated
Implementation report
Implementation report:
実装完了。マージ / close / cleanup は未実施。
Commit:
18526ee36264610048f48b07b5db50ce86852fd2 feat: connect runtime worker execution adapter
Adapter 配置方針:
workercrate 側にruntime-adapterfeature 付きで配置。- 理由:
worker-runtimeは Runtime 境界 / 投影 / Backend trait を持つ下位境界として保ち、実 Worker 実装への依存を持たせない。workercrate は既存のWorkerController/WorkerHandle/Method::Runlifecycle を直接扱えるため、fake/canned 応答を挟まずに adapter を組める。workspace-serverがworker = { 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 し、内部にのみ realWorkerHandleを保持。 - Runtime input は
Method::Run { input: vec![Segment::text(...)] }へ変換して既存 Worker run lifecycle に投入。 - Worker の
protocol::Eventbroadcast を購読し、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で受けた realprotocol::Eventから transcript projection を更新。TextDone-> Assistant transcriptError-> System transcriptToolResult-> 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::Workerhandle / raw execution handle / socket path / session path / credential / secret ref / manifest path は出していない。
package/dependency
workerに optionalworker-runtimedependency +runtime-adapterfeature を追加。workspace-serverがworkerのruntime-adapterfeature を有効化。Cargo.lockとpackage.nixのcargoHashを更新。
Validation:
cargo fmt --all: successcargo fmt --all --check: successcargo test -p worker --features runtime-adapter runtime_adapter: successcargo test -p worker-runtime --features ws-server: successcargo test -p worker-runtime --features "ws-server fs-store": successcargo test -p yoi-workspace-server: successcargo check -p yoi: successgit diff --check: successnix 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-serverがworkerを 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-adapterfeature 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-runtime が worker に依存しない形は保たれている。また fake/providerless の canned response は見当たらない。
ただし、Ticket 受け入れ条件に対して以下が blocker。
Blockers
-
workspace-server の embedded Worker input API がまだ adapter に接続されていない
workspace-server/src/server.rs:101-113で adapter は embedded Runtime に install されている。- しかし browser/backend registry 側の
EmbeddedWorkerRuntime::send_inputはhosts.rs:1275-1285で固定 reject のまま。 - projection も
hosts.rs:1008-1010でcan_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 に渡る」を満たしていない。
-
production profile resolution に builtin 二重 prefix の不整合がある
- workspace-server の Ticket role mapping は
hosts.rs:1920-1924でProfileSelector::Builtin("builtin:coder")のように値へbuiltin:を含めている。 - adapter 側は
worker/src/runtime_adapter.rs:133-140でBuiltin(name)を常にformat!("builtin:{name}")しているため、内部的にbuiltin:builtin:coderになる。 manifest::ProfileSelector::parse_cliはbuiltin:builtin:coderを source=builtin, name=builtin:coderと解釈するため、通常の builtincoder解決に失敗する。Ticket role Worker の実 spawn path で破綻する可能性が高く、Profile/config resolution の受け入れ条件を満たさない。
- workspace-server の Ticket role mapping は
-
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::Eventbridge は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 のみ。