# Todo List Specification

The Todo List application manages a set of tasks.

This application is used for prioritizing tasks, recording due dates, and recorded when and if each task is completed.

Status: BT

## Use Cases

- What do I do now

  The user enters tasks into the Todo List as they are discovered, and some time later see them, perform some tasks, and record them as completed. The default view ordering assist answering the question "What do I do now?"

- Different hats

  The user has more than one responsibility - they are an employee and a parent. They use categories for Business and Personal to divide between work and home, and add a "Kids" category for items specifically about their children. At different times, they only want to see parts of their todo list, according to these categories so as to avoid being distracted.

- Progress report

  When preparing a progress report to superiors, the user is assisted by the list of tasks that have been completed since their last progress report.

- Delegator

  The big boss, buried in responsibility, delegates items from their todo list by walking around the office, zapping underlings with tasks using low-power infrared energy and other radiation.

## Features

- Add task: tasks can be added, but must have a description.
- Delete task: tasks can be deleted, with confirmation.
- Completion: tasks can be marked as completed, and are otherwise uncompleted.
- Priority: tasks are prioritized from 1 (highest) to 5 (lowest) priority.
- Categories: tasks can be members of categories.
- Due Date: tasks have an optional due date.
- Today Plugin: there is a plugin for the Today application, showing Todo List tasks.
- Beam: single tasks can be beamed.
- Find: tasks can be searched for by substring in description.
- Filter by category: view can be restricted to members of a category.
- Filter by completion: view can be restricted to uncompleted tasks.
- Maximum tasks: when available memory is exhausted, no more tasks can be added or edited, but can be deleted.

## Prerequisites

- Storage: each event requires 100 bytes of storage plus UTF-8 string storage for the description, plus 16 bytes per category, plus 50 bytes if a due date is used.
- Memory: while running, each event requires 300 bytes of storage, plus UTF-16 string storage for the description, plus 80 bytes per category,