feat(web): show and manage subtasks up to three levels deep
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 35/100
- issue の種類
- 機能追加
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- typescript
- 領域
- frontend
調査の方向性
This frontend work is blocked by #243 and depends on #349, #368, and #354, so first check that those changes are available. Read the named touchpoints—especially TasksPage, TodosSection, TaskForm, TaskDetailPage, and task-errors.ts—and run the named tests plus the history panel tests. Done means the acceptance criteria pass across task and journal views, with the frontend coverage floor at 80%.
索引モデルが issue の本文から書いたものです。
説明
Split from #243 (frontend half). Part of #366.
Waits for the monorepo move (#397), through #243. Blocked by #243 (backend: depth 3, re-parenting, ParentChanged event, upward cascade). Runs after #384 and #387, which replace nested rows with rows and context headers on the Tasks page and journal. Related: #354 (dead error-code cleanup; do it first). #385 also edits task-errors.ts (new TASK_PARENT_STATUS_DERIVED message); rebase onto it.
Problem
Once the API allows subtasks three levels deep and re-parenting (#243), the web app still assumes one level: the parent selectors offer tasks that the server will reject, the history panels do not render the new ParentChanged event, and the error text says "Only one subtask level is supported."
User Story
As a TaskFlow user, I want to see and manage subtasks up to three levels deep in the web app, and to pick only parents that are allowed, so that I can use the deeper nesting and move a task to a different parent without hitting avoidable errors.
Acceptance Criteria
(Numbering in brackets is the criterion's number in the original #243 story.)
- [7] History display. Given a task with
ParentChangedevents, when I open the task detail history panel or the journal history modal, then each event is shown with its change summary. - Context headers. Given a task with children and grandchildren, when the Tasks page or journal day view renders them, then each work row appears under a context header showing the full path to the top-level goal. There are no nested levels or per-level expand/collapse controls. The Tasks page already does this (#384, PR #390), so only check that it holds at three levels there. The journal part comes from #387.
- [14] Eligible parents only. Given the parent selectors in the task form, Tasks page and task detail page, when they are opened, then they list only eligible parents: not the task itself, not its descendants, and not tasks that would push the subtree past depth 3. Completed parents follow the rule #368 shipped, which this story keeps: every stored-Completed parent stays in the list as a disabled option with a "(completed)" suffix, whatever the task's own status is (the server still accepts a Completed child under a Completed parent), and an already-selected parent stays enabled. The client-side filter and the server check agree.
- [15] Error messages. Given a rejected depth request, when the error is shown, then the message names the 3-level limit (it no longer says "one level"). The mapping in
task-errors.tscovers only codes the backend emits. It contains noTASK_PARENT_CYCLE_NOT_ALLOWEDorTASK_PARENT_INCOMPLETE_CHILDREN(removed by #354) and no new cycle code (#243 adds none). - Child count text. Given a child that has its own children, then the "x of y subtasks" text still reads correctly (it shows direct children only, as
ChildTaskCountdoes).
Edge Cases
- Parent dropdowns today offer ineligible tasks (
TaskForm,TasksPage,TaskDetailPage). Make the three agree with the server rule through one shared helper. #368 already added it,src/lib/parent-options.ts, used by all three pickers, with astatusfield onParentTaskOption, disabled stored-Completed parents with a "(completed)" suffix, and a disabled "Current parent" fallback option when the selected id is missing from the list. Extend that helper with the self, descendant and depth rules; do not create a second helper or a second Completed check. The new ineligible cases are left out of the list, not shown disabled (a default that can be revisited when building); an already-selected parent that becomes ineligible falls back to the "Current parent" option. - A three-level path has to stay readable in a context header on a phone.
- Pending (undoable) deletes: a pending key on a parent hides its descendants from the read hooks. Check the three-level case.
- Status checks use
status === 'Completed'(PascalCase) only.
Out of Scope
- Backend changes (#243).
- MCP changes in
nevridge/taskflow-assistant. - Drag-and-drop re-parenting.
- Bulk subtree move or copy.
- Depth beyond 3.
- A cycle error message (the API never emits a cycle error at depth 3).
Implementation Notes
- Frontend touchpoints:
TasksPage,TodosSection,TaskListRow,TaskForm,TaskDetailPage,TaskHistoryPaneland the journal history modal (render the new event type),task-errors.ts. - The API client is regenerated by the backend-builder in #243. Do not hand-edit
sdk.gen.tsortypes.gen.ts. Hand-written types insrc/api/journal.tsare updated manually. - Tests to extend, by name:
task-errors.test.ts,TodosSection.test.tsx,TasksPage.test.tsx,TaskDetailPage.test.tsx, history panel tests. - Coverage floor: 80% frontend lines.
- 主要言語
- C#
- スター
- 1
- フォーク
- 0
- 平均マージ
- 2時間 2分
- マージ済み PR(30日)
- 98
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
nevridge/TaskFlow のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 1 日以内に返信
-
tech-debt
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
nevridge/TaskFlow の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
juandresrodca/AdminForge#54 ·
-
要トリアージ 辞書
難易度 1/5 1〜3時間 初心者へのやさしさ 86/100
yksr-melt/Meltype#1625 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Docs typoオープン
難易度 1/5 1時間未満 初心者へのやさしさ 78/100
MonoGame/docs.monogame.github.io#328 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
space-wizards/RobustToolbox#7197 ·
メンテナーはふだん 1 日以内に返信
-
documentation high priority
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
lachydotmcg/capri-desktop#201 ·
メンテナーはふだん 1 日以内に返信