The structure of Org files—hierarchy and lists—makes it easy to
define TODO dependencies. Usually, a parent TODO task should not be
marked DONE until all TODO subtasks, or children tasks, are marked as
DONE. Sometimes there is a logical sequence to (sub)tasks, so that
one subtask cannot be acted upon before all siblings above it have
been marked DONE. If you customize the variable
org-enforce-todo-dependencies, Org blocks entries from changing
state to DONE while they have TODO children that are not DONE.
Furthermore, if an entry has a property ‘ORDERED’, each of its TODO
children is blocked until all earlier siblings are marked DONE. Here
is an example:
* TODO Blocked until (two) is done ** DONE one ** TODO two * Parent :PROPERTIES: :ORDERED: t :END: ** TODO a ** TODO b, needs to wait for (a) ** TODO c, needs to wait for (a) and (b)
You can ensure an entry is never blocked by using the ‘NOBLOCKING’ property (see Properties and Columns):
* This entry is never blocked :PROPERTIES: :NOBLOCKING: t :END:
Toggle the ‘ORDERED’ property of the current entry. A property
is used for this behavior because this should be local to the
current entry, not inherited from entries above like a tag (see
Tags). However, if you would like to track the value of this
property with a tag for better visibility, customize the variable
Change TODO state, regardless of any state blocking.
If you set the variable
org-agenda-dim-blocked-tasks, TODO entries
that cannot be marked DONE because of unmarked children are shown in a
dimmed font or even made invisible in agenda views (see Agenda Views).
You can also block changes of TODO states by using checkboxes (see
Checkboxes). If you set the variable
org-enforce-todo-checkbox-dependencies, an entry that has unchecked
checkboxes is blocked from switching to DONE.
If you need more complex dependency structures, for example dependencies between entries in different trees or files, check out the contributed module ‘org-depend.el’.