ticket: accept websocket observation proxy
This commit is contained in:
@@ -173,3 +173,84 @@ Next action:
|
||||
- `00001KVZKSTE2` が review/merge/validation/done になった後に再 routing する。
|
||||
|
||||
---
|
||||
|
||||
<!-- event: decision author: yoi-orchestrator at: 2026-06-26T04:22:18Z -->
|
||||
|
||||
## Decision
|
||||
|
||||
Routing decision: implementation_ready
|
||||
|
||||
Reason:
|
||||
- `00001KVZKSTE2` REST command server は done。前回 blocker(REST process wrapper/API surface 未確定)は解消済み。
|
||||
- 本 Ticket はユーザー指摘後に `Runtime/Backend WebSocket observation proxy` として設計判断を反映し再queuedされた。Ticket thread には、Runtime WS は `protocol::Event` を observation payload として流し、Browser/future TUI は Runtime へ直接接続せず Backend-owned projection/proxy を見る、という binding decision が記録済み。
|
||||
- queued/inprogress 再確認時点で inprogress は 0 件。後続 remote/TUI/Web Console Tickets は本 Ticket に依存しているため、本 Ticket を次に受理する。
|
||||
|
||||
Evidence checked:
|
||||
- Ticket body: `Runtime -> Backend -> Client` WebSocket observation proxy、Runtime worker-scoped WS、Backend Runtime WS client、Client-facing WS、cursor/backlog/permission seam、Non-goals。
|
||||
- Thread decisions: `protocol::Event` を payload authority とする、Runtime WS は command/mutation tunnel にしない、Backend projection/proxy seam を作る、full auth/redaction policy は後続。
|
||||
- Relations: outgoing dependencies `00001KVZBCQH4` core と `00001KVZKSTE2` REST server は done。incoming remote/Web Console/TUI Tickets は後続。
|
||||
- Orchestration plan: accepted plan `orch-plan-20260626-042150-2` を記録。
|
||||
- Workspace state: orchestration worktree clean; no inprogress Ticket.
|
||||
|
||||
IntentPacket:
|
||||
|
||||
Intent:
|
||||
- Runtime process の worker-scoped WebSocket observation stream と、Backend-owned client-facing WebSocket proxy boundary を実装する。
|
||||
|
||||
Binding decisions / invariants:
|
||||
- Runtime WS は Backend-facing internal observation API。Browser/future TUI は Runtime WS に直接接続しない。
|
||||
- Payload authority は `crates/protocol` の `protocol::Event`。Runtime WS 独自の parallel output model や variant allowlist/subset を作らない。
|
||||
- Runtime WS は command/mutation/user input を受け付けず、`protocol::Method` tunnel を作らない。
|
||||
- Backend client-facing WS は Backend-owned opaque cursor/envelope/diagnostic を持ち、Runtime endpoint/credential/socket/session path を Client に露出しない。
|
||||
- v0 は worker-scoped stream。runtime-wide stream、full auth/permission/redaction policy、Web Console UI、TUI migration、remote process lifecycle/discovery は Non-goals。
|
||||
- REST command semantics は既存 `http-server` implementation に委譲し、この Ticket で再実装しない。
|
||||
|
||||
Requirements / acceptance criteria:
|
||||
- `worker-runtime` に optional `ws-server` feature がある。
|
||||
- Feature disabled でも core compile が通る。
|
||||
- Runtime process exposes `GET /v1/workers/{worker_id}/events/ws?cursor=...` style worker-scoped observation endpoint。
|
||||
- Runtime WS envelope includes Runtime-local opaque cursor/event id, worker id, and `protocol::Event` payload。
|
||||
- Connect sends initial `protocol::Event::Snapshot` projection, then forwards Worker event bus `protocol::Event` payloads。
|
||||
- Backend Runtime WS client consumes Runtime envelope and preserves `runtime_id + worker_id + runtime_cursor + protocol::Event` internally。
|
||||
- Backend exposes Client-facing worker observation WS keyed by `runtime_id + worker_id` with Backend-local opaque cursor/envelope。
|
||||
- Unknown/expired cursor, worker not found, runtime unavailable, upstream disconnect, malformed frame are typed diagnostics/errors。
|
||||
- Tests cover Runtime WS, Backend upstream client/proxy delivery, cursor resume/duplicate-safe IDs, diagnostics, and worker-scoped filtering.
|
||||
|
||||
Implementation latitude:
|
||||
- Exact Rust module split, WebSocket dependency, envelope structs, test fixtures, and Backend route shape may follow existing workspace-server/worker-runtime style。
|
||||
- Bounded backlog implementation can be in-memory v0, as long as cursor semantics and diagnostics are explicit.
|
||||
- Permission seam can be pass-through default with types/hooks for later policy.
|
||||
|
||||
Escalate if:
|
||||
- Implementing this requires full auth/redaction policy, Web Console UI, TUI migration, remote process lifecycle/discovery, or Runtime command channel changes。
|
||||
- `protocol::Event` cannot be serialized/forwarded without changing protocol crate public semantics。
|
||||
- Backend Registry/Runtime handle shape from previous Tickets is insufficient and would require a broad redesign.
|
||||
|
||||
Validation:
|
||||
- `cargo fmt --all`
|
||||
- `cargo test -p worker-runtime --features ws-server`
|
||||
- `cargo test -p yoi-workspace-server`
|
||||
- `cargo check -p yoi`
|
||||
- `git diff --check`
|
||||
- 可能なら `nix build .#yoi --no-link`
|
||||
|
||||
Critical risks / reviewer focus:
|
||||
- Accidentally creating a command/mutation tunnel over WS。
|
||||
- Leaking Runtime endpoint/token/socket/session path to Client-facing WS。
|
||||
- Creating a second output/event model instead of forwarding `protocol::Event` payload。
|
||||
- Feature gating/dependency leakage。
|
||||
- Cursor/backlog/diagnostic semantics being too vague for remote/TUI/Web Console follow-ups。
|
||||
|
||||
---
|
||||
|
||||
<!-- event: state_changed author: yoi-orchestrator at: 2026-06-26T04:22:27Z from: queued to: inprogress reason: routing_accepted_after_rest_server_done field: state -->
|
||||
|
||||
## State changed
|
||||
|
||||
Routing decision: implementation_ready。
|
||||
|
||||
Dependency `00001KVZKSTE2` REST command server は done。Ticket body/thread、relations、workspace state、accepted plan を確認し、Runtime/Backend WebSocket observation proxy は unblocked と判断した。accepted plan と IntentPacket は thread / orchestration plan に記録済み。
|
||||
|
||||
これ以降、worktree creation / coder Worker routing などの implementation side effect に進める。
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user