--- title: 'Workspace web: repository and objective pages' state: 'closed' created_at: '2026-06-21T16:35:19Z' updated_at: '2026-06-21T17:31:43Z' assignee: null queued_by: 'workspace-panel' queued_at: '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 の `repositories` section から 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` が通る。