Skip to content

Latest commit

 

History

History
58 lines (47 loc) · 1.99 KB

File metadata and controls

58 lines (47 loc) · 1.99 KB

Changelog

Format based on Keep a Changelog.

[0.1.0] - 2024-12-04

Added

Parse API:

  • loads() - Parse markdown string
  • load() - Parse file, follows [text](file.md) links
  • TaskStore.check() - Raise on warnings
  • Frontmatter - File-level metadata (timezone, locale) via YAML front matter

Mutation API:

  • update() - Update single task in-memory
  • batch_update() - Update multiple tasks
  • write_updates() - Write changes to files
  • REMOVE sentinel for field removal
  • Helper functions: add_tags, remove_tags, add_assignees, remove_assignees

Task Features:

  • States: open, done, cancelled, blocked
  • Metadata: projects, tags, assignees, priority, duration
  • Dates: due, created, started, done, planned, paused
  • Custom fields via key:value syntax
  • Subtask support via indentation

Recurrence:

  • Simple patterns: daily, weekly, monthly, yearly
  • Multiplied patterns: 2weeks, 3days, 2d, 3w
  • Day of month: 15th, 1st, 31st (clamps to month end)
  • Nth weekday: 2nd-tuesday, last-friday, 1st-monday
  • Natural language: "every other week" (via recurrent library)
  • Auto-creates next occurrence when recurring task marked done

Inheritance:

  • Heading inheritance (projects, tags, assignees, custom fields)
  • Subtask inheritance from parent tasks

Types:

  • Task - Dict-like with attribute access
  • TaskStore - Iterable with warnings and frontmatter
  • TaskChanges - Changes for mutation
  • Frontmatter - File-level metadata
  • UpdateResult, BatchUpdateResult, WriteResult
  • StateMachine, StateTransition - Customizable state transitions
  • TaskState, UpdateStatus - Enums for states and update results

Technical

  • Lark parser (Earley algorithm)
  • Pendulum for timezone-aware date handling
  • Recurrent for natural language recurrence parsing
  • Explicit state machine with O(1) transition lookup
  • 80% test coverage threshold
  • Golden tests for parse and mutate
  • Python 3.11+ required