taskdn 0.1.0

Rust library for parsing, querying, and manipulating Taskdn task files
Documentation
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.0] - 2025-12-12

### Added

#### Core Parsing

- Parse markdown files with YAML frontmatter into typed entities (`Task`, `Project`, `Area`)
- Support for all Taskdn specification fields including timestamps, references, and custom fields
- Round-trip preservation of unknown frontmatter fields
- `DateTimeValue` type that preserves original format (date-only vs datetime)
- `FileReference` type supporting WikiLinks (`[[Page]]`), relative paths, and filenames

#### Entity Types

- `Task` with statuses: Inbox, Ready, InProgress, Blocked, Done, Dropped
- `Project` with statuses: Planning, Ready, Blocked, InProgress, Paused, Done
- `Area` with statuses: Active, Archived
- Builder types for creating entities: `NewTask`, `NewProject`, `NewArea`
- Update types for partial modifications: `TaskUpdates`, `ProjectUpdates`, `AreaUpdates`

#### Querying

- `TaskFilter` with filtering by status, project, area, due dates, scheduled dates, defer dates
- `ProjectFilter` with filtering by status and area
- `AreaFilter` with filtering by status
- Preset filters: `inbox()`, `today()`, `overdue()`, `upcoming()`, `available()`, `active()`
- Archive directory inclusion/exclusion

#### CRUD Operations

- Create tasks, projects, and areas with automatic timestamp generation
- Update entities with partial changes
- Delete entities
- Archive/unarchive tasks (move to/from archive subdirectory)
- Convenience methods: `complete_task()`, `drop_task()`, `start_task()`, `block_task()`
- Batch operations with `BatchResult` for tracking successes and failures

#### Cross-Entity Queries

- `get_tasks_for_project()` - Find all tasks belonging to a project
- `get_projects_for_area()` - Find all projects in an area
- `get_tasks_for_area()` - Find all tasks in an area (direct and via projects)

#### Validation

- Spec compliance validation for parsed entities
- `ValidationWarning` types for advisory issues (multiple projects, missing completed-at)
- `validate_task()` and `validate_all_tasks()` methods

#### File Watching

- `process_file_change()` for converting file system events to typed `VaultEvent`s
- `VaultEvent` enum with Created/Updated/Deleted variants for each entity type
- `watched_paths()` to get directories that should be monitored
- Built-in `FileWatcher` with debouncing (requires `watch` feature)

#### Performance

- Parallel file scanning using `rayon` for vault-wide operations
- Benchmarks validating performance targets:
  - Single file parse: ~8µs (target: <1ms)
  - In-memory filter (1000 tasks): ~27µs (target: <5ms)
  - Vault scan (1000 files): ~10ms (extrapolates to ~50ms for 5000 files; target: 200-500ms)

### Technical Details

- Uses `thiserror` for structured error types
- Uses `gray_matter` for frontmatter parsing
- Uses `chrono` for date/time handling
- Uses `serde_yaml` for YAML serialization
- Strict clippy lints enabled (pedantic + `unwrap_used`/`expect_used` warnings)
- No panics in library code - all errors returned as `Result`
- 270+ unit tests and 14 integration tests