5.0 KiB
| title | state | created_at | updated_at | assignee | queued_by | queued_at |
|---|---|---|---|---|---|---|
| Workspace web: repository and objective pages | queued | 2026-06-21T16:35:19Z | 2026-06-21T16:40:35Z | null | workspace-panel | 2026-06-21T16:40:35Z |
背景
Workspace web control plane の初期段階では、Ticket / Objective の操作系が Web で十分に実装され、移行できる状態になるまでは、既存 .yoi/tickets / .yoi/objectives の filesystem record を read-through authority として扱う。
SQLite は Workspace server の runtime/projection/store seam として使うが、Ticket / Objective の canonical write path を中途半端に DB へ移さない。少なくとも Ticket 作成・コメント・状態遷移・close、Objective 作成/更新、validation/audit が Web/API 側で成立するまでは、Web UI は filesystem records を読む方向で進める。
次の UI slice として、Workspace sidebar から遷移できる Repository page と Objective list page を追加する。
Repository page では、当面は backend が動いている Workspace root の Git repository を primary Repository として扱う。Git repository である場合は、簡易的な Git 情報、直近 log、Repository に関係する Ticket の Kanban view を表示する。Repository target metadata がまだ Ticket schema に十分無い場合は、初期実装では workspace-local tickets 全体または既存 metadata から安全に導ける範囲を表示し、target selector 対応は follow-up にできる。
方針
- Ticket / Objective は当面 filesystem read-through で表示する。
- Web UI からの mutation / DB migration は、この Ticket の主目的にしない。
- Repository は Git 専売の概念ではないが、初期 page は Git Repository の read-only summary から始める。
- Repository page は将来の Repository provider / RepositoryPoint / target selector model に繋がる形にする。
- Ticket Kanban は Ticket state を column として表示する。
- Objective list は existing
/api/objectivesを使い、Objective の title/state/summary を一覧できるようにする。
要件
Backend / API
- Repository list/detail の read-only API を追加する、または既存
/api/workspaceに必要最小限の Repository summary を追加する。- 初期は current workspace root を 1 つの local Repository として返してよい。
- Git repository の場合は branch/head/root/dirty status/remote URL summary などを bounded に返す。
- Git でない場合は
kind = "local"/git = unavailable相当の diagnostic を返す。
- Git log summary API を追加する。
- 直近 N 件だけ返す。
- commit hash、subject、author name/email の扱い、timestamp を bounded にする。
- full diff / patch / file contents は返さない。
- Repository Ticket Kanban 用の read model を追加する。
- 初期は Ticket state ごとに group した bounded list でよい。
- Ticket target Repository metadata がない場合の fallback を明記する。
- 将来 target selector が入ったら Repository ごとの filter に差し替えられる形にする。
- Objective list/detail は既存 filesystem read-through API を継続利用する。
Frontend
- Sidebar の
repositoriessection から Repository page に遷移できる。 - Repository page を追加する。
- Repository summary。
- Git summary / recent log。
- Ticket Kanban columns。
- API failure / non-Git / empty tickets を section 単位で表示。
- Objective list page を追加する。
- Objective title/state/updated_at などの一覧。
- Objective detail への遷移は可能なら行う。無理なら placeholder でよい。
- UI は static SPA のまま実装し、frontend に authority logic を持たせない。
Non-goals
- Ticket / Objective の DB canonical migration。
- Web からの Ticket mutation / Objective mutation。
- Repository CRUD / remote Git hosting integration。
- Full Git diff viewer / file browser / blame。
- Ticket target selector schema の完成。
- Multi-repository selection UI の完成。
- Kanban drag-and-drop / state mutation。
受け入れ条件
- Ticket / Objective は引き続き filesystem read-through authority から表示される。
- Repository page が表示できる。
- Git repository の場合、Repository summary と recent log が bounded に表示される。
- Repository Ticket Kanban が state columns で表示される。
- Ticket target metadata が未整備でも安全な fallback 表示になる。
- Objective list page が表示できる。
- Sidebar から repositories / objectives に遷移できる。
- API failure、non-Git repository、empty state が UI で壊れず表示される。
deno task checkとdeno task buildが通る。- backend 変更がある場合は
cargo test -p yoi-workspace-serverが通る。 cargo fmt --check、cargo check、git diff --check、yoi ticket doctor、nix build .#yoi --no-linkが通る。