Introduce the concept of task dependencies #463
Replies: 20 comments 50 replies
-
Hey @AlyMoh, thank you for your feedback. Task dependency is not possible at the moment. But it's a good idea. |
Beta Was this translation helpful? Give feedback.
-
@AlyMoh and @schemar: a description of how I manage task dependencies using Obsidian Tasks follows below. Within the note that contains them, each blocking task is assigned the
Here's a contrived-but-illustrative example:
At least once a day I review my "Update dependencies" note, which contains the following query:
I use the backlinks in the query results to open the notes that contain completed tasks with the
Although this approach does not support tasks with multiple, independent dependencies for a single task, I have found that it works well enough for my purposes, and am sharing it in the hope that it will be useful to others. |
Beta Was this translation helpful? Give feedback.
-
I'm using "project" tags to define related tasks. They're nested hashtags that start with I specify an identifier for each task (unique to the project) as a nested hashtag off of the project hashtag. Then I specify the identifiers of ancestor nodes: nodes that point to this node thusly:
The above specifies a branch and merge such that:
I place If one weee to treat, by default, each task in a project as blocking tasks further "down" the process in a given flow, a graph walk of nodes in a project should make it quite feasible to determine which tasks are available and which are not. This format currently intentionally allows for directed cyclic graphs: a process that can point back to itself. I'm not sure if that's useful but when defining it I deliberately tried to keep this option open. For acyclic graphs, the "first" node should always be the node with no inputs and just an identifier and would never be blocked. This approach does not allow for dependencies across tasks across projects. And a task is only a member of 0...1 project. Thoughts? cc @claremacrae |
Beta Was this translation helpful? Give feedback.
-
A related request: #1179 |
Beta Was this translation helpful? Give feedback.
-
Just a random thought: Maybe instead of tags, we could also use Obsidian block links for specifying task dependencies. |
Beta Was this translation helpful? Give feedback.
-
I also would like to chip in here because I do a lot of cross referencing between tasks ... and was looking into faster ways of doing this - and more visual ways in showing this. As I put tasks everywhere in my vault a consistent way of retrieving information is key. but organising tasks in a way of what to do first and what to do after would be amazing ... eg. an extensive way of linking tasks together, so a clear method of saying what i need to do next, what is dependent and cant be done (should be faded or not showing) etc. i used todoist but they are lacking start-dates ... and also not really have a way of linking dependencies together Currently I do use block-links (using the copy block link plugin for faster linking) and that "works" - but would definitely be better if it would have some integration in the Tasks plugin as a standard. Block linked tasks can be embedded - so the parent task is shown ... but this gets messy fast. also possible to cmd+hover to see dependent tasks - but there is no visual reference on first glance if the parent is done or not ... so that would be a great JS+CSS hack if that could be done (read status of parent task and place icon or other info tidbit into the current task - like a "#wait") eg great features would be:
|
Beta Was this translation helpful? Give feedback.
-
+1 for this request |
Beta Was this translation helpful? Give feedback.
-
Can I suggest a possible solution to this problem: We could have a display filter that basically says "If tasks contain a #tag, only display the first instance of that tag". If we have 5 tasks each with #paint_ceiling Then if we sort by due date, it will only display the one of the 5 with the oldest due date (if more than one it would show whichever would be displayed first in the output). Alternatively we could have a secondary tag #1 to #100 and it would only display the task with #Paint_ceiling with the lowest found number (if any) that would otherwise be displayed given other search terms. Or some variant of that. |
Beta Was this translation helpful? Give feedback.
-
To avoid disappointment by raising false hopes, I've added 'status: not planned' on this. If you really need to manage dependent tasks, I recommend finding another plugin or system. |
Beta Was this translation helpful? Give feedback.
-
See also #572 - which is being closed as a duplicate of this. |
Beta Was this translation helpful? Give feedback.
-
Removed the 'not-planned' label - as this is starting to be thought about... |
Beta Was this translation helpful? Give feedback.
-
Hello. Thanks for the stimulating discussion. I have four thoughts to contribute:
|
Beta Was this translation helpful? Give feedback.
-
Dear folks who are interested in having task dependencies in the Tasks plugin... Suppose that in some brave new world, tasks can now have:
For example, you might have a set of tasks like this:
Or this set, where there is a circular dependency.
Now imagine you are writing a Tasks query block, and you want to use the dependency information above. What kinds of filters would you like to have, and why? And how do you want those filters to behave? Consider cases like where one task depends on several others. What if some of the child tasks were completed, and some not? And what if task 1 depended on 2 which depended on 3 which depended on 4.... And 2 and 3 were DONE, but 4 was not. How should searches work then? Thanks in advance. |
Beta Was this translation helpful? Give feedback.
-
I don't ever mark tasks as completed I just delete them or defer them. So the other question is what happens when one is deleted. I think the key is to keep it as simple as possible. Completions and deletions (and manual changes to the ID number) do absolutely nothing to any other tasks - anything else has potential to be extraordinarily confusing and unstable. Consider the purpose of the whole thing. In my view the main purpose of dependency is to NOT_SHOW dependent tasks unless the main task is shown. In that model it could be many to many or one to one or other combinations. Many to many seems best (tasks could be subordinate to many main tasks and visa versa). If that is the purpose and the model then there would be only one filter: "Only show dependent tasks if the any|all master classes are shown (based on whatever other rules are set)" Then I wouldn't worry about grand grand grand children - if the user wants to set up such a complex arrangement that is up to them Why not leverage existing tag system for this #floorlaid #iffloorlaid or something like that |
Beta Was this translation helpful? Give feedback.
-
What we have here in essence is two radically different meanings of dependency a) Don't show any tasks about painting the walls (choosing colors, buying paint) until the roof building tasks (lay beams, fit tiles) are "finished" b) Don't show any tasks about painting the walls until the painting wall master task is somehow started (or is visible) (a) doesn't work for me because I have no concept of "finished". And even if I did use task completions how would that work? The roof building task would not be finished until ALL the various roof building tasks were finished. There would not be a "Roof is built" task because that is not a task at all, it is a goal which is dependent on the roofing tasks. |
Beta Was this translation helpful? Give feedback.
-
Thanks for the comments here folks. Just to set expectations, it's clear to me that no single implementation of dependencies is going to satisfy everybody here. By aiming for perfection and trying to satisfy everyone, we will never release anything... So I will release when I am happy that we can satisfy at least some user needs. |
Beta Was this translation helpful? Give feedback.
-
First of all, thank you for your efforts in this plugin, this is a really great tool! I've read all the discussion and i just want to add something. For example, if you have a paper and a pencil, there is no way you will add "ID::123 depsOnSF::124" to you notes. You will naturally build a list with some tabulation on each element just to build an hierarchy. You won't explicitly write an hierarchy type (which one if higher and what does that mean), because you will know that does that mean in your personal sheet of paper. I believe, you will fulfil 90% people needs with simple walking on naturally built list. All other stuff they will do with tags or js code. I suggest that API for convenient navagation on tasks: Task.next(): Task? (sorry, I don't know js or ts, so next() is a function on Task object, that returns another Task or null) So for a simple and natural tasks list:
Task1.next() == null Task2.next() == Task5 and so on |
Beta Was this translation helpful? Give feedback.
-
Kind of in response to the background of the last comment -- can I make another alternative suggestion. If several tasks exist in a note, then if the search is one filtered by dependency - show only the first task in any note (or under any individual header). |
Beta Was this translation helpful? Give feedback.
-
Just to say that I'm locking the discussion here for now. It is not feasible for me to keep up with and analyse the volume of comments at this rate, and as such, I don't want people to spend their time crafting replies that we will not use - and that risk becoming a bit personal. |
Beta Was this translation helpful? Give feedback.
-
The first release of Tasks Dependencies is now out: Enjoy.... |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi all. First of all, I'd like to thank everyone who has contributed to this great plugin. It's allowing me to use Obsidian as a jack-of-all-trades for many tasks including organization and task planning!
I'm also an avid user of Taskwarrior, and one of its incredibly neat features is setting dependencies for tasks.
This allows for the following:
I couldn't find any equivalent discussions on the same features. If there happens to be one, I apologize for the duplicate discussion thread. Otherwise, I'd like to hear your thoughts on this idea and whether it'd be something worth considering in a pull request.
Thank you all and have a nice day! :)
Beta Was this translation helpful? Give feedback.
All reactions