背景 / 目的
ブランチ単位の ToDo(#1015 / worktree_todos)は現在、テキストが content(単一行=件名)のみ で、補足情報を書けない。また 件名を登録後に修正する UI 導線もない(バックエンドは対応済みだが未露出)。
各 ToDo に 「詳細(detail)」 を持たせ、項目クリックで詳細を登録・編集でき、件名と詳細の両方を修正できるようにする。
現状(実装)
データモデル worktree_todos(最新 migration v38): id / worktree_id / content / done / status / position / created_at / updated_at。詳細フィールドは存在しない。
編集の現状
| 層 |
件名(content)編集 |
詳細(detail)編集 |
DB updateTodo |
対応済み(worktree-todo-db.ts:189) |
フィールドなし |
| API PATCH |
検証・適用済み(route.ts:67-82) |
なし |
クライアント update() |
{ content } 対応(todo-api.ts:152) |
なし |
UI TodoPane.tsx |
編集導線なし(content は読み取り専用 <span> L260-268) |
なし |
クリック挙動: 各項目でクリック可能なのはステータスチップのみ(todo→doing→done 巡回, L249-259)。件名テキスト部のクリックは無反応。
→ 件名編集はUIの編集導線だけが欠落。詳細はデータモデルから丸ごと欠落。
提案
① detail(詳細)フィールドの追加(スキーマ+全レイヤー)
- migration v39:
worktree_todos に detail TEXT NOT NULL DEFAULT '' を追加(既存行は空詳細で無害移行)。CURRENT_SCHEMA_VERSION 38→39。down() は SQLite 制約で no-op(v38 踏襲)。
- DB層 (
worktree-todo-db.ts): WorktreeTodo/row 型に detail 追加、mapTodoRow・createTodo(既定 '')・updateTodo(detail 受理)を更新。
- API (
todos/route.ts, todos/[todoId]/route.ts): POST で detail? 受理、PATCH で detail? を検証・適用(新設 MAX_TODO_DETAIL_LENGTH)。
- クライアント (
todo-api.ts): WorktreeTodoItem.detail 追加、create(content, detail?)/update({ detail })。
- config (
todo-config.ts): MAX_TODO_DETAIL_LENGTH(例 4000〜8000)を追加。
② クリックで開く編集エディタ(件名+詳細)(UI)
- 項目クリックで編集モーダルを開く(既存
src/components/ui/Modal.tsx を再利用)。モーダル内に 件名(input)+詳細(textarea)、保存で update({ content, detail })、キャンセルで破棄。
- クリック領域の整理: ステータスチップ(巡回)・上下移動・削除は従来通り。件名テキスト部のクリックをエディタ起動に割り当て(チップと競合させない)。
- 詳細ありインジケータ: 詳細を持つ項目に小アイコン/キャレットを表示。
- PC/スマホ両対応:
TodoPane は PC ActivityBar とスマホ Tools で共有。モーダル方式で両面成立。タッチターゲット 44px の既存慣習を踏襲。
件名編集はバックエンドが準備済みのため、②のUIだけでも「件名修正」は即実現できる。詳細は①(フィールド追加)が前提。
設計上の論点(実装時に決定)
- 詳細のマークダウン対応: プレーンテキストで開始し、後続でマークダウン表示に拡張も可
- エディタ形式: モーダル(推奨・実装容易)/行インライン展開
- 保存トリガ: 明示保存ボタン(推奨)/blur 自動保存
- i18n: 新規文言(詳細ラベル・プレースホルダ・保存/キャンセル)は
locales/{en,ja}/worktree.json の todo namespace に追加
- スコープ: Home の
repository_todos / TodoWidget は対象外(揃えるなら別Issue)
受け入れ条件
スコープ外
- Home のリポジトリ単位 ToDo(
repository_todos)への詳細追加
- 詳細のマークダウンレンダリング(本Issueはプレーンテキストで可。拡張は別途)
関連
背景 / 目的
ブランチ単位の ToDo(#1015 /
worktree_todos)は現在、テキストがcontent(単一行=件名)のみ で、補足情報を書けない。また 件名を登録後に修正する UI 導線もない(バックエンドは対応済みだが未露出)。各 ToDo に 「詳細(detail)」 を持たせ、項目クリックで詳細を登録・編集でき、件名と詳細の両方を修正できるようにする。
現状(実装)
データモデル
worktree_todos(最新 migration v38):id / worktree_id / content / done / status / position / created_at / updated_at。詳細フィールドは存在しない。編集の現状
updateTodoworktree-todo-db.ts:189)route.ts:67-82)update(){ content }対応(todo-api.ts:152)TodoPane.tsx<span>L260-268)クリック挙動: 各項目でクリック可能なのはステータスチップのみ(todo→doing→done 巡回, L249-259)。件名テキスト部のクリックは無反応。
→ 件名編集はUIの編集導線だけが欠落。詳細はデータモデルから丸ごと欠落。
提案
①
detail(詳細)フィールドの追加(スキーマ+全レイヤー)worktree_todosにdetail TEXT NOT NULL DEFAULT ''を追加(既存行は空詳細で無害移行)。CURRENT_SCHEMA_VERSION38→39。down()は SQLite 制約で no-op(v38 踏襲)。worktree-todo-db.ts):WorktreeTodo/row 型にdetail追加、mapTodoRow・createTodo(既定'')・updateTodo(detail受理)を更新。todos/route.ts,todos/[todoId]/route.ts): POST でdetail?受理、PATCH でdetail?を検証・適用(新設MAX_TODO_DETAIL_LENGTH)。todo-api.ts):WorktreeTodoItem.detail追加、create(content, detail?)/update({ detail })。todo-config.ts):MAX_TODO_DETAIL_LENGTH(例 4000〜8000)を追加。② クリックで開く編集エディタ(件名+詳細)(UI)
src/components/ui/Modal.tsxを再利用)。モーダル内に 件名(input)+詳細(textarea)、保存でupdate({ content, detail })、キャンセルで破棄。TodoPaneは PC ActivityBar とスマホ Tools で共有。モーダル方式で両面成立。タッチターゲット 44px の既存慣習を踏襲。設計上の論点(実装時に決定)
locales/{en,ja}/worktree.jsonのtodonamespace に追加repository_todos/TodoWidgetは対象外(揃えるなら別Issue)受け入れ条件
worktree-todo-db.test.ts/worktree-todos.test.ts(API) /worktree-todo-api.test.ts/TodoPane.test.tsx+ 新規 migration v39 テストスコープ外
repository_todos)への詳細追加関連