Backend:
- Models: TestAttempt, AttemptAnswer (migration 002)
- POST /api/attempts: start attempt, shuffle questions/answers,
hide is_correct, expose is_multiple for UI hints
- POST /api/attempts/{id}/submit: save answers, calculate score,
strict matching (selected == correct), return full result
- GET /api/attempts/{id}/result: fetch saved result
- Register attempts router in main.py
Frontend:
- api/attempts.ts: types + API functions
- TestTake page: one question at a time, progress bar, timer
with auto-submit, back navigation controlled by test setting,
radio/checkbox based on is_multiple
- AttemptResult page: score, pass/fail, per-question breakdown
with correct/selected/missed answer highlighting
- App.tsx: add /tests/:testId/take and /attempts/:id/result routes
- TestDetail: add "Пройти тест" button
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- СПРИНТЫ.md: mark Sprint 1 as completed (✅), check all tasks,
add 4 bugs found and fixed during testing
- ШАГ_006.md: add bugs table with symptoms, causes and fixes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Director role = HR-manager (same permissions)
- Editing assigned test creates new version
- Question order is random per attempt
- Navigation back configurable by test author
- Notifications via MAX messenger (last sprint)
- Export out of scope
- Add step 003 log
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Create DOC/ТЗ.md with full system requirements
- Add DOC/ШАГИ/ШАГ_2026-03-21_002.md with step log
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>