Project Hour Budgets and Time Tracking
Let people set a budget in hours for each project, see how much is left on the timesheet, get a warning when a project is close to its budget, and compare budget with actual hours on the Reports page.
Subtasks
- [business_analysis] Project Hour Budgets and Time Tracking Settled 4 asks: all-time hour budget per project (inline in By project), Left column, 80%/100% warnings on row + running panel, all-time Budget vs actual card on Reports. 19 ACs with oracles; assumed all-time budgets (period budgets deferred).
- [architecture] Project Hour Budgets and Time Tracking Budgets follow the hourly-rate pattern and sit on byProjectRows; one budgetStatus function produces every string. Split: C1 model/tokens/key → C2 Timesheet (stacked at ≤900px) ∥ C3 Reports progress list. Spec gate passed on round 2.
- Timesheet budget, Left and warnings Budget (h) + Left columns, Near/Used up/Over labels, live Running-panel warning, stacked By project <900px (measured), Help. Gate green, visual check 375–1280 light/dark OK; PR #49 merged. Follow-up: Entries card overflows at 375px (pre-existing).
- Reports Budget vs actual card Reports Budget vs actual card (all-time, on T.budgetReport, live, progressbar a11y) + help Reports section + README bullet. Gate ok; figures match Timesheet at all roundings; visual check 375/1024 light+dark done. PR #50 merged. AC15 deploy check left to Finish.
- [finish] Project Hour Budgets and Time Tracking All 3 build children resolved (PRs #48/#49/#50 merged, gate ok). Deploy succeeded and budgets work in a real browser on app.dev (Timesheet, warning, Reports, light/dark, 375px). No follow-ups filed. The pre-existing 375px Timesheet overflow is named as deferred.
Artifacts
Activity
- Created
- Runner started
- Ready
- Ready
- Runner started
- Runner ended (done)
- Runner started
- Runner ended (done)
- Draft
- Draft
- Draft
- Ready
- Ready
- Ready
- Runner started
- Runner ended (done)
- Runner started
- Runner ended (done)
- Runner started
- Runner ended (done)
- Runner ended (done)