From 86520418559af8f33f29c60b271571328bb597f5 Mon Sep 17 00:00:00 2001 From: Hare Date: Mon, 22 Jun 2026 01:40:33 +0900 Subject: [PATCH] ticket: add repository objective pages --- .yoi/tickets/00001KVNGJPRG/artifacts/.gitkeep | 0 .../00001KVNGJPRG/artifacts/relations.json | 21 +++++ .yoi/tickets/00001KVNGJPRG/item.md | 81 +++++++++++++++++++ .yoi/tickets/00001KVNGJPRG/thread.md | 24 ++++++ 4 files changed, 126 insertions(+) create mode 100644 .yoi/tickets/00001KVNGJPRG/artifacts/.gitkeep create mode 100644 .yoi/tickets/00001KVNGJPRG/artifacts/relations.json create mode 100644 .yoi/tickets/00001KVNGJPRG/item.md create mode 100644 .yoi/tickets/00001KVNGJPRG/thread.md diff --git a/.yoi/tickets/00001KVNGJPRG/artifacts/.gitkeep b/.yoi/tickets/00001KVNGJPRG/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/.yoi/tickets/00001KVNGJPRG/artifacts/relations.json b/.yoi/tickets/00001KVNGJPRG/artifacts/relations.json new file mode 100644 index 00000000..b1d54b4a --- /dev/null +++ b/.yoi/tickets/00001KVNGJPRG/artifacts/relations.json @@ -0,0 +1,21 @@ +{ + "version": 1, + "relations": [ + { + "ticket_id": "00001KVNGJPRG", + "kind": "related", + "target": "00001KVMFFYVX", + "note": "Extends workspace web bootstrap with repository/objective pages", + "author": "yoi ticket", + "at": "2026-06-21T16:36:06Z" + }, + { + "ticket_id": "00001KVNGJPRG", + "kind": "related", + "target": "00001KVNG9B9Z", + "note": "Sidebar navigation should link to repository and objective pages", + "author": "yoi ticket", + "at": "2026-06-21T16:36:06Z" + } + ] +} diff --git a/.yoi/tickets/00001KVNGJPRG/item.md b/.yoi/tickets/00001KVNGJPRG/item.md new file mode 100644 index 00000000..fe193aec --- /dev/null +++ b/.yoi/tickets/00001KVNGJPRG/item.md @@ -0,0 +1,81 @@ +--- +title: 'Workspace web: repository and objective pages' +state: 'ready' +created_at: '2026-06-21T16:35:19Z' +updated_at: '2026-06-21T16:36:06Z' +assignee: null +--- + +## 背景 + +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` が通る。 diff --git a/.yoi/tickets/00001KVNGJPRG/thread.md b/.yoi/tickets/00001KVNGJPRG/thread.md new file mode 100644 index 00000000..8732c6af --- /dev/null +++ b/.yoi/tickets/00001KVNGJPRG/thread.md @@ -0,0 +1,24 @@ + + +## 作成 + +LocalTicketBackend によって作成されました。 + +--- + + + +## Intake summary + +Marked ready by `yoi ticket state`. + +--- + + + +## State changed + +Marked ready by `yoi ticket state`. + + +---