I rely quite heavily on defer dates applied either to whole projects or “side headings” within a project outline to hide child tasks from my “available” perspectives if I’m not able to work on them currently. This works well enough but does create clutter in the Forecast perspective as these defer dates recede into the past (it seems to me that a Forecast view should only show future-deferred items).
I adapted an AppleScript lifted from somewhere on these forums (I’m very sorry I can’t credit the original contributor) that I run daily from Keyboard Maestro to set the defer date of uncompleted, non-repeating tasks with a defer date < today to missing and this works really well for me, but it strikes me this would be useful built-in functionality?
As I say can’t claim any credit as this is adapted from someone else’s work on the forum but this works nicely for me (as mentioned, triggered daily by a Keyboard Maestro script):
set dateNow to (current date)
tell dateNow
set its hours to 0
set its minutes to 0
end tell
tell application "OmniFocus"
tell front document
-- if a task's defer date is before today, clear it
set defer date of (every flattened task whose (defer date < dateNow) and (completed = false) and (repetition = missing value)) to missing value
end tell
end tell