Due ... after completion. What’s going on?


#1

I couldn’t see a prior discussion on this here, so sorry if there is and I’m just repeating.

When I set a task in OmniFocus that need to repeat after it is completed I set it to repeat after the item’s completion.

I.e I neeed to take meds at 3:30pm and then again 6hours later. When I set the task I set the repeat to be 6hours after completion.

However, when it does happen and I complete the task the next ones due time is 9:00pm not 9:30pm as I would expect.

Am I missing something here?


#2

At what time did you complete the task?


#3

I completed it at 3:36pm. Which is why I would expect the next one to be due at 9:36pm


#4

OmniFocus repeats use their repeat interval unit when calculating their next instance, and drop the smaller portions of the date/time. This is so that (for example) your average daily repeat doesn’t drift if you complete it at a different time of day.

The solution for the case where minutes are important was to create a repeat using an interval specified in minutes, but this currently isn’t possible using the UI in OmniFocus 3. We’ve got a bug report open on bringing that option back and I’ll add this example to it.

It also seems to me like even with a repeat interval in hours, we could take your original due time of 3:30 into account when calculating the next due time—I’ll file that for investigation as well.

One more thing: Even though the OmniFocus UI doesn’t support minutes as a repeat unit, you can paste in taskpaper text with a repeat rule defined that way and the rule will be respected, even though it might not appear correctly in the UI. In your case you’d want to create your item with @repeat-rule(FREQ=MINUTELY;INTERVAL=360). More info on taskpaper can be found here in discourse, and there’s a reference document here: https://support.omnigroup.com/omnifocus-taskpaper-reference/.


#5

Thanks for your reply.


#6

However, when it does happen and I complete the task the next ones due time is 9:00pm not 9:30pm as I would expect.

Hmm. I would also expect the :30 minutes to be preserved as Dave mentions and I wasn’t able to reproduce this in my own initial testing.

Would you be willing to post the TaskPaper representation of both the completed and next occurrence for your repeating task for additional testing? Feel free to modify the title/note since I’d like to look at assigned dates and repeat data specifically.

To grab the TaskPaper representation, you can show “all” in view options (in projects or inbox depending upon where the item lives), select the completed and pending item, and then in the Edit menu choose “Copy as TaskPaper”.

Thanks for helping us track this down!


#7

Here is the completed task:

- Meds @parallel(true) @autodone(false) @due(2018-11-15 10:45) @defer(2018-11-15 10:35) @repeat-method(due-after-completion) @repeat-rule(FREQ=HOURLY;INTERVAL=6) @done(2018-11-15 11:35)

And here is the task repeated as a result of completing the previous one:

- Meds @parallel(true) @autodone(false) @due(2018-11-15 17:45) @defer(2018-11-15 17:35) @repeat-method(due-after-completion) @repeat-rule(FREQ=HOURLY;INTERVAL=6)

As you can see i completed the first one at 11:35 however, the repeated task will occur at 17:45. This of course isn’t 6 hours after completion of the first one.

Is it repeating 6 hours after original due time rather than 6 hours after the completion of the first one?


#8

Thanks for posting the TaskPaper representation here and your use case! You’re bumping up against the design for the “calculate from item’s completion” type repeats which Dave mentions:

OmniFocus repeats use their repeat interval unit when calculating their next instance, and drop the smaller portions of the date/time. This is so that (for example) your average daily repeat doesn’t drift if you complete it at a different time of day.

In case it helps, I tend to think of this as preserving the original values for the less significant date values in order to avoid drift (e.g. hourly preserves the previous minutes value, etc). This is why you get the 45th minute 6 hours after complete. While quite helpful for longer frequencies, I can see why this is confusing for hourly repeats. Likely others are capitalizing on this for their workflows.

Test builds of OmniFocus 3.2 for Mac restore configuring minute-based repeats or you can use Dave’s workaround if you’d like to wait for the final release of that. I think that will work best for this type of repeating item.