Files
reloop-v2/.claude/state/contracts/7D.1.sprint-contract.json
reloop 58719e329e feat: 문제풀이 UI 통일 + PDF→문제집 + 통계탭 삭제
- 통계 탭 삭제 (프론트 페이지/차트/네비 항목, 백엔드 stats 모듈은 대시보드용으로 유지)
- PDF 문제 분리 → 문제집 생성으로 변경 (ProblemSet + Problem 레코드)
  - ProblemSet에 sourceType, uploadedByUserId 추가
  - POST /problem-sets/create-from-pdf 엔드포인트
  - GET /problem-sets/my-uploads, DELETE /problem-sets/:id
  - exams 페이지에 '내가 만든 문제집' 섹션
- 문제 풀이 UI 통일
  - DrawingCanvas 공통 컴포넌트 추출 (필기모드)
  - 복습 페이지에 필기모드(캔버스+펜색상) 추가
  - 다시풀기 페이지에 필기모드+메모 추가
  - 처음풀기 페이지 난이도 슬라이더→3버튼(H/M/E)+SM-2 연동

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 10:17:12 +09:00

64 lines
2.2 KiB
JSON

{
"schema_version": "sprint-contract.v1",
"generated_at": "2026-04-11T19:03:58.016Z",
"source": {
"plans_file": "Plans.md",
"task_id": "7D.1"
},
"task": {
"id": "7D.1",
"title": "**AppShell (사이드바)** — design-01.html 의 `aside.w-64` 레이아웃 (256px, 다크 bgDeep, indigo radial glow blur-80px, backdrop-blur-xl). 로고 indigo→violet gradient + Phosphor `ph-infinity`, nav 5 항목(대시보드/복습/학습 기록/통계/과목 및 태그) Phosphor icons, 활성 라우트 bg-white/5 + border-white/5, 하단 user card (아바타 + nickname + plan badge + caret 드롭다운). 모바일에서는 BottomNav 로 대체",
"definition_of_done": "기존 SideNav.tsx 교체, `/dashboard` 진입 시 새 사이드바 렌더, 활성 라우트 강조, 로그아웃 클릭 동작",
"depends_on": [
"7C.5"
],
"status_at_generation": "cc:WIP"
},
"contract": {
"checks": [
{
"id": "dod-primary",
"source": "Plans.md.DoD",
"description": "기존 SideNav.tsx 교체, `/dashboard` 진입 시 새 사이드바 렌더, 활성 라우트 강조, 로그아웃 클릭 동작"
},
{
"id": "check-styled",
"source": "manual",
"description": "styled-components 만 사용, Tailwind 클래스 금지"
},
{
"id": "check-phosphor",
"source": "manual",
"description": "components/ui/Icon.tsx (Phosphor) 사용"
},
{
"id": "check-preserve-auth",
"source": "manual",
"description": "useRouter/usePathname/hasToken/api 기존 로직 보존"
},
{
"id": "check-design-parity",
"source": "manual",
"description": "design-01.html aside 구조 1:1 반영 (width 256px, radial glow, gradient logo, active nav highlighting)"
}
],
"non_goals": [],
"runtime_validation": [
"cd frontend && pnpm exec tsc --noEmit"
],
"browser_validation": [],
"risk_flags": []
},
"review": {
"status": "approved",
"reviewer_profile": "static",
"browser_mode": null,
"route": null,
"reviewer_notes": [
"manually approved for codex delegation"
],
"approved_at": "2026-04-11T19:04:36.631Z",
"gaps": [],
"followups": []
}
}