407 lines
20 KiB
Markdown
407 lines
20 KiB
Markdown
<!-- event: create author: "yoi ticket" at: 2026-06-25T14:44:02Z -->
|
||
|
||
## 作成
|
||
|
||
LocalTicketBackend によって作成されました。
|
||
|
||
---
|
||
|
||
<!-- event: intake_summary author: hare at: 2026-06-25T16:34:16Z -->
|
||
|
||
## Intake summary
|
||
|
||
Marked ready by `yoi ticket state`.
|
||
|
||
---
|
||
|
||
<!-- event: state_changed author: "yoi ticket" at: 2026-06-25T16:34:16Z from: planning to: ready reason: cli_state field: state -->
|
||
|
||
## State changed
|
||
|
||
Marked ready by `yoi ticket state`.
|
||
|
||
|
||
---
|
||
|
||
<!-- event: state_changed author: workspace-panel at: 2026-06-25T16:39:39Z from: ready to: queued reason: queued field: state -->
|
||
|
||
## State changed
|
||
|
||
Ticket を `workspace-panel` が queued にしました。
|
||
|
||
|
||
---
|
||
|
||
<!-- event: decision author: yoi-orchestrator at: 2026-06-25T16:44:20Z -->
|
||
|
||
## Decision
|
||
|
||
Routing decision: blocked_by_dependency_or_missing_authority
|
||
|
||
Reason:
|
||
- Dashboard Queue による routing 許可を受けて Ticket / relations / orchestration plan / queue state を確認した。
|
||
- 本 Ticket は `00001KVZBCQH4` (`worker-runtime core crateと組み込みRuntime APIを作る`) に `depends_on` relation を持つ。
|
||
- `00001KVZBCQH4` は現在 `inprogress` で、implementation commits はあるが reviewer review 中。merge / Orchestrator validation / done ではない。
|
||
- REST command server は worker-runtime command/response/projection semantics に依存するため、core API 確定前に HTTP/server implementation side effect を開始しない。
|
||
|
||
Evidence checked:
|
||
- Ticket body: REST command server、request/response schema、operation timeouts、host/port config、diagnostics、Non-goals。
|
||
- Relations: outgoing `depends_on -> 00001KVZBCQH4`。incoming dependent `00001KVZ9JGK0`。
|
||
- Orchestration plan: blocker record `orch-plan-20260625-164410-1` を追加。
|
||
- Queue state: queued は本 Ticket、FS store、Backend Registry foundation、Backend embedded connection の4件。inprogress は `00001KVZBCQH4` 1件。
|
||
|
||
Next action:
|
||
- 本 Ticket は queued のまま待機。
|
||
- `00001KVZBCQH4` が reviewer approve / merge / validation / done になった後、再 routing する。
|
||
|
||
Escalate if:
|
||
- worker-runtime core の command/projection API が REST mapping に足りない。
|
||
- REST server concerns を core crate に混ぜないと acceptance を満たせないように見える。
|
||
|
||
---
|
||
|
||
<!-- event: decision author: yoi-orchestrator at: 2026-06-25T20:35:55Z -->
|
||
|
||
## Decision
|
||
|
||
Routing decision: implementation_ready
|
||
|
||
Reason:
|
||
- Dashboard Queue された dependent chain を再確認した。
|
||
- `00001KVZBCQH4` worker-runtime core は done、`00001KVZKST83` FS store feature も done/merged/validated 済み。以前の dependency/capacity blocker は解消した。
|
||
- 本 Ticket は REST command server であり、Non-goals に SSE / WebSocket event stream server が明記されている。WebSocket transport decision は `00001KVZKSTJT` 側で扱い、本 Ticket の implementation latitude には含めない。
|
||
- 現在の inprogress `00001KVZKSV6C` は `crates/workspace-server` foundation、こちらは `crates/worker-runtime` http-server feature が主対象で、conflict risk は bounded。
|
||
|
||
Evidence checked:
|
||
- Ticket body: `http-server` feature、Runtime process wrapper、REST command endpoints、typed JSON/errors、Browser direct Runtime access exclusion、Non-goals。
|
||
- Relations: outgoing dependency `00001KVZBCQH4` は done。incoming `00001KVZKSTJT`, `00001KVZSGT14` は後続。
|
||
- Orchestration plan: accepted plan `orch-plan-20260625-203533-3` を記録。
|
||
- Workspace state: orchestration worktree clean; current active foundation branch is separate surface.
|
||
|
||
IntentPacket:
|
||
|
||
Intent:
|
||
- `worker-runtime` に optional `http-server` feature と最小 Runtime process REST command API を追加する。
|
||
|
||
Binding decisions / invariants:
|
||
- REST handlers は `Runtime` lib API を呼ぶ wrapper とし、Worker semantics を二重実装しない。
|
||
- Browser は Runtime process に直接接続せず、Backend 経由の前提を docs/comments/API comments に残す。
|
||
- SSE / WebSocket event stream server、Backend HTTP client integration、dynamic Runtime registration、Web Console、full auth model は実装しない。
|
||
- `http-server` disabled 時に core library は HTTP server dependency を強制しない。
|
||
- Runtime authority は Runtime/Worker identity。legacy pod/socket/session path を public REST authority として設計しない。
|
||
|
||
Requirements / acceptance criteria:
|
||
- `http-server` feature と binary/process wrapper がある。
|
||
- `GET /v1/runtime`, `GET /v1/workers`, `GET /v1/workers/{worker_id}`, `POST /v1/workers`, `POST /v1/workers/{worker_id}/input`, `stop`, `cancel`, `GET transcript` を扱う。
|
||
- typed request/response/error shapes を持つ。
|
||
- runtime id / bind address / store selection を v0 config として扱える。
|
||
- minimal local token placeholder は可。ただし Browser に Runtime credential を渡す前提にしない。
|
||
|
||
Implementation latitude:
|
||
- HTTP framework/dependency、binary/module split、test helper、typed response shapes の詳細は Coder が選べる。
|
||
- FS store 使用は既存 feature を使う範囲まで。新しい persistence design は不要。
|
||
|
||
Escalate if:
|
||
- WebSocket/SSE observation 実装が必要になりそうな場合。
|
||
- Backend integration や dynamic runtime registration を同時に実装しないと REST command server が成立しない場合。
|
||
- Core Runtime API の大幅変更が必要になる場合。
|
||
|
||
Validation:
|
||
- `cargo fmt --all`
|
||
- `cargo test -p worker-runtime --no-default-features`
|
||
- `cargo test -p worker-runtime --features http-server`
|
||
- 必要に応じて `cargo test -p worker-runtime --features fs-store,http-server`
|
||
- `cargo check -p yoi`
|
||
- `git diff --check`
|
||
- 可能なら `nix build .#yoi --no-link`
|
||
|
||
Critical risks / reviewer focus:
|
||
- Feature gating/dependency leakage。
|
||
- REST handler が Runtime semantics を複製すること。
|
||
- Browser direct Runtime access や credential leakage。
|
||
- WebSocket/SSE scope creep。
|
||
- package.nix cargoHash / lock consistency。
|
||
|
||
---
|
||
|
||
<!-- event: state_changed author: yoi-orchestrator at: 2026-06-25T20:36:02Z from: queued to: inprogress reason: routing_accepted_after_core_and_fs_store_done field: state -->
|
||
|
||
## State changed
|
||
|
||
Routing decision: implementation_ready。
|
||
|
||
Dependency `00001KVZBCQH4` worker-runtime core は done。以前の waiting-capacity reason だった FS store branch も done/merged/validated 済み。Ticket body / relations / workspace state / accepted plan を確認し、REST command server slice は unblocked と判断した。
|
||
|
||
これ以降、worktree creation / coder Worker routing などの implementation side effect に進める。
|
||
|
||
---
|
||
|
||
<!-- event: implementation_report author: yoi-orchestrator at: 2026-06-25T20:38:01Z -->
|
||
|
||
## Implementation report
|
||
|
||
Implementation kickoff:
|
||
|
||
- Worktree created: `/home/hare/Projects/yoi/.worktree/00001KVZKSTE2-worker-runtime-rest-server`
|
||
- Branch: `work/00001KVZKSTE2-worker-runtime-rest-server`
|
||
- Coder Worker spawned: `yoi-coder-00001KVZKSTE2-rest-server`
|
||
|
||
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/worker-runtime/**`, root `Cargo.toml`, `Cargo.lock`, and `package.nix`.
|
||
- Coder is instructed not to modify Ticket records and not to operate in root/orchestration worktrees.
|
||
|
||
Dependent queued Tickets:
|
||
- `00001KVZKSTJT`, `00001KVZSGT14`, `00001KW04A8K6`, and `00001KVZ9JGK0` remain queued with blocker notes until their prerequisite chain is done.
|
||
|
||
---
|
||
|
||
<!-- event: implementation_report author: yoi-coder-00001KVZKSTE2-rest-server at: 2026-06-26T03:10:50Z -->
|
||
|
||
## Implementation report
|
||
|
||
Implementation report:
|
||
|
||
実装完了。マージ・Ticket 更新・cleanup はしていない。
|
||
|
||
Commit:
|
||
- `f43a6b84011024b68c03fd5b4211ab427614683b feat: add worker runtime REST server`
|
||
|
||
変更ファイル:
|
||
- `crates/worker-runtime/Cargo.toml`
|
||
- optional feature `http-server` を追加。
|
||
- `axum`, `tokio`, `tower`, `serde_json` を feature-gated dependency として追加。
|
||
- `crates/worker-runtime/src/lib.rs`
|
||
- `#[cfg(feature = "http-server")] pub mod http_server;` を追加。
|
||
- core は HTTP 非依存で、REST adapter は optional である旨を module docs に追記。
|
||
- `crates/worker-runtime/src/http_server.rs`
|
||
- Runtime REST process adapter を新規追加。
|
||
- `Cargo.lock`
|
||
- `worker-runtime` optional dependency 反映。
|
||
- `package.nix`
|
||
- cargo vendor hash 更新。
|
||
|
||
追加 API / endpoints:
|
||
- `worker_runtime::http_server` module(`http-server` feature 有効時)。
|
||
- `RuntimeHttpServerConfig`: `bind_addr`, `runtime_id`, `display_name`, `limits`, `store`, `local_token`。
|
||
- `RuntimeHttpStoreSelection`: `Memory`; `Fs { root }` は `fs-store` feature 併用時のみ。
|
||
- `RuntimeHttpServer::bind(...)`, `RuntimeHttpServer::serve(...)`, `serve_configured_runtime_http(...)`, `serve_runtime_http(...)`, `runtime_http_router(...)`。
|
||
- REST endpoints:
|
||
- `GET /v1/runtime`
|
||
- `GET /v1/workers`
|
||
- `GET /v1/workers/{worker_id}`
|
||
- `POST /v1/workers`
|
||
- `POST /v1/workers/{worker_id}/input`
|
||
- `POST /v1/workers/{worker_id}/stop`
|
||
- `POST /v1/workers/{worker_id}/cancel`
|
||
- `GET /v1/workers/{worker_id}/transcript`
|
||
|
||
Boundary notes:
|
||
- 各 handler は `Runtime` lib API に委譲し、Worker semantics は複製していない。
|
||
- Worker authority は server 側 Runtime id + path の `worker_id` から `WorkerRef` を組み立てる形。
|
||
- module docs / API comments に「Browser は Runtime process へ直接接続しない。Backend/proxy が intended client」という境界を明記。
|
||
- SSE / WebSocket / Backend integration / dynamic registration / Web Console / full auth model は未実装。
|
||
- `local_token` は backend-to-runtime 用の最小 bearer token placeholder のみ。
|
||
|
||
Validation:
|
||
- `cargo fmt --all`: success
|
||
- `cargo test -p worker-runtime --no-default-features`: success(8 passed)
|
||
- `cargo test -p worker-runtime --features http-server`: success(11 passed)
|
||
- `cargo test -p worker-runtime --features fs-store,http-server`: success(13 passed)
|
||
- `cargo check -p yoi`: success
|
||
- `git diff --check`: success
|
||
- `nix build .#yoi --no-link`: success
|
||
|
||
Notes:
|
||
- `nix build` は初回 `cargoHash` 不一致で失敗。hash 更新後に再実行して成功。
|
||
|
||
Residual risks / review focus:
|
||
- REST response shapes は v0 として明示型を追加したが、外部 API として固定する前に Backend 側の envelope naming / field naming は確認余地あり。
|
||
- `stop` / `cancel` は空 body も許容し、body がある場合は `{ "reason": ... }` を受ける。Backend 側で厳密 JSON body 必須にしたい場合は調整可能。
|
||
- `local_token` は placeholder であり、Browser-facing credential model ではない。この境界が崩れていないか review focus。
|
||
- `tower` は router unit test helper 用にも使うが、`http-server` feature 配下の optional dependency。core / no-default build には入らない。
|
||
|
||
---
|
||
|
||
<!-- event: review author: yoi-reviewer-00001KVZKSTE2-rest-server at: 2026-06-26T03:14:43Z status: request_changes -->
|
||
|
||
## Review: request changes
|
||
|
||
Review result: request_changes
|
||
|
||
ブロッカー:
|
||
|
||
- Ticket 本文 / route packet では `worker-runtime/main.rs` または binary/process wrapper が必要。
|
||
- Ticket item: Runtime process wrapper / binary starts。
|
||
- Routing packet: “http-server feature と binary/process wrapper がある”。
|
||
- しかし実装は `crates/worker-runtime` の lib target のみ。
|
||
- `cargo read-manifest --manifest-path crates/worker-runtime/Cargo.toml` で target は `lib` のみ。
|
||
- `crates/worker-runtime/src/main.rs` や `[[bin]]` は存在しない。
|
||
- `RuntimeHttpServer::bind/serve` は library helper としては良いが、Runtime process binary が起動して REST endpoints を公開する受け入れ条件は未達。
|
||
|
||
確認できた良い点:
|
||
- `http-server` feature は optional で追加されており、`cargo tree -p worker-runtime --no-default-features` では HTTP deps 漏れは見えない。
|
||
- REST router は要求 endpoint を定義している。
|
||
- handlers は `Runtime` API に委譲しており、Worker semantics の大きな重複は見えない。
|
||
- Browser は Backend 経由で Runtime に直接接続しない旨の module/API comment がある。
|
||
- Runtime/Worker identity を使い、legacy pod/socket/session path を authority にしていない。
|
||
- typed response/error shape と RuntimeError の HTTP status mapping はある。
|
||
- SSE/WebSocket scope creep は見えない。
|
||
- `package.nix` の `cargoHash` 更新は commit に含まれている。
|
||
|
||
検証は read-only inspection 中心で、テスト/ビルドは再実行せず、報告済み結果を参照した。
|
||
|
||
---
|
||
|
||
<!-- event: implementation_report author: yoi-coder-00001KVZKSTE2-rest-server at: 2026-06-26T03:21:26Z -->
|
||
|
||
## Implementation report
|
||
|
||
Follow-up implementation report after review request_changes:
|
||
|
||
追加 commit:
|
||
- `d0db32fa6acb6efb5269de9793a63de92ef9eb4a fix: add worker runtime REST process binary`
|
||
|
||
修正内容:
|
||
- `crates/worker-runtime/Cargo.toml`
|
||
- `[[bin]]` target を追加。
|
||
- binary name: `worker-runtime-rest-server`
|
||
- path: `src/main.rs`
|
||
- `required-features = ["http-server"]`
|
||
- `crates/worker-runtime/src/main.rs`
|
||
- minimal Runtime REST process wrapper を追加。
|
||
|
||
Binary / process wrapper 概要:
|
||
- `http-server` feature 有効時に `worker-runtime-rest-server` binary target が出る。
|
||
- v0 config:
|
||
- `--bind <ADDR>`
|
||
- `--runtime-id <ID>`
|
||
- `--display-name <NAME>`
|
||
- `--store <memory|fs>`
|
||
- `--fs-root <PATH>`(`fs-store` feature 併用時のみ有効)
|
||
- `--local-token <TOKEN>`
|
||
- `--local-token-env <ENV>`
|
||
- `--max-transcript-projection-items <N>`
|
||
- `--max-event-batch-items <N>`
|
||
|
||
Boundary notes:
|
||
- binary は `http-server` required feature 付きなので、no-default build では HTTP deps / binary compile を強制しない。
|
||
- process wrapper は既存の `RuntimeHttpServer::bind/serve` を使い、REST handlers は従来通り Runtime API に委譲する。
|
||
- help / startup message に「trusted backend/proxy 向けであり Browser は Runtime process に直接接続しない」境界を明記。
|
||
- SSE / WebSocket / Backend integration / dynamic registration / full auth model は追加していない。
|
||
|
||
Manifest 確認:
|
||
- `cargo read-manifest --manifest-path crates/worker-runtime/Cargo.toml | jq '.targets'` で `lib` に加えて `bin` target `worker-runtime-rest-server`、`required-features = ["http-server"]` を確認。
|
||
|
||
Validation:
|
||
- `cargo fmt --all`: success
|
||
- `cargo test -p worker-runtime --no-default-features`: success(8 passed)
|
||
- `cargo test -p worker-runtime --features http-server`: success(lib 11 passed, bin `src/main.rs` 3 passed)
|
||
- `cargo test -p worker-runtime --features fs-store,http-server`: success(lib 13 passed, bin `src/main.rs` 3 passed)
|
||
- `cargo check -p worker-runtime --features http-server --bins`: success
|
||
- `cargo check -p yoi`: success
|
||
- `git diff --check`: success
|
||
- `nix build .#yoi --no-link`: success
|
||
|
||
Residual risks / review focus:
|
||
- CLI は intentionally minimal。`clap` 等は追加せず手書き parser。
|
||
- `--local-token` は placeholder であり、Browser-facing credential model ではない。必要なら後続 Ticket で Backend 側 auth / proxy 境界として設計する前提。
|
||
- `fs` store は `fs-store` feature 併用時のみ有効で、`http-server` 単独 build では明示エラー。
|
||
|
||
---
|
||
|
||
<!-- event: review author: yoi-reviewer-00001KVZKSTE2-rest-server at: 2026-06-26T03:23:55Z status: approve -->
|
||
|
||
## Review: approve
|
||
|
||
Review result: approve
|
||
|
||
確認結果:
|
||
- 以前の blocker(Runtime process wrapper / binary target 欠落)は解消済み。
|
||
- `crates/worker-runtime/Cargo.toml` に `[[bin]]` が追加され、`worker-runtime-rest-server` / `src/main.rs` / `required-features = ["http-server"]` になっている。
|
||
- `http-server` feature 必須の binary target なので、no-default/core library 側に HTTP server binary/deps を強制しない形。
|
||
- `src/main.rs` は `RuntimeHttpServer::bind(config)` → `server.serve().await` を呼ぶ薄い process wrapper で、REST semantics を再実装していない。
|
||
- v0 config は bind addr / runtime id / display name / memory/fs store selection / local token/env token / transcript/event limits を扱っており、Ticket 範囲として妥当。
|
||
- help・module comment・startup log で「Browser は Runtime process に直接接続せず trusted backend/proxy 経由」の境界が明記されている。
|
||
- SSE / WebSocket / Backend integration / dynamic registration / full auth model の追加は見当たらない。
|
||
|
||
実施した検証は read-only inspection と `cargo read-manifest` / `rg` / `git` による確認。報告済み cargo/nix validation は再実行していない。
|
||
|
||
---
|
||
|
||
<!-- event: implementation_report author: yoi-orchestrator at: 2026-06-26T03:27:12Z -->
|
||
|
||
## Implementation report
|
||
|
||
Integration / validation report:
|
||
|
||
Integration:
|
||
- Implementation branch `work/00001KVZKSTE2-worker-runtime-rest-server` を orchestration branch に merge 済み。
|
||
- Merge commit: `660b07e8 merge: 00001KVZKSTE2 worker runtime rest server`
|
||
|
||
Included implementation commits:
|
||
- `f43a6b84011024b68c03fd5b4211ab427614683b feat: add worker runtime REST server`
|
||
- `d0db32fa6acb6efb5269de9793a63de92ef9eb4a fix: add worker runtime REST process binary`
|
||
|
||
Validation in Orchestrator worktree:
|
||
- `cargo fmt --all --check`: success
|
||
- `cargo test -p worker-runtime --no-default-features`: success(8 tests passed)
|
||
- `cargo test -p worker-runtime --features http-server`: success(lib 11 tests + bin 3 tests passed)
|
||
- `cargo test -p worker-runtime --features fs-store,http-server`: success(lib 13 tests + bin 3 tests passed)
|
||
- `cargo check -p worker-runtime --features http-server --bins`: success
|
||
- `cargo check -p yoi`: success
|
||
- `git diff --check`: success
|
||
- `nix build .#yoi --no-link`: success
|
||
|
||
Review:
|
||
- Reviewer approve 済み。前回 blocker だった Runtime process wrapper / binary target 欠落は解消済み。
|
||
|
||
Outcome:
|
||
- Acceptance criteria を満たしたため `done` へ進める。
|
||
|
||
---
|
||
|
||
<!-- event: state_changed author: yoi-orchestrator at: 2026-06-26T03:27:22Z from: inprogress to: done reason: merged_reviewed_validated field: state -->
|
||
|
||
## State changed
|
||
|
||
worker-runtime REST command server の実装、review、merge、Orchestrator validation が完了した。
|
||
|
||
Done evidence:
|
||
- Merge commit: `660b07e8 merge: 00001KVZKSTE2 worker runtime rest server`
|
||
- Reviewer approve 済み。
|
||
- Orchestrator validation:
|
||
- `cargo fmt --all --check`: success
|
||
- `cargo test -p worker-runtime --no-default-features`: success(8 tests passed)
|
||
- `cargo test -p worker-runtime --features http-server`: success(lib 11 tests + bin 3 tests passed)
|
||
- `cargo test -p worker-runtime --features fs-store,http-server`: success(lib 13 tests + bin 3 tests passed)
|
||
- `cargo check -p worker-runtime --features http-server --bins`: success
|
||
- `cargo check -p yoi`: success
|
||
- `git diff --check`: success
|
||
- `nix build .#yoi --no-link`: success
|
||
|
||
Scope:
|
||
- optional `http-server` feature、REST command API、minimal `worker-runtime-rest-server` process binary を追加。
|
||
- SSE / WebSocket / Backend integration / dynamic registration / Web Console / full auth model は Non-goals として未実装。
|
||
|
||
---
|
||
|
||
<!-- event: implementation_report author: yoi-orchestrator at: 2026-06-26T04:20:31Z -->
|
||
|
||
## Implementation report
|
||
|
||
Cleanup report:
|
||
|
||
- Child Workers cleanup:
|
||
- `yoi-coder-00001KVZKSTE2-rest-server` was stopped one-by-one and scope reclaimed.
|
||
- `yoi-reviewer-00001KVZKSTE2-rest-server` StopPod retry reported `no spawned pod named`; `ListPods` then showed no spawned children remaining, so it was already gone from the spawned-child registry.
|
||
- Child implementation worktree removed:
|
||
- `/home/hare/Projects/yoi/.worktree/00001KVZKSTE2-worker-runtime-rest-server`
|
||
- Child implementation branch removed:
|
||
- `work/00001KVZKSTE2-worker-runtime-rest-server`
|
||
|
||
Operational note:
|
||
- StopPod will continue to be executed one-by-one rather than through parallel multi-tool execution.
|
||
|
||
---
|