3.5 KiB
3.5 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Core Design Principles
- Principle of Least Surprise: All UI behaviors should be predictable and intuitive
- Dead Simple: Complexity in storage, simplicity in interaction
- Progressive Disclosure: Basic operations stay simple, advanced features are optional
- Backward Compatible: Existing commands work unchanged on Default list
Development Commands
- Build project:
cargo build - Build release:
cargo build --release - Run locally:
cargo run -- <subcommand> <args>(e.g.,cargo run -- add "test item") - Run tests:
cargo test - Check code:
cargo check - Format code:
cargo fmt - Lint code:
cargo clippy - Install from source:
cargo build --release && cp target/release/ldr ~/.local/bin/
Project Architecture
LDR is a Rust CLI productivity application implementing the "append-and-review" note system with Markdown format and subtask support. The architecture follows a clean separation of concerns:
Core Structure
- main.rs: Entry point with CLI definition using
clap. Handles XDG-compliant data directory setup (~/.local/share/ldr/) and automatic migration from plain text to Markdown format - commands.rs: Command implementations with terminal I/O, file operations, and colored output using
termion. Handles subtask operations and task reference parsing (1, 2a, 3b format) - markdown.rs: Core data structures and parsing/generation for Markdown todo files. Supports single-level nesting (tasks with subtasks) and multiple named lists
- migration.rs: One-time migration utilities for converting plain text files to Markdown format with Default list structure
- content.rs: Legacy compatibility functions maintained for existing tests
- input.rs: Raw keyboard input handling for interactive review mode (currently simplified)
File Format
- todos.md: Markdown file with multiple lists (Default list is primary)
- archive.md: Markdown archive with date-based sections and list organization
- Migration: Automatic one-time conversion from
note.txt/archive.txtto Markdown format
Task System
- Task References: Number+letter format (1, 2a, 3b) for referencing tasks and subtasks
- Single-Level Nesting: Tasks can have subtasks, but subtasks cannot have sub-subtasks
- Default List: Primary list for backward compatibility - all existing commands work on Default
- Multiple Lists: Support for named lists (Work, Personal, etc.) with
--listflag
Key Design Patterns
- Markdown Storage: Human-readable format with proper structure
- Flat Numbering: Simple number+letter system for task references
- Backward Compatibility: Existing interface unchanged, new features are additive
- XDG Compliance: Uses
xdgcrate for proper data directory handling - Migration on First Run: Seamless upgrade from old format with backups
Data Flow
- CLI parsing extracts subcommands and arguments
- Migration check and execution if needed (first run only)
- XDG directories resolved for Markdown files (
todos.md,archive.md) - Commands parse task references and delegate to Markdown operations
- File I/O operations handle Markdown parsing/generation
- Terminal output provides user feedback with colors and proper formatting
Task Reference System
- 1: Task 1 and all its subtasks
- 1a: Only subtask 'a' of task 1
- 2b: Only subtask 'b' of task 2
- Operations default to whole tasks, subtask references are specific