- Add estimatedHours field to Task type for time tracking/invoicing
- Parse estimated_hours (snake_case) and estimatedHours (camelCase) from frontmatter
- Serialize to snake_case format
- Add --hours flag to CLI create/edit commands
- Add estimatedHours to MCP schema and handlers
- Display estimated hours in TaskCard with clock icon
- Add editable estimatedHours input in TaskDetailsModal
- Fix aggregator showing duplicate projects with different colors
(now deduplicates by project name)
- Add comprehensive test suite for estimatedHours feature
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The updateTaskField, addUpdatedDate, and updateTaskDescription functions
only matched Unix line endings (\n), causing task updates to silently
fail when files had Windows line endings (\r\n).
Updated all three functions to:
- Match both \r\n and \n line endings in regexes
- Detect and preserve the original line ending style when writing back
This fixes drag & drop status updates in the aggregator web UI.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>