13 - Task Notes

Goals

Create a special note type for tasks.

Context

Task management is a popular use case with Dendron. Many users currently use scratch note (Private) for tasks.

While it can work, tasks have a lot of additional considerations like priority, ownership and due date that are hard to track in a consistent way using simple scratch notes.

A common pattern for task is using the [ ] syntax to track completion

- [ ] todo1

This works less well once the task becomes a scratch note that is present in multiple places


<!-- weekly.journal.2021.01 --->
- [ ] [[todo1|scratch.journal.2021.01.01.todo1]]
...

<!-- daily.journal.2021.01.01 --->
- [ ] [[todo1|scratch.journal.2021.01.01.todo1]]
...

As a user, I now have to remember to check this task off in multiple places.

Proposal

To address previously mentioned issues, we introduce the concept of a Task Note. This is a new special note (Private) that is meant to make it easier to manage tasks in Dendron.

This RFC aims to implement the following functionality:

  • specify how to create and customize task notes
  • specify how to change the status of task notes
  • specify how to display task notes
  • specify how to create different views for task notes

Details

Creating a task note

Task notes will be added to Dendron as a lookup modifier (Private) with the following default shortcuts:

  • CMD+SHIFT+T (mac)
  • CTRL+SHIFT+T (windows and linux)
  • NOTE: this conflicts with the built in shortcut to reopen a closed window

By default, task notes will be created as a child of the current note. For example, if the current note was proj.build-a-cabin, creating a task note would result in proj.buid-a-cabin.task.{desc} being created where {desc} is the human readable description of said note.

Customizing a task note

Task notes have the same configuration as Dendron's other special notes (Private).

notes.owner.hierarchy

  • default: people

The hierarchy for task owners.

Properties

A task note has the following optional properties that can be set in the frontmatter

completed: boolean
due: date
owner: string
priority: L|M|H
tags: [tag1, tag2]
status: wip

completed

Indicates whether the project is complete

due

Date indicating when the task is due

owner

The individual responsible for the task

priority

The priority of the given task

status

The current status of the task. This should be customizable. The default list can be a simplified version of what we have in the handbook

tags

Tags for the given task

Log

Every time the status changes, it is updated in the log

Display

When a task is completed, Dendron will create the following rendering

<!-- raw markdown -->
- [[proj.build-a-cabin]]

<!-- rendered markdown in editor and preview-->
- [x] [[proj.build-a-cabin]]  

Note that in the editor, the [x] will be rendered as a Text Decorator which means it won't be part of the document but only appear as a visual indicator.

Using the same technique, Dendron can show the rest of the task properties using the text decorator trick.

completed: false
status: a
due: friday
owner: kevin
priority: H
tags: [backend]
- [ ] [[proj.build-a-cabin]] due:friday @kevin prio:H #backend

How a text note link is rendered can be configured using notes.task.render (Private) property.

Configuration

notes.task.render

  • default: `- [{note.completed}][{note.fname}] {% if due %} {% endif %}

{% if posts.length %} {% else %} No project posts yet! {% endif %}

Example

  1. Jonny is in his daily journal, user.jonny.journal.2021.10.08
    ## Tasks
    - buy milk 
    
  2. Jonny runs Dendron: Create Task when highlighting buy milk
    • this runs lookup with the new todo modifier checked
    • creates and opens user.jonny.journal.2021.10.08.todo while creating a wikilink in the original daily journal
      ---
      title: buy milk
      completed: false
      due: null
      owner: jonny
      status: a
      priority: M
      tags: []
      ---
      
  3. TBD

Tradeoffs

Discussion

Please see the discussions page to add any thoughts or suggestions.

PRs

  • Summary

    2021.10.27

    1. Can we have links to docs for this?
    2. If I type a character and then paste the link to a task note, it looks like that character is merged with the generated doc? https://www.loom.com/share/75751a0b7efd4d09ba59c7888b63fa2c
    3. Can we also create an explicit command to make this easier to discover? (eg. Dendron: Task Create)? When the user chooses this option, it should bring up lookup with selection2link and task note modifiers activated
    4. For status, can we default to show the one letter abbreviation with a [ ] around it? its visually easier to parse. see examples below:
      • short abbreviation
      - [x] [[task1]]
      - [a] [[task2]]
      - [b] [[task3]]
      - [.] [[task4]]
      - [y] [[task5]]
      
      • current
      - work in progress [[task1]]
      - done [[task2]]
      - blocked [[task3]]
      - done [[task4]]
      - blocked [[task5]]
      
    5. In a separate PR - since we are making lots of use of the frontmatter folding, can we switch this so that the default is to not fold?

    response

    I changed the default configuration so that the task notes are creates as the child of the current note. One thing I left different was leaving the default name task. There are a few options here, and I'm not sure which one to go with:

    1. Leave the default name `task`, and leave the timestamp off. This is the current setup, and leads to the default quickpick name of `current.task`.
    
    2. Leave default name empty, and leave the timestamp off. This would lead to the default name being exactly the same as the note name.
    
    3. Leave the default name empty, but set a timestamp. This would lead to the default name being `current.2021.10.27.123123`.
    

    My concern is that the second option is very confusing, if the user selects "create task" then the quickpick value is identical with the current note name. If the user hits enter without typing anything, then nothing will happen since it opens the same note.

    The reason why I went with the first option for now is that it at least allows the user to create a task note for the first time even if they immediately hit enter. This still can be confusing though, because we don't actually want the user to create a current.task note and we want them to type current.something.

    I am personally in favor of having the third as the option, because it will always create a task note without having to type anything. Perhaps an alternative could be to have an adaptive approach where it defaults to a timestamp if nothing is selected, and does selection2link if something is selected.

    Note: I see the tests are failing because I missed updating a snapshot, I'll update it after some discussion on this PR as to what option to go with.

    Can we have the 1st option but do {current}.task.? This implies that the user should add a task. I just realized that we don't stop the user from creating {current}.task. as a note, we should also do a separate PR to prevent this from happening.


Children
  1. Kevin Pr Comments

Backlinks