- calendarDayProvider watches sortPreferenceProvider and sorts dayTasks
- overdueTasks intentionally unsorted (pinned at top per design decision)
- tasksInRoomProvider watches sortPreferenceProvider and sorts via stream.map
- _sortTasks helper (TaskWithRoom) and _sortTasksRaw helper (Task) both support:
- alphabetical: case-insensitive A-Z by name
- interval: by intervalType.index ascending, intervalDays as tiebreaker
- effort: by effortLevel.index ascending (low→medium→high)
- All 113 tests pass, analyze clean