v2.4 - Labels and Filtering
Labels and Filtering
Backend
- New
Labelstable with many-to-many relationship to Tasks (implicit join table via EF Core) - Full CRUD endpoints for labels:
GET,POST,PATCH,DELETE PATCH /api/tasks/{id}/labels- replaces the full label set on a task- Label name uniqueness enforced (case-insensitive, returns 409 Conflict)
- Label ID validation on assignment (returns 400 with invalid IDs)
- Task queries now eager-load labels via
.Include(t => t.Labels)
Frontend
- Labels dashboard page (
/labels) - full CRUD with inline rename, color picker, and delete with confirmation - 10-color VIBGYOR palette for label colors, auto-cycling on creation
- Labels field in AddTaskForm with autocomplete, multi-select, and auto-create on Enter
- Labels row on task detail page with add/remove via AssignLabelsButton (optimistic updates)
- Label chips (
#labelname) shown on mobile task cards - Filter panel popover (three-dot menu) with label, project, and date filters
- Filter state persists across navigation via sessionStorage
Tests
- 15 new tests for
LabelsController(CRUD, validation, uniqueness, color range)
Review fixes (#31-#36)
- Case-insensitive label name uniqueness
- Label ID validation in SetLabels endpoint
- FilterPanel overflow clipping fix
- Concurrent operation tracking in LabelsClient
- Optimistic update with revert-on-error in AssignLabelsButton
- Duplicate label auto-create prevention in AddTaskForm
See CHANGELOG.md for full details.