Вопрос или проблема
У меня проблемы с пониманием, как управлять повторяющимися задачами в taskwarrior
Я начинаю с пустой базы данных:
$ task
[task next]
No matches.
Я добавляю ежедневную повторяющуюся задачу:
$ task add recur:daily due:later test
Она появляется в отчете:
$ task
[task next]
ID Age Recur Due Description Urg
2 - P1D 19.2y test 2.4
1 task
Creating recurring task instance 'test'
Если я отмечаю ее как выполненную таким образом:
$ task 2 done
Completed task 2 'test'.
Completed 1 task.
$ task
[task next]
No matches.
она исчезает из отчета. Я считаю, что это имеет смысл, так как “я выполнил ежедневную задачу сегодня”.
Проблема в том, что она больше никогда не появляется на следующий день и позже. Что я делаю не так?
Я разобрался с повторяющимися задачами и понял это:
Некоторая предыстория: создание повторяющихся задач создает родительскую
задачу, которая порождает дочерние
задачи.
из: https://taskwarrior.org/docs/recurrence/
после некоторых экспериментов я обнаружил, что с этой командой:
(ins)[>]task add "test" recur:5s due:30s
Created task 27 (recurrence template).
Во-первых, срок
влияет на первую дочернюю задачу. Каждая дочерняя задача, созданная после срока (30 секунд в моем примере), затем выполняется в время повторения (5 секунд в примере)
(ins)[>]task
[task next]
ID Age Deps P Project Recur Due Description
22 - PT5S 30s test
#спустя некоторое время...
(ins)[>]task
[task next]
ID Age Deps P Project Recur Due Description
22 60s PT5S -30s test
23 30s PT5S -25s test
24 25s PT5S -20s test
25 20s PT5S -15s test
26 15s PT5S -10s test
27 10s PT5S -5s test
28 5s PT5S - test
29 0s PT5S 5s test
Однако срок
также влияет на еще одно: когда будет создана вторая дочерняя задача (вторая дочерняя задача создается в время повторения, так что третья дочерняя задача создается после времени повторения и так далее).
Поэтому вы не видите вашу вторую дочернюю задачу, так как вы установили срок позже
, что составляет 19,2 года
в будущем в вашем примере; вторая дочерняя задача будет создана только через 19,2 года
позже (после чего каждая дочерняя задача будет создаваться ежедневно
).
Я ранее отвечал на тот же вопрос на unix & linux. Повторяю ответ здесь, для записи.
Прежде чем углубиться в детали работы, отметим, что повторение не хорошо продумано. Что я привожу — это эмпирические наблюдения, которые могут измениться при переработке.
Кратко; Как использовать и понимать повторение
task add recur:<продолжительность> due:<дата выполнения первой задачи> until:<удалить первую задачу до даты> wait:<дата появления задачи> "моя задача"
Пример:
task add recur:daily due:9:00 until:12:00 wait:5:00 eat breakfast
- Позавтракать в 9:00 утра
- Скрыть задачу до 5:00 утра
- Удалить задачу ко времени обеда
- Создавать новую задачу каждый день
Детали
Повторение требует атрибута due
(применяется с проверкой на валидность).
Повторение также может использовать атрибуты until
и wait
, если они существуют.
Повторение не использует scheduled
.
И есть атрибут mask
, который отслеживает, какая это повторяющаяся задача.
Когда создается новая повторяющаяся задача:
новая задача завершена
=родитель завершен
+повторение
*маска
- Та же математика для
до
иожидание
расписание
копируется целиком из родительской задачи. На практике это неожиданное поведение не нарушает ваш рабочий процесс, лишь влияет на фильтры и искажает срочность. Я упоминаю это, потому что мне потребовалось много времени, чтобы выявить, что это не работает должным образом.
Каждый раз, когда taskwarrior
запускается, он проверяет, пора ли создавать следующую задачу. Псевдо-уравнение:
сейчас >= завершено + повторение * (маска + 1)`
Обратите внимание, что есть конфигурационное значение rc.recurrence.limit
, которое можно использовать, чтобы указать taskwarrior создавать еще больше задач вперед.
Ожидайте, что следующая задача будет создана в дату завершения предыдущей.
Ответ или решение
Управление повторяющимися задачами в Taskwarrior может показаться сложным для новых пользователей этой системы, но при должном подходе и понимании принципов его функционирования эти задачи можно по-настоящему автоматизировать и упростить. Разберем детально, как корректно настраивать и управлять повторяющимися задачами в Taskwarrior.
Теория
Taskwarrior поддерживает повторяющиеся задачи с помощью специальных атрибутов, таких как recur
, due
, wait
и until
. Однако, задача может оказаться затруднительной для понимания из-за сложной логики создания «родительских» и «дочерних» задач.
- recur: указывает периодичность выполнения задачи, например,
daily
,weekly
и т.д. - due: определяет срок выполнения первой возложенной задачи.
- until: указывает, до какой даты повторяется задача.
- wait: обозначает, с какого момента задача становится видимой в списке задач.
В Taskwarrior каждая повторяющаяся задача состоит из модели: создается «родительская» задача-шаблон, которая не отображается, за исключением если специально не использовать фильтры, а затем автоматической генерации ее «дочерних» экземпляров.
Пример
Предположим, у вас есть задача «дневной отчет», которую нужно выполнять каждый день до 18:00. Вы хотите, чтобы она показывалась только после 9:00 и её автоматическое создание прекращалось через месяц. Запись такой задачи в Taskwarrior выглядит следующим образом:
task add "дневной отчет" recur:daily due:18:00 until:2023-12-31 wait:9:00
В этом примере:
- Задача повторяется ежедневно (
recur:daily
). - Срок выполнения каждой задачи – 18:00 (
due:18:00
). - Задача не будет показываться до 9:00 каждого дня (
wait:9:00
). - Повторение прекратится в конце года (
until:2023-12-31
).
Применение
Теперь, когда мы понимаем, как создаются и управляются задачи в Taskwarrior, давайте разберем частые ошибки, такие как те, с которыми вы столкнулись, например, задачи, исчезнувшие после выполнения, и не повторяющиеся вновь на следующий день.
Общие ошибки и их исправление:
-
Неправильное указание атрибута due: как видно из вашего примера, проблема возникла из-за использования
due:later
, который интерпретировался системой как дата через 19.2 года. Это означает, что следующая подзадача должна была бы быть создана только через 19.2 года. Вы должны всегда указывать конкретное время выполнения, которое реально соответствует вашим ожиданиям. -
Путаница в понимании создания «дочерних» задач: узнайте, что
due
определяет не только крайний срок выполнения задачи, но и время, когда будет создана следующая задача. Это важно для корректного планирования рутинных задач. -
Отсутствие атрибута until при необходимости остановить повторение через определенное время: его стоит использовать, если не требуется, чтобы задачи генерировались бесконечно.
Практические рекомендации:
-
Планируйте на несколько дней вперед: с помощью
rc.recurrence.limit
можно управлять количеством заранее создаваемых задач. Это поможет лучше отслеживать объем работы на будущие дни. -
Регулярно обновляйте задачи: При разработке нового шаблона задачи, делайте на практике проверку на малых временных интервалах. Это позволит убедиться в корректности настроек и избежать ошибок в длиннопериодных задачах.
-
Используйте специальные фильтры и алиасы: созданные вами фильтры и алиасы могут сильно упростить идентификацию проблем и работу с задачами. Например, создайте алиас для быстрого просмотра повторяющихся задач.
Заключение
Понимание того, как Taskwarrior управляет повторяющимися задачами, позволяет более эффективно использовать этот мощный инструмент. Важно каждый раз тщательно проверять настройки при добавлении новой повторяющейся задачи, чтобы избежать неожиданных проблем. Благодаря гибкости Taskwarrior, адекватная настройка системы управления задачами может значительно повысить вашу продуктивность и упростить выполнение рутинных задач.