Skip to content

feat: ブランチ単位ToDoに詳細フィールド追加+クリックで件名/詳細を編集可能に #1034

Description

@Kewton

背景 / 目的

ブランチ単位の 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(詳細)フィールドの追加(スキーマ+全レイヤー)

  1. migration v39: worktree_todosdetail TEXT NOT NULL DEFAULT '' を追加(既存行は空詳細で無害移行)。CURRENT_SCHEMA_VERSION 38→39。down() は SQLite 制約で no-op(v38 踏襲)。
  2. DB層 (worktree-todo-db.ts): WorktreeTodo/row 型に detail 追加、mapTodoRowcreateTodo(既定 '')・updateTododetail 受理)を更新。
  3. API (todos/route.ts, todos/[todoId]/route.ts): POST で detail? 受理、PATCH で detail? を検証・適用(新設 MAX_TODO_DETAIL_LENGTH)。
  4. クライアント (todo-api.ts): WorktreeTodoItem.detail 追加、create(content, detail?)update({ detail })
  5. 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.jsontodo namespace に追加
  • スコープ: Home の repository_todos / TodoWidget は対象外(揃えるなら別Issue)

受け入れ条件

  • ToDo項目クリックで編集エディタが開き、件名と詳細を編集・保存できる
  • 新規作成時/作成後どちらでも詳細を登録できる
  • 詳細ありの項目が一覧で判別できる
  • 既存 ToDo が migration で欠損なく移行(detail は空で開始)
  • PC(ActivityBar)・スマホ(Tools)双方で機能
  • 既存 API の後方互換を維持
  • テスト更新: worktree-todo-db.test.ts / worktree-todos.test.ts(API) / worktree-todo-api.test.ts / TodoPane.test.tsx + 新規 migration v39 テスト

スコープ外

  • Home のリポジトリ単位 ToDo(repository_todos)への詳細追加
  • 詳細のマークダウンレンダリング(本Issueはプレーンテキストで可。拡張は別途)

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions