approvedSnapshot is only populated at approval time; pending and disapproved
sheets had null snapshot so the card always displayed 0m · 0 tasks.
Now totalSecs/taskCount are passed as nullable params from the parent; the
card renders — when no snapshot is available yet.
Also accept camelCase 'daySheets' URL param in parseProgrammerTasksTab
alongside the existing hyphenated 'day-sheets' spelling.
Co-Authored-By: claude-flow <ruv@ruv.net>
- Wire daySheetsForUserProvider(userId) into ProgrammerDashboard so
computeProgrammerStats/computeBadges receive real sheet data instead of
the placeholder const <ProgrammerDaySheet>[].
- Monitor tab: watch allDaySheetsProvider and build sheetStatusByUser map
for today; pass it to buildMonitorEntries; add "Sheets pending" chip
(pending + disapproved today) to the summary row.
- ProgrammerDrillDownScreen: add _RecentDaySheetsPanel below the dashboard
showing the last 10 sheets (date + status pill) with tap-to-daySheetDetail.
- DaySheetDetailScreen (T17 gaps): replace const [] liveRows with
programmerDayDataProvider(sheet.workDate) built rows for non-approved
sheets; fix _onApprove timer check to filter only the sheet programmer's
own tasks (QN-1).
- Add test/programmer_drill_down_test.dart (3 tests, all passing).
Co-Authored-By: claude-flow <ruv@ruv.net>