Problem
Tasks whose due date keeps slipping are invisible: the due chip just changes color. Nothing helps the user decide what to do with a task they keep avoiding.
Definition
A task becomes a dragged task when its due date has been changed at least N times (default 3, configurable in Settings) without the task being completed in between. Dragged tasks get a distinct visual flag and, from the task modal, quick actions to unblock them.
Scope
In scope:
- Detection: count 'due' activity events (activity_events already stores {from, to} per change) since the last completion ('moved' to hecho) or creation.
- Visual flag: distinct indicator on the card and in the task modal (not the current due color, something unmistakable).
- Quick actions in the task modal: (1) reschedule deliberately via the existing NLP due input, (2) split into subtasks (existing subtask list), (3) mark as 'will do today' (sets due_date to today, resets the slip counter baseline).
- Threshold configurable in Settings (1-10, default 3); opt-out possible (0 = disabled).
Out of scope:
- Focus/pomodoro mode (separate feature, see the gamification track).
- Automatic rescheduling or any change without explicit user action.
- Nagging: no banners, no periodic reminders. The flag appears only on the affected task.
Technical notes
- Data source: activity_events (type 'due'), no schema change needed for detection; a settings key for the threshold.
- Similar statistics approach as the adaptive recurrence feature (real intervals from history).
- Server computes the slip count (cheap COUNT query); bootstrap/task detail expose it.
- i18n es/en required.
Acceptance criteria
- A task with 3 due changes and no completion is flagged; completing it clears the flag.
- Threshold change in Settings applies immediately.
- With the feature set to 0 nothing is flagged.
- Existing suite green + new server tests for the counter.
Problem
Tasks whose due date keeps slipping are invisible: the due chip just changes color. Nothing helps the user decide what to do with a task they keep avoiding.
Definition
A task becomes a dragged task when its due date has been changed at least N times (default 3, configurable in Settings) without the task being completed in between. Dragged tasks get a distinct visual flag and, from the task modal, quick actions to unblock them.
Scope
In scope:
Out of scope:
Technical notes
Acceptance criteria