From 50a47d040c333cf40299640b9366a5542380d66a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:37:53 +0000 Subject: [PATCH 01/15] Initial plan From d63f764cbef30df165e10741d01e08a0c20ce688 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:40:29 +0000 Subject: [PATCH 02/15] =?UTF-8?q?feat:=20=E8=A8=AD=E8=A8=88=E3=83=97?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E4=BD=9C=E6=88=90=E3=81=AE=E6=BA=96=E5=82=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 進捗入力列追加の設計作業に着手するため 必要な調査・計画作成の開始を記録する Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- package-lock.json | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index b20b5324..303148f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21826,24 +21826,6 @@ } } }, - "node_modules/tailwindcss/node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, "node_modules/tapable": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", From a327b1d62dd0cc13ddc77812f928d8ea287c5d7d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:46:20 +0000 Subject: [PATCH 03/15] =?UTF-8?q?feat:=20=E9=80=B2=E6=8D=97=E5=85=A5?= =?UTF-8?q?=E5=8A=9B=E5=88=97=E3=81=AE=E8=A8=AD=E8=A8=88=E3=83=97=E3=83=A9?= =?UTF-8?q?=E3=83=B3=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit タスクテーブル進捗列追加の設計事項を整理し 実装フェーズに渡す判断点と受入条件を明確化する Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- .../133-task-table-progress-column-design.md | 135 ++++++++++++++++++ package-lock.json | 18 +++ 2 files changed, 153 insertions(+) create mode 100644 .github/copilot/plans/133-task-table-progress-column-design.md diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md new file mode 100644 index 00000000..d8300b2d --- /dev/null +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -0,0 +1,135 @@ +# 1. 機能要件 / 非機能要件 +- 機能要件: + - タスクテーブルに progress(進捗)入力列を追加し、既存の `Task.progress` を表示・編集できるようにする。 + - progress のデータ概念は既存の `Task.progress`(0〜100 の割合)をそのまま利用し、新しいドメイン概念は追加しない。 + - progress 列は `visibleFields` / `columnsState` に統合され、表示・非表示・順序・幅の制御が既存の列と同様に行える。 + - 進捗の編集は既存の TaskList セル編集 UI(選択 → Enter / ダブルクリック → Overlay 編集 → commit)に統合する。 + - 編集コミット時は `onCellCommit` を利用し、ホスト側が更新後の `tasks` を渡すことでガント表示と整合を保つ。 +- 非機能要件: + - 既存 UI のレイアウトや列サイズ計算を崩さず、既存の列操作(ドラッグ/リサイズ/選択/編集)と整合する。 + - 既存の public API / props / callback / イベントとの互換性を維持し、破壊的変更を行わない。 + - UI はアクセシビリティ(キーボード操作、スクリーンリーダー用のラベル)に配慮し、既存のセル編集仕様と同等の操作性を保つ。 + +# 2. スコープと変更対象 +- 変更ファイル(設計成果物): `.github/copilot/plans/133-task-table-progress-column-design.md`(新規、設計のみ)。実装時の想定変更対象は次項に列挙する。 +- 実装時に想定される変更対象(確認済みの既存ファイルのみ列挙): + - `src/types/public-types.ts`(`VisibleField` に `progress` を追加、`Task.progress` 既存概念を利用) + - `src/helpers/task-helper.ts`(`DEFAULT_VISIBLE_FIELDS` に progress を追加、表示用の正規化 helper 追加) + - `src/components/task-list/task-list-header.tsx`(列ラベルに progress を追加) + - `src/components/task-list/task-list-table.tsx`(progress 列の表示・編集許可・セルレンダリングの追加) + - `src/components/task-list/overlay-editor.tsx`(progress 編集時の input 種別・入力属性の調整) + - `src/test/task-list-table-editing.test.tsx` / `src/test/task-list-commit.test.tsx`(progress 列の表示・編集・commit 回帰テスト追加) + - `README.md`(visibleFields と progress 編集の記述追記) + - `example/` 配下(サンプルで progress 列を表示・編集する場合の更新) +- 影響範囲・互換性リスク: + - `visibleFields` 未指定時のデフォルト列に progress が追加されるため、既存利用者のテーブル幅が増える。 + - 互換性を維持するため、progress 列は `visibleFields` で除外可能とし、既存 UI を保持したい場合の設定方法を README に明記する。 +- 外部依存・Secrets の扱い: + - 外部依存の追加なし。Secrets/PII を扱わない。 + +# 3. 設計方針 +- 責務分離 / データフロー(必要なら Mermaid 1 枚): + - ライブラリ側: + - Task Table に progress 列を追加し、表示・選択・編集・commit UI を提供する。 + - `onCellCommit` を通じて progress 更新イベントを通知する。 + - 進捗値の表示/入力の正規化(0〜100 に丸め・クランプ)を UI 表示の範囲で行う。 + - 利用側アプリ: + - `onCellCommit` で progress 更新を受け取り、必要に応じて検証/永続化を行う。 + - 更新後の `tasks` を再投入し、ガント側表示と整合を取る。 + - `visibleFields` / `columnsState` で progress 列の表示/非表示を制御する。 + - データフロー: + ```mermaid + flowchart LR + TaskListTable -->|select/edit| OverlayEditor + OverlayEditor -->|onCellCommit(columnId=progress)| HostApp + HostApp -->|update tasks.progress| Gantt + HostApp -->|tasks prop| TaskListTable + ``` +- UI 要件(progress 列の表示内容と編集時の基本挙動): + - 列ラベルは「進捗(%)」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 + - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100` を指定する(OverlayEditor の columnId 判定で付与)。step の粒度は Undetermined とする。 + - 表示値は `Math.round` で整数化し、0〜100 の範囲にクランプして表示する。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 + - 編集確定時は入力値を `Number` 変換し、0〜100 にクランプした整数を `onCellCommit` に渡す。変換不能の場合は commit を実行せず、編集 UI にエラーメッセージを表示して入力を促す。 + - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とし、task type による制限有無は Undetermined とする。 +- 既存 API / props / callback / イベントとの整合方針: + - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 + - progress 更新は `onCellCommit` を主とし、既存の `onProgressChange`(ガント操作)との併用有無は Undetermined とする。 + - `onTaskUpdate` は既存の実績正規化用途を維持し、progress 更新では使用しない(ホスト側が `tasks` を更新して再描画)。 +- エッジケース / 例外系 / リトライ方針: + - 空文字や数値変換不能な値は commit を実行せず、編集 UI に「0〜100 の数値を入力してください」などのエラーメッセージを表示する。 + - 0 未満 / 100 超の入力はクランプし、commit 値を 0〜100 に収める。 + - `task.isDisabled === true` の行は progress も編集不可とする(既存ルール維持)。 +- ログと観測性(漏洩防止を含む): + - 追加ログは不要(既存の編集ログのみ)。 + +# 4. テスト戦略 +この章では、将来の IMPLEMENT/テスト工程で“何をもって完了とするか”を設計として明示する。(この1行は変更せずにそのまま出力する) +DESIGN フェーズではテストを実施しない。(この1行は変更せずにそのまま出力する) +- テスト観点(正常 / 例外 / 境界 / 回帰): + - 正常系: progress 列がタスクテーブルに表示され、`Task.progress` の値が表示される。 + - 正常系: progress セルを選択し Enter/ダブルクリックで Overlay 編集が起動する。 + - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、値が整数に丸められて渡される。 + - 例外系: 空文字 / `NaN` 入力時に commit が行われず、エラーメッセージが表示される。 + - 境界: 0 と 100 を入力した際に clamp されずそのまま確定する。 + - 回帰: `onCellCommit` 未指定時は progress も編集不可である。 + - 回帰: ガント側の `onProgressChange` とは独立して動作し、ホストが `tasks` 更新を行うとガント表示が同期する。 +- 受入条件(IMPLEMENT で確認する粒度): + - Given タスクテーブルに progress 列が存在しない現状 + When 本設計に基づいて実装を行う + Then タスクテーブル上に progress を入力できる列が追加される設計になっている + - Given 既に progress というデータ概念が存在している + When タスクテーブルから progress を更新する + Then 新しい進捗概念を追加せず、既存 progress を利用する設計になっている + - Given タスクテーブルとガント表示の両方が存在する + When タスクテーブル側で進捗を変更する + Then ガント側表示との整合が保たれる設計になっている + - Given 既存利用者がこのライブラリを利用している + When progress 列追加の設計を適用する + Then 互換性影響と必要な変更点が plan に明記されている + - Given 未確定の UI 仕様や対象範囲が存在する + When DESIGN plan をレビューする + Then Undetermined と確認方法が明示され、IMPLEMENT で迷わない状態になっている +- モック / フィクスチャ方針: + - `TaskListTableDefault` の既存フィクスチャに progress を追加して表示・選択を検証する。 + - `TaskList` の commit テストで progress columnId を用いた commit 事例を追加する。 +- テスト追加の実行コマンド(例: `python -m pytest`): + - `npm run test:unit`(ユニット/回帰テスト) + - `npm test`(lint/build/unit を包含) + +# 5. CI 品質ゲート +- 実行コマンド(format / lint / typecheck / test / security): + - lint/build/test: `npm test`(`test:unit` + `test:lint` + `test:build`) + - security: `npm audit` +- 通過基準と失敗時の対応: + - すべてのテストが green であること。失敗時は progress 列の編集/表示/commit の実装を見直す。 + +# 6. ロールアウト・運用 +- ロールバック方法: + - progress 列の追加を含むコミットをリバートする。 +- 監視・運用上の注意: + - 既存利用者が progress 列追加により横幅が変わるため、README とリリースノートで opt-out 方法を明記する。 + +# 7. オープンな課題 / ADR 要否 +- 未確定事項: + - progress 入力 UI の具体形式(step 単位・小数許容) + - 状態: Undetermined + - 影響: 入力可能な値の粒度、既存データとの互換性に影響する。 + - 決定方法: 既存の progress 更新(ガント操作)で採用している丸め方針を確認し、同一の粒度に統一する。 + - どの task 種別を progress 編集対象にするか + - 状態: Undetermined + - 影響: milestone/project などの編集期待値に影響する。 + - 決定方法: 既存の bar 操作で progress を更新可能な task 種別を確認し、同じ制限に合わせる。 + - progress 更新時に `onProgressChange` も呼び出すか + - 状態: Undetermined + - 影響: ホスト側のイベント処理の重複や互換性に影響する。 + - 決定方法: 既存の公開 API 利用例を確認し、二重通知を避ける方針を決定する。 + - 既存レイアウトへの影響(列順序/幅) + - 状態: Undetermined + - 影響: テーブル幅や既存ユーザーの表示崩れに影響する。 + - 決定方法: 既存の `DEFAULT_VISIBLE_FIELDS` と UI モックを確認し、最小のレイアウト変更となる列順を確定する。 + - 実際の変更対象ファイル + - 状態: Undetermined + - 影響: IMPLEMENT Issue の粒度に影響する(上記は想定リストであり、追加/除外があり得る)。 + - 決定方法: IMPLEMENT で再度 `src/components/task-list/` と README/example を中心に調査し、最小差分の変更対象を確定する。 +- ADR に残すべき判断: + - なし(既存 progress 概念の UI 追加に留まるため)。 diff --git a/package-lock.json b/package-lock.json index 303148f1..b20b5324 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21826,6 +21826,24 @@ } } }, + "node_modules/tailwindcss/node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "dev": true, + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/tapable": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", From 3f10f13e70793196bcc2cf912c9b18c1cd8070f0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:47:45 +0000 Subject: [PATCH 04/15] =?UTF-8?q?fix:=20=E8=A8=AD=E8=A8=88=E3=83=97?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=81=AE=E6=95=B4=E5=90=88=E6=80=A7=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 進捗列設計の未確定事項と記述の矛盾を解消し 入力丸めとエラーメッセージの方針を明確化する Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- .../plans/133-task-table-progress-column-design.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index d8300b2d..f1fc0877 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -48,12 +48,12 @@ - UI 要件(progress 列の表示内容と編集時の基本挙動): - 列ラベルは「進捗(%)」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100` を指定する(OverlayEditor の columnId 判定で付与)。step の粒度は Undetermined とする。 - - 表示値は `Math.round` で整数化し、0〜100 の範囲にクランプして表示する。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 - - 編集確定時は入力値を `Number` 変換し、0〜100 にクランプした整数を `onCellCommit` に渡す。変換不能の場合は commit を実行せず、編集 UI にエラーメッセージを表示して入力を促す。 - - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とし、task type による制限有無は Undetermined とする。 + - 表示値は 0〜100 の範囲にクランプし、step の粒度に合わせて丸める。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 + - 編集確定時は入力値を `Number` 変換し、0〜100 にクランプした値を `onCellCommit` に渡す。変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す。 + - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とする。 - 既存 API / props / callback / イベントとの整合方針: - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 - - progress 更新は `onCellCommit` を主とし、既存の `onProgressChange`(ガント操作)との併用有無は Undetermined とする。 + - progress 更新は `onCellCommit` で通知し、ガント側更新はホストが `tasks` を更新して反映する。 - `onTaskUpdate` は既存の実績正規化用途を維持し、progress 更新では使用しない(ホスト側が `tasks` を更新して再描画)。 - エッジケース / 例外系 / リトライ方針: - 空文字や数値変換不能な値は commit を実行せず、編集 UI に「0〜100 の数値を入力してください」などのエラーメッセージを表示する。 @@ -111,7 +111,7 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ # 7. オープンな課題 / ADR 要否 - 未確定事項: - - progress 入力 UI の具体形式(step 単位・小数許容) + - progress 入力 UI の具体形式(step 単位・小数許容・表示/commit の丸め方針) - 状態: Undetermined - 影響: 入力可能な値の粒度、既存データとの互換性に影響する。 - 決定方法: 既存の progress 更新(ガント操作)で採用している丸め方針を確認し、同一の粒度に統一する。 From 909f06ad5573376eed5c3543be19f3dc8dcc0222 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:48:37 +0000 Subject: [PATCH 05/15] =?UTF-8?q?fix:=20=E8=A8=AD=E8=A8=88=E3=83=97?= =?UTF-8?q?=E3=83=A9=E3=83=B3=E3=81=AE=E4=B8=8D=E6=95=B4=E5=90=88=E3=82=92?= =?UTF-8?q?=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 進捗入力の丸め方針と未確定事項の関係を整理し エラー表示の参照先を明確化する Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- .../copilot/plans/133-task-table-progress-column-design.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index f1fc0877..38b822d5 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -49,11 +49,11 @@ - 列ラベルは「進捗(%)」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100` を指定する(OverlayEditor の columnId 判定で付与)。step の粒度は Undetermined とする。 - 表示値は 0〜100 の範囲にクランプし、step の粒度に合わせて丸める。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 - - 編集確定時は入力値を `Number` 変換し、0〜100 にクランプした値を `onCellCommit` に渡す。変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す。 + - 編集確定時は入力値を `Number` 変換し、0〜100 にクランプした値を `onCellCommit` に渡す。変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor のエラー表示パターンに準拠)。 - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とする。 - 既存 API / props / callback / イベントとの整合方針: - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 - - progress 更新は `onCellCommit` で通知し、ガント側更新はホストが `tasks` を更新して反映する。 + - progress 更新の通知は `onCellCommit` を第一候補とし、`onProgressChange` 併用の可否は Undetermined とする。ガント側更新はホストが `tasks` を更新して反映する前提とする。 - `onTaskUpdate` は既存の実績正規化用途を維持し、progress 更新では使用しない(ホスト側が `tasks` を更新して再描画)。 - エッジケース / 例外系 / リトライ方針: - 空文字や数値変換不能な値は commit を実行せず、編集 UI に「0〜100 の数値を入力してください」などのエラーメッセージを表示する。 @@ -68,7 +68,7 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ - テスト観点(正常 / 例外 / 境界 / 回帰): - 正常系: progress 列がタスクテーブルに表示され、`Task.progress` の値が表示される。 - 正常系: progress セルを選択し Enter/ダブルクリックで Overlay 編集が起動する。 - - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、値が整数に丸められて渡される。 + - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、値が step 粒度に合わせて丸められて渡される。 - 例外系: 空文字 / `NaN` 入力時に commit が行われず、エラーメッセージが表示される。 - 境界: 0 と 100 を入力した際に clamp されずそのまま確定する。 - 回帰: `onCellCommit` 未指定時は progress も編集不可である。 From 540ca2d2155746760757c679ce7372e9d2ddd2cb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:49:38 +0000 Subject: [PATCH 06/15] =?UTF-8?q?fix:=20=E9=80=B2=E6=8D=97=E5=85=A5?= =?UTF-8?q?=E5=8A=9B=E4=BB=95=E6=A7=98=E3=81=AE=E6=9C=AA=E7=A2=BA=E5=AE=9A?= =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 丸め方針が未確定である旨を明示し テスト観点と UI 要件の整合性を保つ Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- .../plans/133-task-table-progress-column-design.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index 38b822d5..86dbf6d1 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -48,8 +48,8 @@ - UI 要件(progress 列の表示内容と編集時の基本挙動): - 列ラベルは「進捗(%)」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100` を指定する(OverlayEditor の columnId 判定で付与)。step の粒度は Undetermined とする。 - - 表示値は 0〜100 の範囲にクランプし、step の粒度に合わせて丸める。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 - - 編集確定時は入力値を `Number` 変換し、0〜100 にクランプした値を `onCellCommit` に渡す。変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor のエラー表示パターンに準拠)。 + - 表示値は 0〜100 の範囲にクランプし、丸め/小数表記の方針は Undetermined とする。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 + - 編集確定時は入力値を `Number` 変換し、0〜100 にクランプした値を `onCellCommit` に渡す。丸め方針は Undetermined とし、決定後に step に合わせた丸めを適用する。変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とする。 - 既存 API / props / callback / イベントとの整合方針: - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 @@ -68,7 +68,7 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ - テスト観点(正常 / 例外 / 境界 / 回帰): - 正常系: progress 列がタスクテーブルに表示され、`Task.progress` の値が表示される。 - 正常系: progress セルを選択し Enter/ダブルクリックで Overlay 編集が起動する。 - - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、値が step 粒度に合わせて丸められて渡される。 + - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、値が 0〜100 の範囲に収まって渡される(丸め方針は決定後に追加する)。 - 例外系: 空文字 / `NaN` 入力時に commit が行われず、エラーメッセージが表示される。 - 境界: 0 と 100 を入力した際に clamp されずそのまま確定する。 - 回帰: `onCellCommit` 未指定時は progress も編集不可である。 @@ -114,7 +114,7 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ - progress 入力 UI の具体形式(step 単位・小数許容・表示/commit の丸め方針) - 状態: Undetermined - 影響: 入力可能な値の粒度、既存データとの互換性に影響する。 - - 決定方法: 既存の progress 更新(ガント操作)で採用している丸め方針を確認し、同一の粒度に統一する。 + - 決定方法: 既存の progress 更新(ガント操作)が整数丸めであることは確認済みだが、タスクテーブル入力でも同一粒度に統一するかは未合意のため、既存利用例とプロダクト方針を確認して決定する。 - どの task 種別を progress 編集対象にするか - 状態: Undetermined - 影響: milestone/project などの編集期待値に影響する。 From fa60c8d17ced6d4bc39ce32f6b5de9333400c051 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:50:26 +0000 Subject: [PATCH 07/15] =?UTF-8?q?fix:=20=E9=80=B2=E6=8D=97=E5=88=97?= =?UTF-8?q?=E8=A8=AD=E8=A8=88=E3=81=AE=E8=A1=A8=E8=A8=98=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ラベル表記と入力仕様の記述を整理し 未確定事項の説明を明確化する Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- .../plans/133-task-table-progress-column-design.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index 86dbf6d1..a7ac99c5 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -46,14 +46,17 @@ HostApp -->|tasks prop| TaskListTable ``` - UI 要件(progress 列の表示内容と編集時の基本挙動): - - 列ラベルは「進捗(%)」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 + - 列ラベルは「進捗」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100` を指定する(OverlayEditor の columnId 判定で付与)。step の粒度は Undetermined とする。 - 表示値は 0〜100 の範囲にクランプし、丸め/小数表記の方針は Undetermined とする。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 - - 編集確定時は入力値を `Number` 変換し、0〜100 にクランプした値を `onCellCommit` に渡す。丸め方針は Undetermined とし、決定後に step に合わせた丸めを適用する。変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 + - 編集確定時は入力値を `Number` 変換する。 + - 0〜100 にクランプした値を `onCellCommit` に渡す。 + - 丸め方針は Undetermined とし、決定後に step に合わせた丸めを適用する。 + - 変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とする。 - 既存 API / props / callback / イベントとの整合方針: - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 - - progress 更新の通知は `onCellCommit` を第一候補とし、`onProgressChange` 併用の可否は Undetermined とする。ガント側更新はホストが `tasks` を更新して反映する前提とする。 + - progress 更新の通知には `onCellCommit` を使用する。`onProgressChange` 併用の可否は Undetermined とする。ガント側更新はホストが `tasks` を更新して反映する前提とする。 - `onTaskUpdate` は既存の実績正規化用途を維持し、progress 更新では使用しない(ホスト側が `tasks` を更新して再描画)。 - エッジケース / 例外系 / リトライ方針: - 空文字や数値変換不能な値は commit を実行せず、編集 UI に「0〜100 の数値を入力してください」などのエラーメッセージを表示する。 @@ -114,7 +117,7 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ - progress 入力 UI の具体形式(step 単位・小数許容・表示/commit の丸め方針) - 状態: Undetermined - 影響: 入力可能な値の粒度、既存データとの互換性に影響する。 - - 決定方法: 既存の progress 更新(ガント操作)が整数丸めであることは確認済みだが、タスクテーブル入力でも同一粒度に統一するかは未合意のため、既存利用例とプロダクト方針を確認して決定する。 + - 決定方法: 既存の progress 更新(ガント操作)は `Math.round` による四捨五入で整数化されていることは確認済みだが、タスクテーブル入力でも同一粒度に統一するかは未合意のため、既存利用例とプロダクト方針を確認して決定する。 - どの task 種別を progress 編集対象にするか - 状態: Undetermined - 影響: milestone/project などの編集期待値に影響する。 From 794086c9cb3101979db0066e3d8a1243b401b741 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:51:39 +0000 Subject: [PATCH 08/15] =?UTF-8?q?fix:=20=E9=80=B2=E6=8D=97=E5=85=A5?= =?UTF-8?q?=E5=8A=9B=E3=81=AE=E4=B8=B8=E3=82=81=E6=96=B9=E9=87=9D=E3=82=92?= =?UTF-8?q?=E6=98=8E=E7=A2=BA=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ガント側の整数化仕様を設計要件に反映し 通知/テスト記述の整合性を整える Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- .../plans/133-task-table-progress-column-design.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index a7ac99c5..af52dfdf 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -48,15 +48,14 @@ - UI 要件(progress 列の表示内容と編集時の基本挙動): - 列ラベルは「進捗」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100` を指定する(OverlayEditor の columnId 判定で付与)。step の粒度は Undetermined とする。 - - 表示値は 0〜100 の範囲にクランプし、丸め/小数表記の方針は Undetermined とする。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 - - 編集確定時は入力値を `Number` 変換する。 - - 0〜100 にクランプした値を `onCellCommit` に渡す。 - - 丸め方針は Undetermined とし、決定後に step に合わせた丸めを適用する。 + - 表示値は `Task.progress` を `Number` 変換し、`Math.round` で整数化したうえで 0〜100 にクランプして表示する。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 + - 編集確定時は入力値を `Number` 変換し、`Math.round` で整数化した値を 0〜100 にクランプして `onCellCommit` に渡す。 + - 小数許容/step の見直しは未確定事項とし、決定後に丸め/step の方針を更新する。 - 変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とする。 - 既存 API / props / callback / イベントとの整合方針: - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 - - progress 更新の通知には `onCellCommit` を使用する。`onProgressChange` 併用の可否は Undetermined とする。ガント側更新はホストが `tasks` を更新して反映する前提とする。 + - progress 更新の通知には `onCellCommit` を使用する。progress 更新時に `onProgressChange` も呼び出すかは Undetermined とする。ガント側更新はホストが `tasks` を更新して反映する前提とする。 - `onTaskUpdate` は既存の実績正規化用途を維持し、progress 更新では使用しない(ホスト側が `tasks` を更新して再描画)。 - エッジケース / 例外系 / リトライ方針: - 空文字や数値変換不能な値は commit を実行せず、編集 UI に「0〜100 の数値を入力してください」などのエラーメッセージを表示する。 @@ -71,7 +70,7 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ - テスト観点(正常 / 例外 / 境界 / 回帰): - 正常系: progress 列がタスクテーブルに表示され、`Task.progress` の値が表示される。 - 正常系: progress セルを選択し Enter/ダブルクリックで Overlay 編集が起動する。 - - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、値が 0〜100 の範囲に収まって渡される(丸め方針は決定後に追加する)。 + - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、`Math.round` で整数化された値が 0〜100 の範囲に収まって渡される。 - 例外系: 空文字 / `NaN` 入力時に commit が行われず、エラーメッセージが表示される。 - 境界: 0 と 100 を入力した際に clamp されずそのまま確定する。 - 回帰: `onCellCommit` 未指定時は progress も編集不可である。 @@ -114,7 +113,7 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ # 7. オープンな課題 / ADR 要否 - 未確定事項: - - progress 入力 UI の具体形式(step 単位・小数許容・表示/commit の丸め方針) + - progress 入力 UI の具体形式(step 単位・小数許容・丸め方針の見直し要否) - 状態: Undetermined - 影響: 入力可能な値の粒度、既存データとの互換性に影響する。 - 決定方法: 既存の progress 更新(ガント操作)は `Math.round` による四捨五入で整数化されていることは確認済みだが、タスクテーブル入力でも同一粒度に統一するかは未合意のため、既存利用例とプロダクト方針を確認して決定する。 From a585627607f3799b043c1bb2a0523351dd36b105 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:53:56 +0000 Subject: [PATCH 09/15] =?UTF-8?q?fix:=20=E9=80=B2=E6=8D=97=E5=85=A5?= =?UTF-8?q?=E5=8A=9B=E3=82=A8=E3=83=A9=E3=83=BC=E8=A1=A8=E8=A8=98=E3=81=AE?= =?UTF-8?q?=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit エラーメッセージの文言と未確定事項の優先度を整理し 設計内の表記ゆれを解消する Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- .../plans/133-task-table-progress-column-design.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index af52dfdf..2e9b850c 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -23,7 +23,7 @@ - `example/` 配下(サンプルで progress 列を表示・編集する場合の更新) - 影響範囲・互換性リスク: - `visibleFields` 未指定時のデフォルト列に progress が追加されるため、既存利用者のテーブル幅が増える。 - - 互換性を維持するため、progress 列は `visibleFields` で除外可能とし、既存 UI を保持したい場合の設定方法を README に明記する。 + - 互換性を維持するため、progress 列は `visibleFields` で除外可能とし、既存 UI を保持したい場合の設定方法を README とリリースノート(運用で用いる場合)に明記する。 - 外部依存・Secrets の扱い: - 外部依存の追加なし。Secrets/PII を扱わない。 @@ -47,18 +47,18 @@ ``` - UI 要件(progress 列の表示内容と編集時の基本挙動): - 列ラベルは「進捗」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 - - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100` を指定する(OverlayEditor の columnId 判定で付与)。step の粒度は Undetermined とする。 + - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100`, `step=1` を指定する(OverlayEditor の columnId 判定で付与)。小数許容を決定した場合のみ step を見直す。 - 表示値は `Task.progress` を `Number` 変換し、`Math.round` で整数化したうえで 0〜100 にクランプして表示する。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 - 編集確定時は入力値を `Number` 変換し、`Math.round` で整数化した値を 0〜100 にクランプして `onCellCommit` に渡す。 - 小数許容/step の見直しは未確定事項とし、決定後に丸め/step の方針を更新する。 - - 変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 + - 変換不能の場合は commit を実行せず、編集 UI に `Invalid progress value. Please enter 0-100.` を表示して入力を促す(既存の OverlayEditor の英語エラーメッセージと語調を合わせる)。 - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とする。 - 既存 API / props / callback / イベントとの整合方針: - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 - progress 更新の通知には `onCellCommit` を使用する。progress 更新時に `onProgressChange` も呼び出すかは Undetermined とする。ガント側更新はホストが `tasks` を更新して反映する前提とする。 - `onTaskUpdate` は既存の実績正規化用途を維持し、progress 更新では使用しない(ホスト側が `tasks` を更新して再描画)。 - エッジケース / 例外系 / リトライ方針: - - 空文字や数値変換不能な値は commit を実行せず、編集 UI に「0〜100 の数値を入力してください」などのエラーメッセージを表示する。 + - 空文字や数値変換不能な値は commit を実行せず、編集 UI に `Invalid progress value. Please enter 0-100.` を表示する。 - 0 未満 / 100 超の入力はクランプし、commit 値を 0〜100 に収める。 - `task.isDisabled === true` の行は progress も編集不可とする(既存ルール維持)。 - ログと観測性(漏洩防止を含む): @@ -116,7 +116,7 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ - progress 入力 UI の具体形式(step 単位・小数許容・丸め方針の見直し要否) - 状態: Undetermined - 影響: 入力可能な値の粒度、既存データとの互換性に影響する。 - - 決定方法: 既存の progress 更新(ガント操作)は `Math.round` による四捨五入で整数化されていることは確認済みだが、タスクテーブル入力でも同一粒度に統一するかは未合意のため、既存利用例とプロダクト方針を確認して決定する。 + - 決定方法: 既存の progress 更新(ガント操作)は `Math.round` による四捨五入で整数化されていることは確認済みだが、タスクテーブル入力でも小数を許容するかは未合意のため、既存利用例とプロダクト方針を確認して決定する。 - どの task 種別を progress 編集対象にするか - 状態: Undetermined - 影響: milestone/project などの編集期待値に影響する。 @@ -124,7 +124,7 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ - progress 更新時に `onProgressChange` も呼び出すか - 状態: Undetermined - 影響: ホスト側のイベント処理の重複や互換性に影響する。 - - 決定方法: 既存の公開 API 利用例を確認し、二重通知を避ける方針を決定する。 + - 決定方法: 既存の公開 API 利用例を確認し、二重通知を避ける方針を IMPLEMENT 前に優先決定する。 - 既存レイアウトへの影響(列順序/幅) - 状態: Undetermined - 影響: テーブル幅や既存ユーザーの表示崩れに影響する。 From 778cc6021fb98c06ff81881eb123a974d5a5af63 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:58:26 +0000 Subject: [PATCH 10/15] =?UTF-8?q?fix:=20=E9=80=B2=E6=8D=97=E5=88=97?= =?UTF-8?q?=E3=81=AE=E4=BA=92=E6=8F=9B=E6=80=A7=E6=96=B9=E9=87=9D=E3=82=92?= =?UTF-8?q?=E6=98=8E=E7=A2=BA=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit progress 列を opt-in とする設計に合わせて レイアウト影響と未確定事項の記述を整理する Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- .../133-task-table-progress-column-design.md | 35 +++++++------------ 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index 2e9b850c..a8eec3b3 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -14,7 +14,7 @@ - 変更ファイル(設計成果物): `.github/copilot/plans/133-task-table-progress-column-design.md`(新規、設計のみ)。実装時の想定変更対象は次項に列挙する。 - 実装時に想定される変更対象(確認済みの既存ファイルのみ列挙): - `src/types/public-types.ts`(`VisibleField` に `progress` を追加、`Task.progress` 既存概念を利用) - - `src/helpers/task-helper.ts`(`DEFAULT_VISIBLE_FIELDS` に progress を追加、表示用の正規化 helper 追加) + - `src/helpers/task-helper.ts`(progress 表示用の正規化 helper 追加。`DEFAULT_VISIBLE_FIELDS` は既存維持) - `src/components/task-list/task-list-header.tsx`(列ラベルに progress を追加) - `src/components/task-list/task-list-table.tsx`(progress 列の表示・編集許可・セルレンダリングの追加) - `src/components/task-list/overlay-editor.tsx`(progress 編集時の input 種別・入力属性の調整) @@ -22,8 +22,8 @@ - `README.md`(visibleFields と progress 編集の記述追記) - `example/` 配下(サンプルで progress 列を表示・編集する場合の更新) - 影響範囲・互換性リスク: - - `visibleFields` 未指定時のデフォルト列に progress が追加されるため、既存利用者のテーブル幅が増える。 - - 互換性を維持するため、progress 列は `visibleFields` で除外可能とし、既存 UI を保持したい場合の設定方法を README とリリースノート(運用で用いる場合)に明記する。 + - progress 列は opt-in とし、`visibleFields`/`columnsState` で明示的に追加した場合のみ表示する。既存のデフォルト列は維持するため、既存利用者への影響は限定的。 + - progress 列を追加したい場合の設定方法を README とリリースノート(運用で用いる場合)に明記する。 - 外部依存・Secrets の扱い: - 外部依存の追加なし。Secrets/PII を扱わない。 @@ -50,15 +50,16 @@ - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100`, `step=1` を指定する(OverlayEditor の columnId 判定で付与)。小数許容を決定した場合のみ step を見直す。 - 表示値は `Task.progress` を `Number` 変換し、`Math.round` で整数化したうえで 0〜100 にクランプして表示する。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 - 編集確定時は入力値を `Number` 変換し、`Math.round` で整数化した値を 0〜100 にクランプして `onCellCommit` に渡す。 - - 小数許容/step の見直しは未確定事項とし、決定後に丸め/step の方針を更新する。 - - 変換不能の場合は commit を実行せず、編集 UI に `Invalid progress value. Please enter 0-100.` を表示して入力を促す(既存の OverlayEditor の英語エラーメッセージと語調を合わせる)。 - - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とする。 + - 小数入力は許容せず、整数値のみを扱う(`Math.round`/`step=1` の方針を維持する)。 + - 変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 + - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とし、task type による制限は設けない。 - 既存 API / props / callback / イベントとの整合方針: - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 - - progress 更新の通知には `onCellCommit` を使用する。progress 更新時に `onProgressChange` も呼び出すかは Undetermined とする。ガント側更新はホストが `tasks` を更新して反映する前提とする。 + - `DEFAULT_VISIBLE_FIELDS` は変更せず、progress 列は `visibleFields`/`columnsState` で明示的に追加する。 + - progress 更新の通知には `onCellCommit` を使用し、`onProgressChange` は呼び出さない(ガント操作専用のイベントとし、二重通知を避ける)。ガント側更新はホストが `tasks` を更新して反映する前提とする。 - `onTaskUpdate` は既存の実績正規化用途を維持し、progress 更新では使用しない(ホスト側が `tasks` を更新して再描画)。 - エッジケース / 例外系 / リトライ方針: - - 空文字や数値変換不能な値は commit を実行せず、編集 UI に `Invalid progress value. Please enter 0-100.` を表示する。 + - 空文字や数値変換不能な値は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示する。 - 0 未満 / 100 超の入力はクランプし、commit 値を 0〜100 に収める。 - `task.isDisabled === true` の行は progress も編集不可とする(既存ルール維持)。 - ログと観測性(漏洩防止を含む): @@ -109,26 +110,14 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ - ロールバック方法: - progress 列の追加を含むコミットをリバートする。 - 監視・運用上の注意: - - 既存利用者が progress 列追加により横幅が変わるため、README とリリースノートで opt-out 方法を明記する。 + - progress 列を追加した場合に横幅が変わるため、README とリリースノートで追加方法を明記する。 # 7. オープンな課題 / ADR 要否 - 未確定事項: - - progress 入力 UI の具体形式(step 単位・小数許容・丸め方針の見直し要否) - - 状態: Undetermined - - 影響: 入力可能な値の粒度、既存データとの互換性に影響する。 - - 決定方法: 既存の progress 更新(ガント操作)は `Math.round` による四捨五入で整数化されていることは確認済みだが、タスクテーブル入力でも小数を許容するかは未合意のため、既存利用例とプロダクト方針を確認して決定する。 - - どの task 種別を progress 編集対象にするか - - 状態: Undetermined - - 影響: milestone/project などの編集期待値に影響する。 - - 決定方法: 既存の bar 操作で progress を更新可能な task 種別を確認し、同じ制限に合わせる。 - - progress 更新時に `onProgressChange` も呼び出すか - - 状態: Undetermined - - 影響: ホスト側のイベント処理の重複や互換性に影響する。 - - 決定方法: 既存の公開 API 利用例を確認し、二重通知を避ける方針を IMPLEMENT 前に優先決定する。 - - 既存レイアウトへの影響(列順序/幅) + - progress 列を追加する場合のレイアウト影響(列順序/幅) - 状態: Undetermined - 影響: テーブル幅や既存ユーザーの表示崩れに影響する。 - - 決定方法: 既存の `DEFAULT_VISIBLE_FIELDS` と UI モックを確認し、最小のレイアウト変更となる列順を確定する。 + - 決定方法: 既存の visibleFields 指定例と UI モックを確認し、progress 列を追加する際の推奨順序を確定する。 - 実際の変更対象ファイル - 状態: Undetermined - 影響: IMPLEMENT Issue の粒度に影響する(上記は想定リストであり、追加/除外があり得る)。 From 6d4c20ea46471d6215fe442d1675f77fd5b3c2e2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 15:15:53 +0000 Subject: [PATCH 11/15] =?UTF-8?q?fix:=20=E8=A8=AD=E8=A8=88=E6=9B=B8?= =?UTF-8?q?=E3=81=AE=E6=8C=87=E6=91=98=E5=8F=8D=E6=98=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 進捗列の入力粒度と列配置の指定を反映し 設計書内の不整合とエラーを解消する Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- .../133-task-table-progress-column-design.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index a8eec3b3..80573f28 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -9,6 +9,7 @@ - 既存 UI のレイアウトや列サイズ計算を崩さず、既存の列操作(ドラッグ/リサイズ/選択/編集)と整合する。 - 既存の public API / props / callback / イベントとの互換性を維持し、破壊的変更を行わない。 - UI はアクセシビリティ(キーボード操作、スクリーンリーダー用のラベル)に配慮し、既存のセル編集仕様と同等の操作性を保つ。 + - IMPLEMENT フェーズは本設計から逸脱しない。追加変更が必要な場合は DESIGN を更新してから実装する。 # 2. スコープと変更対象 - 変更ファイル(設計成果物): `.github/copilot/plans/133-task-table-progress-column-design.md`(新規、設計のみ)。実装時の想定変更対象は次項に列挙する。 @@ -41,18 +42,19 @@ ```mermaid flowchart LR TaskListTable -->|select/edit| OverlayEditor - OverlayEditor -->|onCellCommit(columnId=progress)| HostApp + OverlayEditor -->|onCellCommit: progress| HostApp HostApp -->|update tasks.progress| Gantt HostApp -->|tasks prop| TaskListTable ``` - UI 要件(progress 列の表示内容と編集時の基本挙動): - 列ラベルは「進捗」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 - - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100`, `step=1` を指定する(OverlayEditor の columnId 判定で付与)。小数許容を決定した場合のみ step を見直す。 - - 表示値は `Task.progress` を `Number` 変換し、`Math.round` で整数化したうえで 0〜100 にクランプして表示する。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 - - 編集確定時は入力値を `Number` 変換し、`Math.round` で整数化した値を 0〜100 にクランプして `onCellCommit` に渡す。 - - 小数入力は許容せず、整数値のみを扱う(`Math.round`/`step=1` の方針を維持する)。 + - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100`, `step=5` を指定する(OverlayEditor の columnId 判定で付与)。 + - 表示値は `Task.progress` を `Number` 変換し、`Math.round(value / 5) * 5` で 5 刻みに丸めたうえで 0〜100 にクランプして表示する。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 + - 編集確定時は入力値を `Number` 変換し、`Math.round(value / 5) * 5` で 5 刻みに丸めた値を 0〜100 にクランプして `onCellCommit` に渡す。 + - 小数入力は許容せず、5 刻みの整数値のみを扱う。 - 変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とし、task type による制限は設けない。 + - progress 列は終了日の列の直後に挿入し、列幅は終了日と同一とする(既存の `getDefaultWidth` と同値)。必要であればホスト側で列幅を調整する。 - 既存 API / props / callback / イベントとの整合方針: - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 - `DEFAULT_VISIBLE_FIELDS` は変更せず、progress 列は `visibleFields`/`columnsState` で明示的に追加する。 @@ -71,9 +73,10 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ - テスト観点(正常 / 例外 / 境界 / 回帰): - 正常系: progress 列がタスクテーブルに表示され、`Task.progress` の値が表示される。 - 正常系: progress セルを選択し Enter/ダブルクリックで Overlay 編集が起動する。 - - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、`Math.round` で整数化された値が 0〜100 の範囲に収まって渡される。 + - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、`Math.round(value / 5) * 5` で 5 刻みに丸めた値が 0〜100 の範囲に収まって渡される。 - 例外系: 空文字 / `NaN` 入力時に commit が行われず、エラーメッセージが表示される。 - 境界: 0 と 100 を入力した際に clamp されずそのまま確定する。 + - 回帰: progress 列が終了日の直後に挿入され、列幅が終了日と同一である。 - 回帰: `onCellCommit` 未指定時は progress も編集不可である。 - 回帰: ガント側の `onProgressChange` とは独立して動作し、ホストが `tasks` 更新を行うとガント表示が同期する。 - 受入条件(IMPLEMENT で確認する粒度): @@ -114,10 +117,6 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ # 7. オープンな課題 / ADR 要否 - 未確定事項: - - progress 列を追加する場合のレイアウト影響(列順序/幅) - - 状態: Undetermined - - 影響: テーブル幅や既存ユーザーの表示崩れに影響する。 - - 決定方法: 既存の visibleFields 指定例と UI モックを確認し、progress 列を追加する際の推奨順序を確定する。 - 実際の変更対象ファイル - 状態: Undetermined - 影響: IMPLEMENT Issue の粒度に影響する(上記は想定リストであり、追加/除外があり得る)。 From df24b1fd136eae36f0b3d5e85b0cc6e9c366de4d Mon Sep 17 00:00:00 2001 From: Yoshio Nishiyama <99854263+LevelCapTech@users.noreply.github.com> Date: Sat, 7 Mar 2026 00:27:28 +0900 Subject: [PATCH 12/15] fix: Update .github/copilot/plans/133-task-table-progress-column-design.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/copilot/plans/133-task-table-progress-column-design.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index 80573f28..20afcb7e 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -54,7 +54,7 @@ - 小数入力は許容せず、5 刻みの整数値のみを扱う。 - 変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とし、task type による制限は設けない。 - - progress 列は終了日の列の直後に挿入し、列幅は終了日と同一とする(既存の `getDefaultWidth` と同値)。必要であればホスト側で列幅を調整する。 + - デフォルトの列構成では progress 列を終了日の列の直後に配置し、列幅は終了日と同一とする(既存の `getDefaultWidth` と同値)。必要であればホスト側で `visibleFields` / `columnsState` を用いて順序や列幅を調整する。 - 既存 API / props / callback / イベントとの整合方針: - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 - `DEFAULT_VISIBLE_FIELDS` は変更せず、progress 列は `visibleFields`/`columnsState` で明示的に追加する。 From e9ce34f77d64bbce7dbe8c4409ca1bb9c4059ebd Mon Sep 17 00:00:00 2001 From: Yoshio Nishiyama <99854263+LevelCapTech@users.noreply.github.com> Date: Sat, 7 Mar 2026 00:27:44 +0900 Subject: [PATCH 13/15] fix: Update .github/copilot/plans/133-task-table-progress-column-design.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../copilot/plans/133-task-table-progress-column-design.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index 20afcb7e..23a69cd6 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -51,8 +51,8 @@ - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100`, `step=5` を指定する(OverlayEditor の columnId 判定で付与)。 - 表示値は `Task.progress` を `Number` 変換し、`Math.round(value / 5) * 5` で 5 刻みに丸めたうえで 0〜100 にクランプして表示する。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 - 編集確定時は入力値を `Number` 変換し、`Math.round(value / 5) * 5` で 5 刻みに丸めた値を 0〜100 にクランプして `onCellCommit` に渡す。 - - 小数入力は許容せず、5 刻みの整数値のみを扱う。 - - 変換不能の場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 + - 小数を含む任意の数値入力を許容し、表示・編集確定のいずれのタイミングでも 5 刻みの整数値へ丸めて扱う。 + - 数値へ変換できない場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とし、task type による制限は設けない。 - デフォルトの列構成では progress 列を終了日の列の直後に配置し、列幅は終了日と同一とする(既存の `getDefaultWidth` と同値)。必要であればホスト側で `visibleFields` / `columnsState` を用いて順序や列幅を調整する。 - 既存 API / props / callback / イベントとの整合方針: From 5284b5814f9ebf7a636fd6f19c7695a062c0ae2e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 15:36:20 +0000 Subject: [PATCH 14/15] =?UTF-8?q?fix:=20onCellCommit=20=E4=BB=95=E6=A7=98?= =?UTF-8?q?=E3=81=AE=E6=98=8E=E7=A2=BA=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit progress 更新時の文字列 payload を明記し 設計書の通知仕様を既存 API に合わせる Co-authored-by: LevelCapTech <99854263+LevelCapTech@users.noreply.github.com> --- .../copilot/plans/133-task-table-progress-column-design.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index 23a69cd6..edf48c17 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -50,7 +50,7 @@ - 列ラベルは「進捗」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100`, `step=5` を指定する(OverlayEditor の columnId 判定で付与)。 - 表示値は `Task.progress` を `Number` 変換し、`Math.round(value / 5) * 5` で 5 刻みに丸めたうえで 0〜100 にクランプして表示する。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 - - 編集確定時は入力値を `Number` 変換し、`Math.round(value / 5) * 5` で 5 刻みに丸めた値を 0〜100 にクランプして `onCellCommit` に渡す。 + - 編集確定時は入力値を `Number` 変換し、`Math.round(value / 5) * 5` で 5 刻みに丸めた値を 0〜100 にクランプして `onCellCommit` に渡す。`onCellCommit` の payload は `value: string` のため、丸め後の値を文字列化して渡し、必要に応じてホスト側で数値化する。 - 小数を含む任意の数値入力を許容し、表示・編集確定のいずれのタイミングでも 5 刻みの整数値へ丸めて扱う。 - 数値へ変換できない場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。 - 編集可能条件は既存の `isCellEditable` と同一(`onCellCommit` があること、`task.isDisabled !== true`)を基本とし、task type による制限は設けない。 @@ -58,7 +58,7 @@ - 既存 API / props / callback / イベントとの整合方針: - `VisibleField` に `progress` を追加し、`visibleFields` に progress を指定可能にする。 - `DEFAULT_VISIBLE_FIELDS` は変更せず、progress 列は `visibleFields`/`columnsState` で明示的に追加する。 - - progress 更新の通知には `onCellCommit` を使用し、`onProgressChange` は呼び出さない(ガント操作専用のイベントとし、二重通知を避ける)。ガント側更新はホストが `tasks` を更新して反映する前提とする。 + - progress 更新の通知には `onCellCommit` を使用し、`onProgressChange` は呼び出さない(ガント操作専用のイベントとし、二重通知を避ける)。`onCellCommit` は `CellCommitPayload.value` が文字列であるため、progress 更新値は `"0"`〜`"100"` の文字列で通知する。ガント側更新はホストが `tasks` を更新して反映する前提とする。 - `onTaskUpdate` は既存の実績正規化用途を維持し、progress 更新では使用しない(ホスト側が `tasks` を更新して再描画)。 - エッジケース / 例外系 / リトライ方針: - 空文字や数値変換不能な値は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示する。 @@ -73,7 +73,7 @@ DESIGN フェーズではテストを実施しない。(この1行は変更せ - テスト観点(正常 / 例外 / 境界 / 回帰): - 正常系: progress 列がタスクテーブルに表示され、`Task.progress` の値が表示される。 - 正常系: progress セルを選択し Enter/ダブルクリックで Overlay 編集が起動する。 - - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、`Math.round(value / 5) * 5` で 5 刻みに丸めた値が 0〜100 の範囲に収まって渡される。 + - 正常系: 0〜100 の入力で `onCellCommit` が呼ばれ、`Math.round(value / 5) * 5` で 5 刻みに丸めた値が 0〜100 の範囲に収まった文字列として渡される。 - 例外系: 空文字 / `NaN` 入力時に commit が行われず、エラーメッセージが表示される。 - 境界: 0 と 100 を入力した際に clamp されずそのまま確定する。 - 回帰: progress 列が終了日の直後に挿入され、列幅が終了日と同一である。 From 2521cbc37ab03a85b66e9f91475e8927190d6ce9 Mon Sep 17 00:00:00 2001 From: Yoshio Nishiyama <99854263+LevelCapTech@users.noreply.github.com> Date: Sat, 7 Mar 2026 12:21:41 +0900 Subject: [PATCH 15/15] fix: Update .github/copilot/plans/133-task-table-progress-column-design.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/copilot/plans/133-task-table-progress-column-design.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/copilot/plans/133-task-table-progress-column-design.md b/.github/copilot/plans/133-task-table-progress-column-design.md index edf48c17..ec6d924e 100644 --- a/.github/copilot/plans/133-task-table-progress-column-design.md +++ b/.github/copilot/plans/133-task-table-progress-column-design.md @@ -49,7 +49,7 @@ - UI 要件(progress 列の表示内容と編集時の基本挙動): - 列ラベルは「進捗」とし、セル表示は `Task.progress` の数値(%記号なし)を表示する。 - 編集時は `type="number"` 入力を使用し、`min=0`, `max=100`, `step=5` を指定する(OverlayEditor の columnId 判定で付与)。 - - 表示値は `Task.progress` を `Number` 変換し、`Math.round(value / 5) * 5` で 5 刻みに丸めたうえで 0〜100 にクランプして表示する。`Task.progress` が `NaN` や `null` 等の場合は空表示にする。 + - 表示値は `Task.progress` を `Number` 変換し、`Math.round(value / 5) * 5` で 5 刻みに丸めたうえで 0〜100 にクランプして表示する。`Task.progress` が `NaN` や非有限値の場合は空表示にする。 - 編集確定時は入力値を `Number` 変換し、`Math.round(value / 5) * 5` で 5 刻みに丸めた値を 0〜100 にクランプして `onCellCommit` に渡す。`onCellCommit` の payload は `value: string` のため、丸め後の値を文字列化して渡し、必要に応じてホスト側で数値化する。 - 小数を含む任意の数値入力を許容し、表示・編集確定のいずれのタイミングでも 5 刻みの整数値へ丸めて扱う。 - 数値へ変換できない場合は commit を実行せず、編集 UI に `0〜100 の数値を入力してください` を表示して入力を促す(既存の OverlayEditor の error 表示領域を使用)。