Skip to content

Anti-procrastination: detect repeatedly dragged tasks and offer actions #255

Description

@gnacho

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions