# Backlog A simple human-readable line-based task system. [![Build Status](https://github.com/pyjarrett/backlog/actions/workflows/ci.yml/badge.svg)](https://github.com/pyjarrett/backlog/actions) ## Motivation To have local task lists with auto-sorting by metadata. The default file operated on is `todo.backlog`. ## File format A backlog task list: * has one task per line * can be arbitrarily ordered without altering its meaning * all tasks either have a unique id, or no id * all tasks have a status, either open, cut or done The general format for a line is: ` ` ### Special elements These elements have special meaning: * `[x]` - Done (when at the start of a line) * `[!]` - Cut (when at the start of a line) * `#[1-9][0-9]*` an id for a task * `@` - Reserve for task options (when at the start of a line) ### Metadata Metadata on a line is given by a key name, followed by a colon, followed by a data element or comma separated list with no whitespace between elements. Any element which doesn't match a metadata key:value pair is part of the task description. General Format: `metadata_tag:elem1,elem2` ### Metadata examples ``` tags:abc,def,ghi Tags deps:#123,#456,#6 Dependencies on other tasks ``` ### Other metadata types ``` risk:[1-9] Risk pri:[1-9] Priority est:[1-9][0-9]* Task estimate in minutes ``` ### Date extensions These are being reconsidered along with the parser option flag `@` to improve customization support. ``` start:yyyy.MM.dd@HH.mm Start time due:yyyy.MM.dd Due date complete:yyyy.MM.dd Completion date elapsed:[1-9][0-9]* Elapsed minutes on the task ``` ## Usage ### Print tasks, sorted by priority ``` backlog ``` ### Adding a task ``` backlog add "Some high priority task I want to do pri:1" ``` ### Marking a specific task id as done ``` backlog finish 20 ``` ### Cleanup task list ordering for easier tracking in git This makes a great candidate for a precommit hook if you're storing a `todo.backlog` in your git repo. ``` backlog clean ```