[Tracking] Task update path: repository fixes, completion date, planning and journal subtask display

オープン
#366 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
25/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
活発
技術スタック
csharp

調査の方向性

This is a tracking issue, not a standalone change; begin with the suggested order and read the linked issues, starting with #356 and #361. The work spans TaskItemsController.ApplyUpdateAsync, TaskRepository.UpdateAsync, and the journal todos queries. It is done when the listed changes land in dependency order and the dependent issues can build on them.

索引モデルが issue の本文から書いたものです。

説明

tech-debt

Groups the issues that all edit TaskItemsController.ApplyUpdateAsync, TaskRepository.UpdateAsync and the journal todos queries, so they are built in one order and rebase onto each other once.

Created from the 2026-10-30 open-issue review. #242 was folded into #350 and closed.

Suggested order

  1. #356 — Record Description/DueDate change events on the Detached path when the stored value is null (TaskRepository.UpdateAsync; small, independent)
  2. #361 — Stop repository UpdateAsync re-marking already-tracked related entities as Modified (JournalLogEntryRepository, probably TaskRepository). Do with or right after #356
  3. #352 — Accept journalDate on task update (no migration, smallest; also fixes the ignored PastDayNotAllowed result in AssignToJournalDateAsync)
  4. #350 — Record a completion date and apply the reopen rule to it (part A: column, stamping, backfill, reopen guard, API docs; absorbs #242)
  5. #367 — Show completed tasks on the day they were completed (part B: journal reads, ToDto parity, checkbox UI)
  6. #368 — Reject attaching open subtasks to completed parents. Can start now
    4a. [ ] #396 — Reject reopening a child under a Completed parent (follow-up from #395; decided: reject, not auto-reopen). Needs grooming first. After #368, before #243
  7. #387 — Apply the goal and work model to journal rows and remove isContextOnly (takes the orphaned-subtask rows from #368). Unblocked: #384 is done (PR #390). Tracked in #388
  8. #243 — Allow subtasks up to three levels deep and re-parenting (backend). Blocked by #368, #396, #387 and the monorepo move (#397), so it is the first API feature built with the merged pipeline and its MCP change ships in the same PR
  9. #369 — Show and manage subtasks up to three levels deep (frontend). Blocked by #243
  10. #405 — Give a Blocked parent with open subtasks a way to unblock (follow-up from #385 and #387; needs grooming; after the move; listed last but do it before #243, which changes the parent rules again)
  11. #406 — Attribute PUT /JournalEntries todoTaskItemIds by the user local date (follow-up from #387; needs grooming; after the move)
  12. #408 — Decide the header and row for an open parent whose subtasks are all complete (follow-up from #387; needs a decision first, shared rule with the Tasks page; web only, so it does not wait for the move and can be done any time)
    10a. [ ] #404 — Open task details from journal rows and return to the same day (moved to #427 on 2026-11-05, an issue has one parent; still builds with #408 in one order, and before #369, which reworks journal rows)

#349 was closed without a replacement after the #382 spike: #387 shows only a day's work, and the off-day disclosure was dropped.

Do after #385 (in #388) and before #368 and #243 / #369: #354 — remove the dead TASK_PARENT_CYCLE_NOT_ALLOWED and TASK_PARENT_INCOMPLETE_CHILDREN references from the frontend (it edits task-errors.ts, which #369 also edits).

#394 — fix the CompletedAt reopen test that fails in the first 30 minutes after 00:00 UTC (a follow-up to #350 found in #393's CI). Done in the #354 PR (#393), because it fails that PR's CI.

Why this order

  • #356 and #361 come first because they fix TaskRepository.UpdateAsync, which #352, #350 and #243 all add logic to. Landing them first means the larger changes rebase onto it once.
  • #352 has no migration and the smallest diff, so landing it first means the larger #350 rebases onto it once.
  • #350 must precede #367 (needs CompletedAt).
  • #368's completed-parent rule goes before #243, which reuses it.
  • #387 goes before #243. Otherwise #243 extends the journal's recursive mapping and isContextOnly handling to three levels, and #387 then removes much of that work.
  • #354 goes after #385 (its PR will land first) and before #368, because all of them edit task-errors.ts. #385 (in #388) also adds TASK_PARENT_STATUS_DERIVED to ApplyUpdateAsync and docs/API.md, so #354, #368 and #243 rebase onto it.
  • #384 goes before #387 (done, PR #390) because the journal reuses the Tasks page's context-header rule. This is the only dependency on the #388 work.

Cross-issue decisions (already settled)

  • The reopen past-day rule is intended and stays; its definition of "past day" becomes the completion day (#350).
  • journalDate on a Completed task with CompletedAt is rejected (#350 criterion 16).
  • "Exactly one journal day" applies to todo rows.
  • A goal can't be planned on a journal day while it has open subtasks. You plan the work, and the goal appears as context (#382, #387).
  • #243 adds no cycle check or cycle error code: at a maximum depth of 3 a cycle is always rejected by the depth or self rule first. So #354's cleanup stays valid and is not undone by #243.
  • #243 and #369 reuse #368's completed-parent rule. They run after #387, so the journal shows rows with context headers instead of recursive child rows.
主要言語
C#
スター
1
フォーク
0
平均マージ
2時間 2分
マージ済み PR(30日)
98

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

nevridge/TaskFlow のほかの issue

nevridge/TaskFlow の issue をすべて見る

似ている issue

C# の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。