14 KiB
作成
LocalTicketBackend によって作成されました。
Decision
Decision update: split Backend Runtime work into three implementation tickets.
- 00001KVZKSV6C Backend RuntimeRegistryの基盤をworker-runtime向けに整理する
- Registry identity/projection/error boundary only.
- No embedded Runtime handle implementation.
- No remote Runtime client implementation.
- 00001KVZSGT0Q Backend RuntimeRegistryにembedded worker-runtimeを接続する
- Direct lib-call integration for backend-internal Runtime.
- 00001KVZSGT14 Backend RuntimeRegistryにremote worker-runtime processを接続する
- HTTP/event-stream client integration for remote Runtime processes.
Companion Web Console depends on embedded integration, not remote integration.
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 による routing 許可を受けて Ticket / relations / orchestration plan / workspace state を確認した。
- 本 Ticket は
00001KVZBCQH4(worker-runtime core crateと組み込みRuntime APIを作る) にdepends_onrelation を持つ。 00001KVZBCQH4は現在inprogress。Coder implementation report は届いているが、まだ review / merge / validation / done ではない。- 本 Ticket の要件は worker-runtime core domain types を前提に Backend Registry foundation を整理する内容なので、依存 Ticket が確定する前に別 worktree / Coder Worker を開始すると API churn / conflict risk が高い。
Evidence checked:
- Ticket body: Backend RuntimeRegistry foundation、runtime_id / worker_id authority、existing local compatibility source、workspace-server hosts/server target、Non-goals。
- Relations: outgoing
depends_on -> 00001KVZBCQH4; incoming dependents00001KVZSGT0Q,00001KVZSGT14。 - Orchestration plan: blocker record
orch-plan-20260625-163206-1を追加。 - Workspace state:
00001KVZBCQH4implementation worktree exists and coder has reported commit9b2cae32, but no reviewer approval / Orchestrator merge yet。 - Queue state: 本 Ticket と
00001KVZSGT0Qが queued、00001KVZBCQH4が inprogress。
Next action:
- 本 Ticket は queued のまま待機。
00001KVZBCQH4が reviewer approve / merge / validation / done になった後、再 routing して unblocked ならqueued -> inprogressacceptance に進む。
Escalate if:
00001KVZBCQH4の Runtime API shape が本 Ticket の前提を満たさない。- Backend Registry foundation 側で worker-runtime core の追加変更が必要になる。
Decision
Routing decision: implementation_ready
Reason:
00001KVZBCQH4worker-runtime core は done。dependency blocker は解消済み。- 本 Ticket の目的は Backend RuntimeRegistry foundation の整理で、embedded runtime 接続や REST/FS 実装そのものではない。
- queued/inprogress 再確認時点で
inprogressは 0 件。FS store Ticket とは主変更面がcrates/workspace-servervscrates/worker-runtimefeature で概ね分離できるため、本 Ticket は受理可能。
Evidence checked:
- Ticket body: Backend RuntimeRegistry foundation、runtime_id / worker_id authority、existing local compatibility source、workspace-server hosts/server target、Non-goals。
- Relations: outgoing dependency
00001KVZBCQH4は done。incoming dependent00001KVZSGT0Q,00001KVZSGT14は後続であり blocker ではない。 - Orchestration plan: accepted plan
orch-plan-20260625-165451-2を記録。 - Workspace state: orchestration worktree clean。worker-runtime core merge/validation/done/cleanup 済み。
IntentPacket:
Intent:
- Backend
RuntimeRegistryの domain boundary を、legacy process/source abstraction から worker-runtime を受けられる形へ整理する。
Binding decisions / invariants:
- Backend Registry の authority は Runtime / Worker domain identity を扱い、raw socket/session/path/pod name を public authority にしない。
- この Ticket では embedded
worker_runtime::Runtimeを実際に接続しない。handle/trait/enum/boundary と diagnostics/projection 整理まで。 - Remote Runtime HTTP client / REST server / Web Console / dynamic Runtime registration は実装しない。
- 既存 local compatibility source の behavior は壊さない。
worker-runtimecore crate の API を大きく変更しない。必要になれば escalation。
Requirements / acceptance criteria:
workspace-serverの RuntimeRegistry foundation が worker-runtime 向けの identity / projection / error boundary を持つ。- Existing local/process compatibility source と将来 embedded/remote source の境界が型で分かる。
- Browser/API response へ socket/session/path authority を露出しない。
- Existing workspace-server tests が通る。
Implementation latitude:
- Type/module split、内部 trait/enum naming、diagnostic representation は既存
crates/workspace-server/src/hosts.rsの形に合わせてよい。 - Minimal compile/test slice でよい。実 embedded handle は placeholder/boundary でよい。
Escalate if:
worker-runtimecrate の public API 変更が必要になる。- Backend embedded connection を実装しないと acceptance を満たせないと判明する。
- API response schema 互換性や dashboard expectations を大きく変える必要がある。
Validation:
cargo fmt --allcargo test -p yoi-workspace-servercargo check -p yoigit diff --check- 可能なら
nix build .#yoi --no-link
Critical risks / reviewer focus:
- Registry boundary が legacy Pod/socket/session authority を引きずること。
00001KVZSGT0Qの実 embedded接続まで scope creep すること。- Existing local compatibility source の API/diagnostics regression。
State changed
Routing decision: implementation_ready。
Dependency 00001KVZBCQH4 worker-runtime core は done。Ticket body / relations / workspace state / orchestration plan を確認し、Backend RuntimeRegistry foundation は unblocked と判断した。accepted plan と IntentPacket は thread / orchestration plan に記録済み。
これ以降、worktree creation / coder Worker routing などの implementation side effect に進める。
Implementation report
Implementation startup blocked after acceptance:
- Worktree created:
/home/hare/Projects/yoi/.worktree/00001KVZKSV6C-backend-runtime-registry- branch
work/00001KVZKSV6C-backend-runtime-registry
- Coder Worker spawn attempted:
yoi-coder-00001KVZKSV6C-runtime-registry
- Spawn failed before child socket appeared:
yoi: unknown command pod
Interpretation:
- No implementation code changes have been made in this worktree yet.
- This appears to be a runtime/launcher compatibility issue after the Pod→Worker CLI rename: the SpawnPod tool path attempted to invoke a
podsubcommand that the child-launch binary rejected. - Because this failure happened after
queued -> inprogressacceptance and worktree creation, the Ticket remains inprogress with a recovery note rather than being silently returned to queued.
Recovery needed:
- Restart/restore Orchestrator on a consistent runtime binary or repair the launcher compatibility path, then retry Coder Worker spawn for this accepted worktree.
- If retry remains impossible, use an explicit human-authorized alternative implementation route.
Implementation report
Implementation recovery / kickoff:
- User reported the previous SpawnPod failure was caused by a development environment variable forcing child launch from
targetbinary. The variable was removed and installed binary is now used. - Retried Coder Worker spawn for the already accepted worktree; spawn succeeded.
Active implementation:
- Worktree:
/home/hare/Projects/yoi/.worktree/00001KVZKSV6C-backend-runtime-registry - Branch:
work/00001KVZKSV6C-backend-runtime-registry - Coder Worker:
yoi-coder-00001KVZKSV6C-runtime-registry - Scope: read implementation worktree + non-recursive workspace root, write
crates/workspace-server/**only.
Next action:
- Wait for Coder implementation report, then route to reviewer.
Implementation report
Implementation report:
実装完了。Ticket ファイル/project records は変更していない。merge/close/cleanup 前で停止。
Commit:
f6fd7b63 feat: add workspace runtime registry source boundary
変更ファイル:
crates/workspace-server/src/hosts.rscrates/workspace-server/src/server.rs
実装/API 概要:
WorkerRuntimeRegistryをRuntimeRegistryに改名し、workspace-server 内の Runtime/Worker domain 側の registry 名を明確化。RuntimeSummaryにsource: RuntimeSourceSummaryを追加。RuntimeSourceKind:local_compatibility,embedded_worker_runtime,remote_httpRuntimeSourceStatus:active,reservedRuntimeIdentityAuthority:runtime_registry_projection
- 現行 local Pod metadata 由来の互換 source は
local_compatibilityとして明示。 - embedded worker-runtime / remote HTTP は reserved boundary として型だけ用意し、実接続・HTTP client/server・dynamic registration は未実装のまま保持。
- API response に source boundary / identity authority を追加し、Runtime public identity が socket/session/path ではなく registry projection であることをテストで確認。
- 既存 local compatibility behavior は維持し、既存テストに source boundary の assert を追加。
Validation:
cargo fmt --all: successcargo test -p yoi-workspace-server: success(19 passed)cargo check -p yoi: successgit diff --check: successnix build .#yoi --no-link: success(dirty warning は出たが build 成功)
Residual risks / review focus:
- API top-level
source: "worker_runtime_registry"は既存互換のため維持。一方で Runtime item 側に typedsource.kind/identity_authorityを追加。 - embedded/remote source は reserved constructor と enum boundary のみで、実際の registry composition や Runtime 接続は次 Ticket 側の責務。
RuntimeSourceSummary.noteは human-readable な API payload なので、Web 側で表示するなら文言の粒度を確認してほしい。
Review: request changes
Review result: request_changes
ブロッカー:
-
Runtime/Worker authority がまだ
runtime_id + worker_idになっていない。RuntimeRegistry::worker(&self, worker_id)はruntime_idを受け取らず、全 Runtime をworker_idだけで走査している。RuntimeRegistryErrorにもUnknownRuntime相当がない。- Ticket の binding decision / 要件では Worker authority は
runtime_id + worker_id、unknown runtime / unknown worker 等の error boundary を typed に分ける必要がある。 - 将来 embedded / remote source が増えた時に
worker_id衝突や誤 routing が起き得るため、foundation として不足。 - 該当:
crates/workspace-server/src/hosts.rsRuntimeRegistry::worker/RuntimeRegistryError
-
runtime-scoped routing/error mapping のテストが不足している。
- 追加テストは
local_compatibilitysource / identity_authority / path 非露出は確認しているが、複数 Runtime または unknown runtime を想定したruntime_idscoped lookup / error boundary を確認していない。 - Acceptance の “Runtime identity / Worker routing key / error boundary” を満たすには、typed
runtime_idlookup と unknown-runtime / unknown-worker の focused test が必要。
- 追加テストは
確認できた良い点:
RuntimeSourceKind::{LocalCompatibility, EmbeddedWorkerRuntime, RemoteHttp}とRuntimeSourceSummaryにより、local compatibility / future embedded / future remote の source 境界は型として追加されている。- local source は
source.kind = local_compatibility、identity_authority = runtime_registry_projectionとして API/test で確認されている。 - socket/session/path authority の直接公開や embedded
worker_runtime::Runtime接続、remote HTTP client/server 実装などの scope creep は見当たらない。 - 変更範囲は
workspace-serverのhosts.rs/server.rsのみで、worker-runtimepublic API 変更は見当たらない。 - read-only で
git diff --check f6fd7b63^ f6fd7b63は問題なし。Cargo/Nix 検証は read-only 指示を優先して再実行していない。