## 作成 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 / workspace state を確認した。 - 本 Ticket は WebSocket observation proxy `00001KVZKSTJT` と REST command server `00001KVZKSTE2` を前提にする remote worker-runtime process connection。 - `00001KVZKSTE2` は現在 inprogress、`00001KVZKSTJT` は queued/blocked。remote process connection を先に始めると transport/API shape を先取りして固定するため開始しない。 Evidence checked: - Ticket body: remote Runtime process接続、Backend RuntimeRegistry source、REST/WebSocket client boundary、Non-goals。 - Relations: outgoing dependencies include `00001KVZKSTE2` / `00001KVZKSTJT` / `00001KVZKSV6C` 等。 - Orchestration plan: blocker record `orch-plan-20260625-203613-1` を追加。 Next action: - 本 Ticket は queued のまま待機。 - REST command server と WebSocket observation proxy が done になった後に再 routing する。 --- ## Decision Routing decision: implementation_ready Reason: - Dependencies are done: `00001KVZKST83` FS store、`00001KVZKSTE2` REST command server、`00001KVZKSTJT` WebSocket observation proxy、`00001KVZKSV6C` RuntimeRegistry foundation。 - Existing relation to `00001KVZQHPNY` is `related`, not blocking, and says v0 can use builtin/default fallback where applicable. - 本 Ticket は remote Runtime process connection / routing を主目的とし、Dynamic registration / full auth / Web Console / Profile config sync は Non-goals。 - 現在 `inprogress` は 0 件。remote Runtime connection は TUI migration の blocker なので優先して受理する。 Evidence checked: - Ticket body: remote Runtime client handle、REST command API client、Runtime event stream client/proxy、config/policy boundary、Non-goals、acceptance criteria。 - Relations: outgoing dependencies to FS/REST/WS/Registry foundation are done。Incoming TUI dependency is downstream。 - Orchestration plan: accepted plan `orch-plan-20260626-054840-2` を記録。 - Workspace state: orchestration worktree clean、embedded Runtime registry Ticket done/cleanup 済み。 IntentPacket: Intent: - Workspace Backend `RuntimeRegistry` に remote worker-runtime process handle を追加し、Backend-owned REST/WS client で remote Runtime operations を route/proxy できるようにする。 Binding decisions / invariants: - Browser は remote Runtime base URL / token / direct endpoint を知らない。 - Browser-facing authority は embedded/local と同じ `runtime_id + worker_id`。 - Remote command は worker-runtime REST command API に対する Backend-owned client。 - Remote observation は worker-runtime WS observation API に対する Backend-owned client/proxy。 - Dynamic registration、full auth/permission model、Backend Web Console、Profile/config bundle sync は実装しない。 - Embedded/local compatibility source の behavior を壊さず、remote source を implementation kind/diagnostics で区別する。 Requirements / acceptance criteria: - Config-like data から remote Runtime client handle を登録できる。 - Runtime summary/status/capabilities、worker list/detail/create/input/stop/cancel/transcript/event proxy を route できる。 - Network/auth/timeout/remote unsupported/remote worker not found を typed Backend errors/diagnostics に map する。 - Browser-facing API/WS envelope に remote base URL/token/direct endpoint/socket/session path を露出しない。 - Focused workspace-server tests cover mocked remote routing and error mapping。 Implementation latitude: - HTTP/WS client dependencies、mock remote test harness、internal source/handle trait shape、error type naming は Coder が既存 `workspace-server` pattern に合わせて選べる。 - v0 config-like data は in-memory/static constructor/test fixture でよい。Dynamic registration は不要。 Escalate if: - worker-runtime REST/WS public API 変更が必要になる。 - Profile/config sync がないと remote Worker creation が成立しない場合。 - Browser-facing API schema を大きく変える必要がある場合。 Validation: - `cargo fmt --all` - `cargo test -p yoi-workspace-server` - `cargo check -p yoi` - `git diff --check` - 可能なら `nix build .#yoi --no-link` Critical risks / reviewer focus: - remote endpoint/token/direct URL leak。 - worker_id-only routing regression。 - remote REST/WS client errors being collapsed into generic unavailable。 - scope creep into dynamic registration/auth/Web Console/Profile sync。 --- ## State changed Routing decision: implementation_ready。 FS store、REST command server、WebSocket observation proxy、RuntimeRegistry foundation は done。Ticket body / relations / workspace state / accepted plan を確認し、remote worker-runtime process connection slice は unblocked と判断した。Profile/config sync は related であり v0 builtin/default fallback が許容されているため blocker ではない。 これ以降、worktree creation / coder Worker routing などの implementation side effect に進める。 --- ## Implementation report Implementation kickoff: - Worktree created: `/home/hare/Projects/yoi/.worktree/00001KVZSGT14-remote-runtime-registry` - Branch: `work/00001KVZSGT14-remote-runtime-registry` - Coder Worker spawned: `yoi-coder-00001KVZSGT14-remote-runtime` Scope notes: - Coder has read access to the implementation worktree and non-recursive workspace root identity path needed by runtime startup. - Coder write scope is limited to `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. Queued capacity notes: - `00001KVZQHPNY` remains queued to avoid worker creation/config routing churn while remote Runtime source is inprogress. - `00001KVZ9JGK0` remains queued to avoid overlapping Backend/Web Console API surface changes while remote source routing stabilizes. - `00001KW04A8K6` remains queued because it depends on this remote Runtime source work. --- ## Implementation report Implementation report: 実装完了。マージ・Ticket 更新・close・cleanup は行っていない。 Commit: - `aeb12b3b8e16a948e6f8387f6fb50fec60c53cc4 feat: add remote runtime registry source` 変更ファイル: - `crates/workspace-server/src/hosts.rs` - `crates/workspace-server/src/server.rs` - `crates/workspace-server/src/lib.rs` - `crates/workspace-server/Cargo.toml` - `Cargo.lock` - `package.nix` 実装概要 / API 変更: - `RuntimeRegistry` に remote worker-runtime source を追加。 - `RemoteRuntimeConfig` - `RemoteWorkerRuntime` - backend-owned REST client による remote Runtime 操作 - backend-owned WS observation source の生成 - Browser-facing の authority は `runtime_id + worker_id` のまま維持。 - remote base URL / token / direct endpoint は API payload に出さない設計。 - remote config の `Debug` も base URL/token を redaction。 - remote Runtime source summary を embedded/local と区別。 - `RuntimeSourceKind::RemoteHttp` を active source として利用。 - diagnostics も remote backend proxy として区別。 - routing 対応: - runtime summary/status/capabilities - host list - worker list/detail - worker create - input - stop - cancel - transcript - WS event proxy source fallback - Browser/API endpoint 追加: - `POST /api/runtimes/{runtime_id}/workers/{worker_id}/stop` - `POST /api/runtimes/{runtime_id}/workers/{worker_id}/cancel` - error mapping: - remote auth failure -> `RuntimeOperationFailed` / HTTP 401 - remote timeout -> HTTP 504 - unsupported -> HTTP 501 - other remote operation failures -> HTTP 502 - remote worker not found remains typed worker lookup failure path - tests: - mocked remote HTTP routing test - secret/base URL non-leak assertion - backend-owned WS observation source assertion - remote auth error typed mapping test Validation: - `cargo fmt --all`: success - `cargo test -p yoi-workspace-server`: success(31 passed) - `cargo check -p yoi`: success - `git diff --check`: success - `nix build .#yoi --no-link`: success after `package.nix` cargoHash update Residual risks / review focus: - remote HTTP client は `reqwest::blocking` を利用。現状の `RuntimeRegistry` trait が sync なので変更量を抑えているが、将来 remote 操作の並行性/latency を重視するなら async trait 化または server handler 側 blocking isolation を検討。 - v0 remote config は static/in-memory registration で、dynamic registration / full auth model / Profile config sync は非実装。 - remote Worker create は既存 embedded mapping と同じ `CreateWorkerRequest::tools_less` ベース。remote 側で Profile/config bundle sync が必要になる場合は別 Ticket 境界。 - WS observation は backend-private source fallback を追加。実 remote WS e2e は mock HTTP unit test ではなく既存 proxy tests + source生成テストでの確認に留めている。 ---