From 109b74da42e352bae79e04d63c72f44e32be687a Mon Sep 17 00:00:00 2001 From: Hare Date: Thu, 2 Jul 2026 23:18:50 +0900 Subject: [PATCH] ticket: ready settings admin shell --- .yoi/tickets/00001KWHHRTM9/artifacts/.gitkeep | 0 .yoi/tickets/00001KWHHRTM9/item.md | 235 ++++++++++++++++++ .yoi/tickets/00001KWHHRTM9/thread.md | 38 +++ .yoi/tickets/00001KWHJ0XH6/artifacts/.gitkeep | 0 .yoi/tickets/00001KWHJ0XH6/item.md | 196 +++++++++++++++ .yoi/tickets/00001KWHJ0XH6/thread.md | 54 ++++ 6 files changed, 523 insertions(+) create mode 100644 .yoi/tickets/00001KWHHRTM9/artifacts/.gitkeep create mode 100644 .yoi/tickets/00001KWHHRTM9/item.md create mode 100644 .yoi/tickets/00001KWHHRTM9/thread.md create mode 100644 .yoi/tickets/00001KWHJ0XH6/artifacts/.gitkeep create mode 100644 .yoi/tickets/00001KWHJ0XH6/item.md create mode 100644 .yoi/tickets/00001KWHJ0XH6/thread.md diff --git a/.yoi/tickets/00001KWHHRTM9/artifacts/.gitkeep b/.yoi/tickets/00001KWHHRTM9/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/.yoi/tickets/00001KWHHRTM9/item.md b/.yoi/tickets/00001KWHHRTM9/item.md new file mode 100644 index 00000000..8b302109 --- /dev/null +++ b/.yoi/tickets/00001KWHHRTM9/item.md @@ -0,0 +1,235 @@ +--- +title: 'Workspace Backend Runtime接続の管理画面と永続configを追加する' +state: 'planning' +created_at: '2026-07-02T13:54:52Z' +updated_at: '2026-07-02T14:00:49Z' +assignee: null +--- + +## 背景 + +Workspace Backend は embedded Runtime を process 内に持ち、remote Runtime は `ServerConfig.remote_runtime_sources` から `RuntimeRegistry` に登録する構造になっている。Runtime が Backend へ接続しに来るのではなく、Backend が Runtime source を registry に登録して呼び出す。 + +現状、remote Runtime 接続の永続化は `.yoi/workspace-backend.local.toml` の `[[runtimes.remote]]` schema として存在する。ただし、これを Browser から追加・削除・確認する管理画面/API はまだ無い。また `token_ref` は field としてあるが secret ref resolution は未実装で、raw token 値を config に保存する schema は無い。 + +手動 Coding Worker 作成フォームで Runtime を選ぶには、先に Runtime connection を Workspace Backend の設定として管理できる必要がある。この Ticket では Runtime 接続管理 UI/API と config 永続化を追加する。 + +## 目的 + +- Workspace Browser から Runtime connection を確認・追加・削除できるようにする。 +- Runtime connection config を `.yoi/workspace-backend.local.toml` に永続化する。 +- raw token 値、Runtime internal store path、socket path、event cursor などを保存・表示しない。 +- RuntimeRegistry の live state と config の境界を明確にする。 +- 手動 Worker 作成 UI が選択できる Runtime 候補の基盤を作る。 + +## 依存関係 + +- `00001KWHJ0XH6 Workspace BrowserにSettings/Admin画面のshellとnavigationを追加する` + - Settings/Admin entry point / route / shell / section navigation は先行 Ticket で用意する。 + - この Ticket はその Settings shell 上に Runtime Connections section と Backend API / config persistence を追加する。 + +## 現状整理 + +### embedded Runtime + +- Backend process 内で作られる built-in Runtime。 +- `RuntimeRegistry::for_workspace(EmbeddedWorkerRuntime::...)` で登録される。 +- config file で追加・削除する対象ではない。 +- 管理画面では built-in として表示する。 + +### remote Runtime + +- `.yoi/workspace-backend.local.toml` の `[[runtimes.remote]]` から読み込まれる。 +- `ServerConfig.remote_runtime_sources` を経由して `RuntimeRegistry` に登録される。 +- 現状は起動時登録だけで、UI/API からの追加・削除は無い。 +- `token_ref` は schema にあるが secret resolution は未実装なので、v0 では fail closed か未対応表示にする。 + +## Config schema + +既存 schema を使う。 + +```toml +[[runtimes.remote]] +id = "example" +endpoint = "http://127.0.0.1:8790" +display_name = "Example Runtime" +# token_ref = "local:example-runtime-token" +``` + +保存するもの: + +- `id` +- `endpoint` +- `display_name` +- `token_ref`(secret ref resolution が実装されるまで v0 では UI から設定不可でもよい) + +保存しないもの: + +- bearer token 値。 +- connection health result。 +- Runtime worker list。 +- Runtime event cursor。 +- socket path / session path。 +- Runtime fs-store path。 +- live connection handle。 + +## Backend API 設計 + +Workspace Backend に Runtime connection settings API を追加する。 + +候補: + +```http +GET /api/settings/runtime-connections +POST /api/settings/runtime-connections +DELETE /api/settings/runtime-connections/{id} +POST /api/settings/runtime-connections/{id}/test +``` + +### GET + +返すもの: + +- embedded Runtime summary。 +- persisted remote Runtime connection configs。 +- live RuntimeRegistry projection との対応。 +- sanitized diagnostics。 + +返さないもの: + +- config file path。 +- secret 値。 +- Runtime endpoint credential。 +- raw socket / session / store path。 + +### POST + +request v0: + +```json +{ + "id": "remote-dev", + "endpoint": "http://127.0.0.1:8790", + "display_name": "Remote Dev Runtime" +} +``` + +v0 では `token_ref` は未対応でもよい。対応する場合も raw token 値は受け取らず、secret ref だけにする。 + +挙動: + +- id / endpoint / display_name を validate する。 +- duplicate id は拒否する。 +- `.yoi/workspace-backend.local.toml` を read-modify-write する。 +- unknown TOML fields を壊さない方針が必要。実装が難しい場合は typed schema 全体を parse/serialize し、comments が失われることを diagnostic / docs に明記する。 + +### DELETE + +- 指定 id の remote Runtime connection を config から削除する。 +- embedded Runtime は削除不可。 +- 存在しない id は typed diagnostic。 + +### TEST + +- config を保存せず、endpoint に接続可能か確認する。 +- v0 では lightweight `GET /health` 相当または Runtime HTTP summary endpoint を使う。 +- secret / token が必要な Runtime は v0 では未対応 diagnostic でもよい。 + +## Live反映方針 + +v0 は config persistence を優先し、live RuntimeRegistry への hot register/unregister は必須にしない。 + +選択肢: + +1. config 更新後に `restart_required = true` を返す。 +2. 追加だけ live register し、削除は restart required にする。 +3. 追加・削除とも live反映する。 + +この Ticket の v0 は **1** を基本とする。UI は「保存後、Backend restart で有効化」と表示する。 + +理由: + +- RuntimeRegistry の unregister は worker selection / observation / console subscription への影響がある。 +- live health と persisted config を混ぜると責務が増える。 +- まずは永続 config 管理を作り、live反映は別 Ticket に分けられる。 + +## UI 設計 + +Settings / Runtime Connections 画面を追加する。 + +表示: + +- Embedded Runtime + - id + - display name + - built-in badge + - status / diagnostics + - delete不可 +- Remote Runtime connections + - id + - display name + - endpoint + - persisted / active / restart required status + - Test + - Delete + +追加 form: + +- id +- display name +- endpoint + +v0 では token / secret input は出さない。secret ref 対応を入れる場合は separate field とし、raw token 値を入力・保存しない。 + +## Config read/write boundary + +`.yoi/workspace-backend.local.toml` は既に `WorkspaceBackendConfigFile` として parse される。Runtime connection management はこの file を read-modify-write する。 + +要確認: + +- comments を維持するか。 +- formatting を維持するか。 +- unknown fields の扱い。 + +v0 は typed TOML serialize で comments が失われてもよいが、その場合は実装 report と docs に明記する。comments を維持したい場合は TOML document editing crate の導入を検討する。 + +## 実装要件 + +- Runtime connection settings API を追加する。 +- `.yoi/workspace-backend.local.toml` の `[[runtimes.remote]]` を read-modify-write できる。 +- embedded Runtime は built-in connection として表示され、削除不可。 +- remote Runtime connection の add/delete/test ができる。 +- v0 では config 更新後 `restart_required = true` を返す。 +- raw token 値を request / response / config file に持たない。 +- RuntimeRegistry live state と persisted config を混同しない。 +- Settings / Runtime Connections UI を追加する。 +- Manual Coding Worker 作成 UI で使う Runtime candidate 情報に接続できる projection を用意する。 + +## 受け入れ条件 + +- Runtime Connections 管理画面がある。 +- embedded Runtime が built-in / delete不可として表示される。 +- remote Runtime connection を追加でき、`.yoi/workspace-backend.local.toml` に保存される。 +- remote Runtime connection を削除でき、config から消える。 +- remote Runtime connection の test ができる、または v0 未対応条件では typed diagnostic が返る。 +- config 更新 response が `restart_required = true` を返す。 +- raw token 値を UI/API/config に保存・表示しない。 +- Runtime endpoint credential / socket path / session path / Runtime store path が Browser-facing API に漏れない。 +- duplicate id / invalid endpoint / embedded delete attempt が typed diagnostic になる。 +- Focused tests が API list/add/delete/test、config persistence、sanitization、restart_required、UI render/submit path を確認する。 +- `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` が通る。 + +## 対象外 + +- RuntimeRegistry の live unregister 完成。 +- Remote Runtime workspace provisioning。 +- Secret store UI。 +- raw bearer token の保存。 +- Manual Coding Worker 作成 form の実装。 +- Runtime health monitoring daemon。 +- Runtime event cursor 永続化。 diff --git a/.yoi/tickets/00001KWHHRTM9/thread.md b/.yoi/tickets/00001KWHHRTM9/thread.md new file mode 100644 index 00000000..994cf217 --- /dev/null +++ b/.yoi/tickets/00001KWHHRTM9/thread.md @@ -0,0 +1,38 @@ + + +## 作成 + +LocalTicketBackend によって作成されました。 + +--- + + + +## Plan + +Workspace Backend Runtime connection management と永続 config の Ticket として詳細化した。 + +方針: +- Runtime が Backend に接続するのではなく、Backend が Runtime source を RuntimeRegistry に登録する現行構造を前提にする。 +- embedded Runtime は built-in connection として表示し、config 管理対象や削除対象にしない。 +- remote Runtime connection は `.yoi/workspace-backend.local.toml` の `[[runtimes.remote]]` に保存する。 +- 管理 API は list/add/delete/test を提供する。 +- v0 は config persistence を優先し、config 更新後は `restart_required = true` とする。live register/unregister は対象外。 +- raw token 値、socket/session/store path、Runtime event cursor、live handle は UI/API/config に出さない。 + + +--- + + + +## Decision + +Runtime connection management Ticket は Settings shell 先行 Ticket に依存する形へ整理した。 + +Decision: +- `00001KWHJ0XH6` が Workspace-local Settings の entry point / route / shell / section navigation を用意する。 +- `00001KWHHRTM9` はその Settings shell 上に Runtime Connections section と Backend API / config persistence を追加する。 +- Runtime connection 管理 Ticket 内で Settings shell 設計を同時に進めない。 + + +--- diff --git a/.yoi/tickets/00001KWHJ0XH6/artifacts/.gitkeep b/.yoi/tickets/00001KWHJ0XH6/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/.yoi/tickets/00001KWHJ0XH6/item.md b/.yoi/tickets/00001KWHJ0XH6/item.md new file mode 100644 index 00000000..65d79cd0 --- /dev/null +++ b/.yoi/tickets/00001KWHJ0XH6/item.md @@ -0,0 +1,196 @@ +--- +title: 'Workspace BrowserにSettings/Admin画面のshellとnavigationを追加する' +state: 'ready' +created_at: '2026-07-02T13:59:17Z' +updated_at: '2026-07-02T14:18:50Z' +assignee: null +--- + +## 背景 + +Workspace Browser には Worker / Runtime / Repository / Ticket などの作業 surface はあるが、Backend 設定や接続状態を扱う Settings/Admin surface はまだ無い。 + +今後 Runtime connections、Backend config、data store status、workspace identity などを UI から確認・編集する必要がある。これは普通に管理画面として設計する。ただし現状の Workspace Backend には user / permission / multi-user authorization が無いため、存在しない権限モデルを UI 上で fake しない。 + +Runtime connection 管理 UI を直接作り始めると、Settings/Admin の entry point / route / navigation / diagnostic / restart-required 表示などの共通設計と、Runtime connection config の永続化が混ざる。この Ticket では先に Settings/Admin shell と navigation だけを作り、Runtime Connections は後続 Ticket で実装する。 + +## 目的 + +- Workspace Browser に Settings/Admin surface を追加する。 +- 将来の admin UI の受け皿になる route / layout / navigation を用意する。 +- 現時点で存在しない user / permission / multi-user authorization を UI に出さない。 +- Runtime Connections などの後続 Settings section を追加できるようにする。 +- 既存の Worker Console / Sidebar UX を壊さない。 +- mutation や Runtime connection 永続化は後続 Ticket に委譲する。 + +## 位置づけ + +Settings/Admin は Workspace Backend の管理画面である。ただし v0 では権限管理を持たない。 + +明記する制約: + +- user account は無い。 +- role / permission model は無い。 +- multi-user authorization は無い。 +- したがって「管理者だけが操作できる」などの UI 文言や fake role を作らない。 +- 現時点の操作境界は「この Backend にアクセスできること」だけである。 + +将来の受け皿: + +- Runtime connections。 +- Backend config / effective config view。 +- data root / store status。 +- workspace identity view。 +- restart required / sanitized diagnostics。 +- 将来の user / permission 管理。ただしこの Ticket では実装しない。 + +## UI entry point + +Workspace Browser の sidebar に Settings/Admin entry point を追加する。 + +候補: + +```text +... +SETTINGS +``` + +または bottom utility として: + +```text +⚙ Settings +``` + +v0 では既存の Worker / Repository / Ticket navigation を邪魔しない位置に置く。Worker Console が主導線であることを崩さない。 + +## Route 設計 + +SvelteKit route として Settings/Admin shell を追加する。 + +候補: + +```text +/settings +/settings/runtime-connections +/settings/backend-config +``` + +v0 では `/settings` が overview / placeholder を表示し、section navigation から placeholder section に遷移できるところまででよい。 + +Settings section の初期候補: + +- Runtime Connections + - 後続 Ticket `00001KWHHRTM9` で実装する。 + - v0 shell では placeholder / empty state を表示する。 +- Backend Config + - `.yoi/workspace-backend.local.toml` / packaged default / effective config の表示・diff の受け皿。 + - v0 shell では read-only placeholder でよい。 +- Workspace Identity + - workspace id / display name / initialized state などの read-only 表示の受け皿。 + +## 権限モデルについての表示 + +Settings/Admin overview には、現在 user / permission model が無いことを簡潔に示す。 + +例: + +```text +This Workspace Backend currently has no user or permission model. Anyone with access to this backend can change these settings. +``` + +日本語 UI なら: + +```text +現在、この Workspace Backend にはユーザー権限モデルがありません。この Backend にアクセスできる人は設定を変更できます。 +``` + +これは「管理画面ではない」という意味ではない。無い権限モデルをあるように見せないための注意書きである。 + +## Common UI patterns + +Settings/Admin shell では後続 section が使う共通 pattern を用意する。 + +### Sanitized diagnostic + +- raw path / secret / token / socket path / runtime store path を出さない方針を示す。 +- v0 は reusable component でなくても、Settings shell 内の表示 pattern として定義する。 + +### Restart required badge + +Runtime connection や backend config の変更は Backend restart が必要になる場合がある。 + +v0 shell では badge / callout の見た目だけ用意してよい。 + +```text +Restart required +``` + +### Save / dirty state + +この Ticket では mutation を実装しないため、dirty tracking の本実装は不要。ただし後続 section が使う前提として、save/cancel area を置ける layout にする。 + +## Backend API との関係 + +この Ticket では Settings mutation API は実装しない。 + +後続 Ticket では API path を次のどちらかに寄せることを検討する。 + +```http +GET /api/settings +GET /api/settings/runtime-connections +``` + +または Workspace 配下であることを強調するなら: + +```http +GET /api/workspace/settings +GET /api/workspace/settings/runtime-connections +``` + +v0 shell は既存 `/api/workspace` projection などで表示可能な範囲に留めてよい。新 API を追加する場合も read-only summary に限定する。 + +## 依存関係 + +この Ticket は Runtime connection 管理 Ticket `00001KWHHRTM9` の前提とする。Runtime connection の add/delete/test/config persistence はこの Ticket では実装しない。 + +## 実装要件 + +- Workspace Browser に Settings/Admin entry point を追加する。 +- `/settings` route を追加する。 +- Settings/Admin shell layout を追加する。 +- Section navigation を追加する。 +- Runtime Connections placeholder section を追加する。 +- Backend Config placeholder section を追加する。 +- Workspace Identity placeholder / read-only section を追加する。 +- 現時点で user / permission model が無いことを UI に明記する。 +- user / role / permission の fake UI を作らない。 +- Restart required / sanitized diagnostic の表示 pattern を用意する。 +- 既存 Worker Console / Sidebar navigation と衝突しない。 + +## 受け入れ条件 + +- Sidebar または bottom utility から Settings/Admin に移動できる。 +- `/settings` が表示できる。 +- Settings/Admin shell に「現時点で user / permission model が無い」旨の注意書きがある。 +- Settings section navigation がある。 +- Runtime Connections placeholder がある。 +- Backend Config placeholder がある。 +- Workspace Identity placeholder または read-only summary がある。 +- UI 文言が fake user / role / permission model を示唆しない。 +- raw path / secret / token / socket path / runtime store path を placeholder や diagnostic に表示しない。 +- 既存 Worker Console / Runtime Console / Sidebar の主導線が壊れていない。 +- Focused tests が Settings route rendering、navigation、permission-model disclaimer、placeholder sections を確認する。 +- `cd web/workspace && deno task test` が通る。 +- `cd web/workspace && deno task check` が通る。 +- `git diff --check` が通る。 + +## 対象外 + +- Runtime connection add/delete/test 実装。 +- `.yoi/workspace-backend.local.toml` の read-modify-write API。 +- Backend config editor。 +- secret store UI。 +- user / permission UI。 +- Runtime live register / unregister。 +- Manual Coding Worker 作成 form。 +- Nix packaging に関わる変更。 diff --git a/.yoi/tickets/00001KWHJ0XH6/thread.md b/.yoi/tickets/00001KWHJ0XH6/thread.md new file mode 100644 index 00000000..7f8ffafc --- /dev/null +++ b/.yoi/tickets/00001KWHJ0XH6/thread.md @@ -0,0 +1,54 @@ + + +## 作成 + +LocalTicketBackend によって作成されました。 + +--- + + + +## Plan + +Workspace Browser Settings shell の先行 Ticket として詳細化した。 + +方針: +- Settings は admin/user/permission 管理ではなく、現在の local Workspace Backend process と workspace-local config を扱う surface とする。 +- Runtime Connections / Backend Config / Workspace Identity の section 受け皿を先に作る。 +- この Ticket では mutation や Runtime connection 永続化は実装しない。 +- 後続 Runtime connection 管理 Ticket `00001KWHHRTM9` はこの Settings shell を前提にする。 + + +--- + + + +## Decision + +Settings shell Ticket の位置づけを修正した。 + +Decision: +- `Workspace-local Settings` という独自呼称はやめ、普通に Settings/Admin surface として扱う。 +- 管理画面ではない、という意味ではない。 +- 現時点で user / permission / multi-user authorization が無いため、それらがあるかのような fake UI / 文言を作らない、という制約だけを明記する。 +- 後続 Runtime connection management Ticket の依存先表記も Settings/Admin shell に修正した。 + + +--- + + + +## Intake summary + +Marked ready by `yoi ticket state`. + +--- + + + +## State changed + +Marked ready by `yoi ticket state`. + + +---