This backlog deconstructs product-spec.md and _docs/plan.md into atomic, verifiable implementation tasks.
| Task ID | Component | Description | Status | Verification Criteria |
|---|---|---|---|---|
| TASK-01 | Data Layer | Database schema & SQLAlchemy models (Users, Groups, Items) | DONE |
Pytest test_database.py, tables migrated |
| TASK-02 | Backend Auth | User registration, bcrypt hashing, JWT access tokens | DONE |
Pytest test_auth.py, 401 on missing token |
| TASK-03 | Groups API | Shared groups, invitations, member permissions | DONE |
Pytest test_groups.py, owner/member rules |
| TASK-04 | Items API | Lifecycle items CRUD (Renewals, Maintenance, Warranties) | DONE |
Pytest test_items.py, common fields validation |
| TASK-05 | Reminders | Overdue/upcoming detection and action summaries | DONE |
Pytest test_reminders.py, due date filters |
| TASK-06 | Daily Digest | Morning digest generation and email delivery simulator | DONE |
Pytest digest endpoint, grouped summaries |
| TASK-07 | Frontend Client | Centralized API client service (src/services/api.ts) |
DONE |
Unit tests with mock fallback |
| TASK-08 | Frontend UI | React 19 dashboard, guided creation modal, filtering | DONE |
Vitest component tests, responsive views |
| TASK-09 | Containerization | Docker Compose multi-service topology (DB + App + Caddy) | DONE |
make up, healthy /health checks |
| TASK-10 | Integration QA | Multi-user PostgreSQL integration & Playwright E2E | DONE |
27 integration tests, 17 E2E tests passing |
| TASK-11 | Observability | OpenTelemetry traces, Prometheus metrics, Loki, Grafana | DONE |
OTel Collector pipeline & dashboards active |
| TASK-12 | Local K8s | Declarative Kind deployment manifests and PVC storage | DONE |
make kind-deploy, pod readiness verified |
| TASK-13 | CI/CD & Deploy | Two-stage ECR pipeline, dev/prod environments, Terraform | DONE |
Keyless GitHub Actions OIDC deploy |
| TASK-14 | Autonomous Ops | Headless on-call incident poller, policy, and runbooks | DONE |
on-call-engineer/poll-alerts.py verified |
User: id, email, password_hash, full_name, created_at.Group: id, name, owner_id, created_at.GroupMember: group_id, user_id, role, joined_at.LifecycleItem: id, name, type (renewal | maintenance | warranty), due_date, status (active | completed), user_id, group_id, created_at, updated_at.backend/app/db_models.py, backend/app/database.py.POST /api/v1/auth/register, POST /api/v1/auth/login, GET /api/v1/auth/me.bcrypt, access tokens signed with HMAC-SHA256, expiration enforced.backend/app/routers/auth.py, backend/app/auth.py.GET /api/v1/groups, POST /api/v1/groups, POST /api/v1/groups/{id}/members, DELETE /api/v1/groups/{id}/members/{user_id}.owner. Members can view and edit shared items. Group items persist when members leave.backend/app/routers/groups.py.GET /api/v1/items, POST /api/v1/items, GET /api/v1/items/{id}, PUT /api/v1/items/{id}, DELETE /api/v1/items/{id}.type, status, group_id, due_before, due_after.backend/app/routers/items.py.GET /api/v1/reminders, GET /api/v1/reminders/summary.backend/app/routers/reminders.py.POST /api/v1/reminders/digest/send, GET /api/v1/reminders/digest/history.frontend/src/services/api.ts.frontend/src/App.tsx, frontend/src/components/.docker-compose.yaml, docker-compose.prod.yml, Makefile.backend/tests/integration/, e2e/.