yoi/.yoi/tickets/00001KWHEM8YJ/thread.md

8.7 KiB
Raw Blame History

作成

LocalTicketBackend によって作成されました。


Plan

Workspace Browser から手動 Coding Worker を作成する導線として Ticket を詳細化した。

方針:

  • Sidebar WORKER heading 横に New button を追加する。
  • New form は runtime / display name / initial text の最小入力にする。
  • Browser は Runtime create request を直接送らず、product-level /api/workers endpoint を使う。
  • Backend が kind=coding を default coding Worker launch に解決する。
  • Browser-facing payload に raw path / cwd / ConfigBundleRef / requested capabilities / secret / Runtime endpoint / store path を含めない。
  • 成功後は作成 Worker の Console に遷移し、失敗時は sanitized diagnostic を form に表示する。

Decision

Manual Coding Worker create form fields を明確化した。

決定:

  • v0 form は display_nameruntime_idprofileinitial_text の 4 field に限定する。
  • kind = coding は endpoint / Backend 側 launch mode として扱い、form input や Browser-facing payload field にはしない。
  • profile は Browser 自由入力ではなく、Backend が公開する候補から選ぶ。
  • Browser-facing request は runtime_id / display_name / profile / initial_text にし、ConfigBundleRef、requested capabilities、raw path、cwd、secret、Runtime endpoint、store path は含めない。

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: implementation_ready

Reason:

  • Ticket は Manual Coding Worker launch の product-level API / Sidebar New form / sanitized payload / success Console navigation / unsupported runtime diagnostic を具体化しており、observable な acceptance criteria と validation がある。
  • typed relation blocker は 0 件、OrchestrationPlan は prior human-gate waiting note のみで、ユーザーから「2つとも消化して」と明示 follow-up があったため human gate は解除された。
  • 00001KWHHRTM9 の Runtime connection management と UI/API surface が近く、別 worktree 並列では衝突リスクが高いので、同一 implementation worktree/branch で 00001KWHHRTM9 を先に実装し、その Runtime candidate/projection を利用して本 Ticket を続けて実装する。

Evidence checked:

  • Ticket body / thread / artifacts。
  • TicketRelationQuery(00001KWHEM8YJ) は 0 件。
  • TicketOrchestrationPlanQuery(00001KWHEM8YJ) は prior human-gate waiting note のみ。
  • queued Ticket 一覧では 00001KWHHRTM9 も queued、ready/inprogress は 0 件。
  • workspace/orchestration git state と worktree 一覧、visible Pods、TicketDoctor0 errors / 既存 warning のみ)。
  • Bounded code map: web/workspace/src/lib/workspace-sidebar/WorkersNavSection.svelte、console route under web/workspace/src/routes/runtimes/[runtimeId]/workers/[workerId]/console/、existing /api/workers list projection、/api/runtimes/{runtime_id}/workers internal-ish Runtime spawn path、crates/workspace-server runtime/backend/config areas。

IntentPacket:

Intent:

  • Workspace Browser sidebar の WORKER heading 横に New button と作成 form を追加し、Browser-facing /api/workers product-level endpoint から coding Worker を作成し、成功後に Worker Console へ遷移する。

Binding decisions / invariants:

  • Browser UI は existing Runtime create payload を直接露出しない。
  • Browser-facing request fields は runtime_id / display_name / profile / initial_text のみ。kind は endpoint/backend launch mode として扱い、form input や request field にしない。
  • Browser-facing payload/response/form に raw workspace path、cwd、tool scope、ConfigBundleRef、requested capabilities、secret/token、Runtime endpoint、socket/session/store path を含めない。
  • profile は Backend が公開する候補から選ばせ、自由入力にしない。
  • v0 は embedded/local Runtime を primary target とし、remote Runtime の workspace provisioning が未対応なら typed diagnostic で拒否してよい。
  • /api/runtimes/{runtime_id}/workers は残してよいが、New Worker UI は新しい product-level /api/workers POST を使う。

Requirements / acceptance criteria:

  • Sidebar WORKER heading 横に New button がある。
  • New で display name / runtime / profile / initial text だけの form が開く。
  • Form submit は /api/workers product-level endpoint を使い、coding Worker を作成できる。
  • Backend は request の profile から Profile / ConfigBundle / execution backend を解決する。
  • 作成成功後、Worker list を refresh し、/runtimes/{runtime_id}/workers/{worker_id}/console へ遷移する。
  • 作成失敗時、入力値を保持して sanitized diagnostic を form に表示する。
  • focused backend/UI tests を追加し、指定 validation を可能な範囲で実行する。

Implementation latitude:

  • Runtime candidate は 00001KWHHRTM9 の projection を利用する。v0 で embedded-only fallback が必要なら許容されるが、Browser 自由入力にはしない。
  • Product-level endpoint の internal mapping、response shape、Svelte form placementinline/sidebar panel/modalは既存 UX を壊さない範囲で選んでよい。
  • Profile candidate の v0 source は backend-provided static/builtin candidates でもよい。ただし自由入力化しない。

Escalate if:

  • Browser-facing API に raw path/cwd/scope/secret/runtime internal location を含めないと実装できない場合。
  • Profile/ConfigBundle resolution の既存 boundary を変える必要が出た場合。
  • remote runtime provisioning を完成させないと acceptance を満たせない場合。

Validation:

  • cd web/workspace && deno task test
  • cd web/workspace && deno task check
  • cargo test -p yoi-workspace-server
  • cargo check -p yoi
  • git diff --check
  • nix build .#yoi --no-link は時間/依存変更の重さを見て実行、未実行なら理由を report。

Current code map:

  • Sidebar UI: web/workspace/src/lib/workspace-sidebar/WorkersNavSection.svelte, WorkspaceSidebar.svelte
  • Worker console/navigation: web/workspace/src/lib/workspace-console/model, web/workspace/src/routes/runtimes/[runtimeId]/workers/[workerId]/console/
  • Existing worker list and runtime spawn APIs: crates/workspace-server /api/workers and /api/runtimes/{runtime_id}/workers handlers, worker-runtime CreateWorkerRequest / config bundle resolution paths。
  • Runtime candidates/settings base: 00001KWHHRTM9 implementation in the same worktree.

Critical risks / reviewer focus:

  • Product-level endpoint does not deserialize or expose the internal Runtime create request shape.
  • Browser-facing surfaces are sanitized and do not leak raw path/cwd/scope/ConfigBundleRef/requested capabilities/secret/runtime endpoint/socket/session/store path.
  • Profile/runtime selectors are bounded to backend-published choices.
  • Success navigation and worker list refresh are deterministic.
  • The combined implementation with 00001KWHHRTM9 keeps runtime connection management and manual worker launch contracts consistent.

State changed

Queued acceptance recorded after explicit user follow-up 「2つとも消化して」。

Checked context:

  • Ticket body / thread / artifacts。
  • TicketRelationQuery(00001KWHEM8YJ): blocking relation 0 件。
  • TicketOrchestrationPlanQuery(00001KWHEM8YJ): prior human-gate waiting note を確認し、今回 accepted_plan / after ordering を記録済み。
  • workspace/worktree/visible Pod/TicketDoctor/code-map の bounded check。

Acceptance basis:

  • concrete missing decision / information は残っていない。
  • 00001KWHHRTM9 と surface が重なるため、同一 implementation worktree で 00001KWHHRTM9 の後に実装する。
  • side effect はこの queued -> inprogress acceptance 後に開始する。