- Add stories subcommand listing stories worked on, grouped by project
- Preserve story_raw in parser row dicts alongside the stripped story,
so markdown links are available for display
- print_stories() filters to rows with a non-empty story field,
deduplicates by stripped story text (preferring the linked version),
sums hours per story, and outputs an indented Markdown list
- Project names resolved through project_map (same as csv/summary)
- -w/--weekly flag aggregates stories across the full week
- Add tests for print_stories covering deduplication, link preservation,
grouping, empty rows, and story-less row exclusion
- Fix flex daily target in status: use projected hours per prior day
rather than fixed 8h when computing remaining hours for today
- Add _parse_natural() to utils.py using dateparser as a fallback when
structured date formats (YYYY-MM-DD, MM-DD, DD-MM) don't match
- Supports expressions like 'today', 'yesterday', 'monday', '3 days ago'
- Change day argument to nargs='*' and join tokens so unquoted
multi-word expressions like: uv run timesheets 3 days ago work correctly
- Pin dateparser to English to avoid locale-dependent behaviour
- Update tests to cover natural language cases and fix test_last_monday
(dateparser does not support 'last monday'; use 'monday' instead)
- Add parse_date_arg() to utils.py supporting YYYY-MM-DD, MM-DD, and
DD-MM formats with either - or / as separator
- Add AmbiguousDateError for two-part dates valid as both MM-DD and DD-MM
- Replace --day flag with a positional optional argument (defaults to today)
- Remove old _parse_date() helper from cli.py