Files
ss-tools/specs/034-task-status-center/quickstart.md
busya 33ee976c48 feat(reports): Task Status Center — unified /reports dashboard
Страница /reports трансформирована в Центр статусов задач:

Backend:
- GET /api/reports/summary — агрегированные счётчики тип×статус (5 корзин)
- GET/PUT /api/settings/reports — глобальные настройки отчётов
- _filter_tasks_by_rbac() — row-level фильтрация по роли
- normalize_task_report: LLM-валидация с ошибками → FAILED/PARTIAL
- get_summary(): 5 корзин pending/running/awaiting_input/success/failed

Frontend:
- TaskCenterModel.svelte.ts (400 строк) — Screen Model
- SummaryPanel — сводная панель с цветовым кодированием и active filter
- ReportCard — humanized labels, duration, task_id, failed border
- FilterBar — search + sort + time range с label'ами
- Pagination — showingText, уникальные id для select
- Quick views: «Упавшие», «В работе», «Успешные»
- TaskDrawer: scroll-to-error, footer скрыт для terminal, «Н/Д» fix

Тесты: 48 backend + 38 frontend (2521 всего)
Build:   Console errors: 0
2026-07-02 18:53:58 +03:00

134 lines
4.7 KiB
Markdown

#region Quickstart [C:2] [TYPE ADR] [SEMANTICS quickstart, development, setup, task-status-center]
@BRIEF Developer quickstart for the Task Status Center feature — setup, verification commands, and key file locations.
## Prerequisites
- Docker + Docker Compose (for full stack)
- Python 3.13+ with venv (for backend-only development)
- Node.js 22+ (for frontend-only development)
- Git branch: `034-task-status-center`
## Quick Start (Docker)
```bash
# 1. Switch to feature branch
git checkout 034-task-status-center
# 2. Start full stack
docker compose up -d
# 3. Frontend at http://localhost:5173
# 4. Backend API at http://localhost:8000
# 5. WebSocket at ws://localhost:8000/ws/task-events?token=...
```
## Development Setup (without Docker)
```bash
# Backend
cd backend
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python -m uvicorn src.app:app --reload --port 8000
# Frontend (separate terminal)
cd frontend
npm install
npm run dev
```
## Verification Gates
```bash
# Backend: run all tests
cd backend && source .venv/bin/activate && python -m pytest -v
# Backend: run reports-specific tests
python -m pytest tests/api/routes/test_reports.py -v
python -m pytest tests/services/reports/ -v
# Backend: lint
python -m ruff check .
# Frontend: run all tests
cd frontend && npm run test
# Frontend: run reports-specific tests
npm run test -- src/lib/components/reports/
# Frontend: lint
npm run lint
```
## Key Files
### Backend (to create/modify)
| File | Change | Purpose |
|------|:------:|---------|
| `backend/src/api/routes/reports.py` | MODIFY | Add `/summary` endpoint; enhance `list_reports` with RBAC |
| `backend/src/services/reports/report_service.py` | MODIFY | Add `get_summary()`, `_filter_tasks_by_rbac()` |
| `backend/src/models/report.py` | MODIFY | Add `TaskSummary`, `StatusCounts`, `TaskTypeSummary` schemas |
| `backend/tests/api/routes/test_reports.py` | MODIFY | Add summary endpoint tests |
| `backend/tests/services/reports/test_report_service.py` | MODIFY | Add RBAC filtering tests |
### Frontend (to create/modify)
| File | Change | Purpose |
|------|:------:|---------|
| `frontend/src/lib/models/TaskCenterModel.svelte.ts` | **NEW** | Screen Model — state, WebSocket, filtering, actions |
| `frontend/src/types/reports.ts` | **NEW** | TypeScript DTOs matching backend schemas |
| `frontend/src/lib/api/reports.ts` | MODIFY | Add `getReportsSummary()`, add types |
| `frontend/src/routes/reports/+page.svelte` | **REWRITE** | Thin render layer with summary + filters + list |
| `frontend/src/routes/reports/+page.ts` | **NEW** | Load function for URL query param parsing |
| `frontend/src/lib/components/reports/SummaryPanel.svelte` | **NEW** | Summary dashboard grid component |
| `frontend/src/lib/components/reports/FilterBar.svelte` | **NEW** | Filter bar component |
| `frontend/src/lib/components/reports/TaskList.svelte` | MODIFY | Add pagination, active-first sort |
| `frontend/src/lib/components/reports/reportTypeProfiles.ts` | MODIFY | Add `clean_release` profile |
| `frontend/tests/lib/components/reports/SummaryPanel.test.ts` | **NEW** | Component UX tests |
| `frontend/tests/lib/components/reports/FilterBar.test.ts` | **NEW** | Component UX tests |
| `frontend/tests/lib/models/TaskCenterModel.test.ts` | **NEW** | Model unit tests |
## Manual Testing Scenarios
### 1. Summary Dashboard (US1)
1. Create tasks of different types (migration, backup, validation) via the API/UI.
2. Open `/reports` — verify summary cards show correct counts.
3. Complete a running task — verify count updates via WebSocket within 2 seconds.
### 2. Filtering (US2)
1. Click a summary card — verify task list filters to matching type+status.
2. Use multi-select dropdowns — verify combination filtering.
3. Type in search box — verify text filtering.
4. Select time range — verify temporal filtering.
### 3. Task Drill-Down (US3)
1. Click a FAILED task — verify Task Drawer opens with logs.
2. Click a RUNNING task — verify live log streaming in Drawer.
3. Hover over a task row — verify tooltip with details.
### 4. RBAC (TSC-FR-009)
1. Login as viewer — verify only own tasks visible.
2. Login as analyst — verify own + system tasks visible.
3. Login as admin — verify all tasks visible.
### 5. WebSocket Recovery
1. Open `/reports` with WebSocket connected.
2. Kill backend (`docker compose stop backend`).
3. Verify: yellow reconnecting indicator → red disconnected indicator.
4. Restart backend — verify auto-reconnect within 5 seconds (SC-005).
## Test Data
```python
# Create test tasks via API:
POST /api/tasks
{
"plugin_id": "superset-migration",
"action": "migrate_dashboard",
"params": {"source_env": "prod", "target_env": "staging", "dashboard_id": 42}
}
```
#endregion Quickstart