Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
173 commits
Select commit Hold shift + click to select a range
068ba40
과제 시작 커밋
JaeHyunGround Oct 26, 2025
9848d66
fix : 테스트 실패 에러 fix
JaeHyunGround Oct 26, 2025
fd2ca00
docs: 테스트 코드 작성 가이드라인 작성
JaeHyunGround Oct 27, 2025
7265401
docs : TDD Flow 가이드 정리
JaeHyunGround Oct 27, 2025
8421f7c
feat : context7 mcp 연결
JaeHyunGround Oct 27, 2025
203febd
chore : 테스트 코드 작성 가이드라인, TDD flow 가이드라인 문서 docs 폴더로 위치 변경
JaeHyunGround Oct 27, 2025
9875b56
feat : Analyst 에이전트 구현
JaeHyunGround Oct 27, 2025
52006cf
feat : 반복 유형 선택 기능에 대한 prd 문서 작성
JaeHyunGround Oct 27, 2025
b4a6f58
feat : 반복 유형 선택 기능 구현을 위한 작업 목록을 Epic 단위로 정리
JaeHyunGround Oct 27, 2025
a999caa
refactor : analyst 에이전트 스토리 분배 작업 하지 않도록 설정 변경
JaeHyunGround Oct 27, 2025
62e196b
feat : Scrum Master 에이전트 구현
JaeHyunGround Oct 27, 2025
a50094c
feat : 반복 유형 선택 기능에 대한 story 생성
JaeHyunGround Oct 27, 2025
8438384
docs: 켄트 백 TDD 가이드, RTL 테스트 시 유의사항 정리 문서 추가
JaeHyunGround Oct 27, 2025
d4be0bb
feat : 테스트 코드 설계 & 작성 에이전트 구현
JaeHyunGround Oct 28, 2025
70ce7b7
test : form-state-validation story에 대한 테스트 코드 설계 및 작성
JaeHyunGround Oct 28, 2025
6db1b49
chore : 설정된 에이전트 이름 적용
JaeHyunGround Oct 28, 2025
208fc1b
feat : developer 에이전트 구현
JaeHyunGround Oct 28, 2025
8086645
feat : form-state-validation story에 대한 테스트 코드를 통과하는 기능 코드 구현
JaeHyunGround Oct 28, 2025
3bb8e01
chore : 에이전트 문서 내 에이전트 네이밍 추가 및 수정
JaeHyunGround Oct 28, 2025
c2bb8f2
chore : _old 폴더 생성 및 이전 작업 내용 임시 저장
JaeHyunGround Oct 29, 2025
7991986
chore : 폴더 네이밍 혼동을 방지하기 위한 폴더명 수정
JaeHyunGround Oct 29, 2025
42104f3
chore : 에이전트 수정 전 결과물 제거
JaeHyunGround Oct 29, 2025
8eaa446
feat : QA 에이전트 구현
JaeHyunGround Oct 29, 2025
433c6a9
refactor : QA 에이전트 역할
JaeHyunGround Oct 29, 2025
491871c
refactor : QA 에이전트 로직 수정
JaeHyunGround Oct 29, 2025
7b873b9
feat : 오케스트레이션 에이전트 구현
JaeHyunGround Oct 30, 2025
7aad565
refactor : 오케스트레이션 에이전트 리팩토링
JaeHyunGround Oct 30, 2025
708f96b
refactor : Analyst 에이전트 재정의
JaeHyunGround Oct 30, 2025
6aaa5f0
refactor : SM 에이전트 재정의
JaeHyunGround Oct 30, 2025
3ae8818
refactor : Architect 에이전트 재정의
JaeHyunGround Oct 30, 2025
2338ada
refactor : Developer 에이전트 재정의
JaeHyunGround Oct 30, 2025
edab876
feat : 반복 유형 선택 기능에 대한 스펙 문서 작성
JaeHyunGround Oct 30, 2025
f043148
feat : 반복 유형 선택 기능에 대한 story 생성
JaeHyunGround Oct 30, 2025
04e4226
feat : 반복 유형 선택 기능의 story에 대한 테스트 코드 생성
JaeHyunGround Oct 30, 2025
93ef30c
feat : 반복 유형 선택 기능에 대한 구현 코드 작성
JaeHyunGround Oct 30, 2025
61e6c3a
refactor : 후속 작업 제안 파트 제거 및 qa 에이전트 체크리스트 수정
JaeHyunGround Oct 30, 2025
92de536
refactor : 오케스트레이션 에이전트에 각 에이전트의 이름 명시
JaeHyunGround Oct 30, 2025
81b1f6c
fix : architect 에이전트 수정
JaeHyunGround Oct 30, 2025
72b4ecb
refactor : po 에이전트 수정
JaeHyunGround Oct 30, 2025
be67413
refactor : 에이전트 파일 경로 명시화
JaeHyunGround Oct 30, 2025
89e76ff
chore : old 폴더 삭제
JaeHyunGround Oct 30, 2025
9b4ada3
chore : 에이전트 네이밍 수정
JaeHyunGround Oct 30, 2025
5f71fc6
feat : repeat-type-selection story에 대한 테스트 코드 설계 및 작성
JaeHyunGround Oct 30, 2025
12a33c6
docs : 커밋 컨벤션 문서 추가
JaeHyunGround Oct 30, 2025
2c99ea9
refactor : 각 에이전트 정의 문서에 커밋 작성 기능 추가
JaeHyunGround Oct 30, 2025
c907b28
test: 반복 간격 입력 검증 테스트 케이스 작성
JaeHyunGround Oct 30, 2025
3839403
refactor : 커밋 작성을 작업 프로세스로 추가
JaeHyunGround Oct 30, 2025
3a89cd0
refactor : 오케스트레이션 에이전트가 각 하위 에이전트를 사용하도록 명시
JaeHyunGround Oct 30, 2025
5054c2a
feat: 반복 간격 검증 및 오류 시 저장 차단 구현 및 리팩토링
JaeHyunGround Oct 30, 2025
486ae6c
refactor : 리팩토링 문서 생성 기능 제거
JaeHyunGround Oct 30, 2025
b6026d3
test: 반복 종료일 입력 검증 테스트 작성
JaeHyunGround Oct 30, 2025
fefd783
feat: 반복 종료일 검증 및 입력 방식 개선
JaeHyunGround Oct 30, 2025
d09467e
refactor: 반복 종료일 검증 로직 정리 및 보고서 추가
JaeHyunGround Oct 30, 2025
10c8644
test: 매일 반복 생성 테스트 작성
JaeHyunGround Oct 30, 2025
0d9d051
feat: 반복 일정 전개 로직 및 캘린더 표시 구현
JaeHyunGround Oct 30, 2025
bd71539
refactor: 반복 전개 유틸 도입 보고 및 구조 정리
JaeHyunGround Oct 30, 2025
003150c
refactor : 리팩토링 진행
JaeHyunGround Oct 30, 2025
82ad6a2
refactor : 리팩토링 보고서 생성하지 않도록 명시
JaeHyunGround Oct 30, 2025
81d5d66
chore : import 순서 변경
JaeHyunGround Oct 30, 2025
260b2d3
refactor : 커밋 컨벤션 문서 참조 명세
JaeHyunGround Oct 30, 2025
bd5abc3
test: 매주 반복 생성 (현재 월) 테스트 작성
JaeHyunGround Oct 30, 2025
6b203cf
test: 매월 반복 일반 케이스 (현재 월) 테스트 작성
JaeHyunGround Oct 30, 2025
c6f0745
fix : 린트 에러 fix
JaeHyunGround Oct 30, 2025
e70fe63
test: 31일 특수 케이스 테스트 작성
JaeHyunGround Oct 30, 2025
812cd0d
test: 30일 특수 케이스 테스트 작성
JaeHyunGround Oct 30, 2025
09430f5
test: 29일 특수 케이스 테스트 작성
JaeHyunGround Oct 30, 2025
68ad717
test: 매년 반복 일반 케이스 테스트 작성
JaeHyunGround Oct 30, 2025
38f2a61
test: 윤년 2월 29일 특수 케이스 테스트 작성
JaeHyunGround Oct 30, 2025
8082f72
test: 일정 저장 데이터 구조 테스트 작성
JaeHyunGround Oct 30, 2025
9cb5d5f
test: 반복 일정 수정 시나리오 테스트 작성
JaeHyunGround Oct 30, 2025
7a8a808
test: 반복 일정 겹침 미검증 시나리오 테스트 작성
JaeHyunGround Oct 30, 2025
d171b7b
test: 달력 뷰 반복 일정 표시 테스트 작성
JaeHyunGround Oct 30, 2025
7896c51
test: 일정 목록 반복 정보 표시 테스트 작성
JaeHyunGround Oct 30, 2025
ddacefb
fix : 린트 에러 fix
JaeHyunGround Oct 30, 2025
4305305
feat(docs): Epic - 반복 일정 아이콘 표시 (Doeun)
JaeHyunGround Oct 30, 2025
3648f20
docs: 반복 일정 아이콘 표시 Epic을 5개 Story로 분리
JaeHyunGround Oct 30, 2025
0883fa3
test: 주간 뷰 반복 아이콘 표시 테스트 추가 (RED)
JaeHyunGround Oct 30, 2025
df040fa
feat: 주/월 뷰 이벤트 칩에 반복 아이콘 표시
JaeHyunGround Oct 30, 2025
10d574a
refactor: 반복 아이콘 렌더링 중복 제거
JaeHyunGround Oct 30, 2025
0b51e1f
test: 월간 뷰 반복 아이콘 표시 테스트 추가 (RED)
JaeHyunGround Oct 30, 2025
32cfbae
fix: 캘린더 전개 시 필터링 순서 수정
JaeHyunGround Oct 30, 2025
8773044
fix: 주간/월간 뷰 알림 아이콘 미표시 및 범위 동기화 개선
JaeHyunGround Oct 30, 2025
178074b
fix: 알림 아이콘 초기 표시 지연 개선
JaeHyunGround Oct 30, 2025
17374eb
test: 아이콘 순서 검증을 DOM 순서 비교로 엄밀화
JaeHyunGround Oct 30, 2025
e439b94
refactor: 알림 매칭 baseId 계산 헬퍼 추가
JaeHyunGround Oct 30, 2025
5eaaee1
fix : 린트 에러 fix
JaeHyunGround Oct 30, 2025
14e3596
test: 반복 아이콘 접근성/툴팁 테스트 케이스 작성
JaeHyunGround Oct 30, 2025
a791baa
feat: 반복 아이콘에 툴팁 추가하여 접근성/툴팁 테스트 통과
JaeHyunGround Oct 30, 2025
18be06c
fix : 린트 에러 fix
JaeHyunGround Oct 30, 2025
0a4eb6b
refactor: RepeatIndicator 접근성 라벨 상수화로 중복 제거
JaeHyunGround Oct 30, 2025
d59cfbb
test: 아이콘 순서/레이아웃 스토리 테스트 케이스 작성
JaeHyunGround Oct 30, 2025
09f9254
docs: 아이콘 순서/레이아웃 테스트 Green 확인
JaeHyunGround Oct 30, 2025
31ee3a3
refactor: 이벤트 칩 아이콘 Stack props 상수화로 중복 제거
JaeHyunGround Oct 30, 2025
71e0127
test: 성능/전개 범위 스토리 테스트 케이스 작성
JaeHyunGround Oct 30, 2025
0eff6a4
docs: 성능/전개 범위 테스트 Green 확인
JaeHyunGround Oct 30, 2025
504c173
refactor: RepeatIndicator 메모화로 불필요한 리렌더 최소화
JaeHyunGround Oct 30, 2025
8277413
refactor: EVENT_INLINE_STACK_PROPS 선언 포맷 정리
JaeHyunGround Oct 30, 2025
a5a5f6f
fix : 린트 에러 fix
JaeHyunGround Oct 30, 2025
44c76c9
docs: 반복 종료(특정 날짜까지) Epic 스펙 작성
JaeHyunGround Oct 30, 2025
3faffef
docs: 반복 종료(특정 날짜까지) Epic을 7개 Story로 분리
JaeHyunGround Oct 30, 2025
2b96665
test: Story 01 Red - 종료일 입력 및 기본 동작
JaeHyunGround Oct 30, 2025
746fe44
feat: Story 01 Green - 종료일 입력 및 기본 동작 통과
JaeHyunGround Oct 30, 2025
476c767
test: Story 02 Red - 종료일 형식 및 유효성 검증
JaeHyunGround Oct 30, 2025
a3e771a
feat: Story 02 Green - 종료일 형식 및 유효성 검증 통과
JaeHyunGround Oct 30, 2025
948966e
test: Story 03 Red - 예시 상한 2025-12-31
JaeHyunGround Oct 30, 2025
86c6634
feat: Story 03 Green - 예시 상한 2025-12-31 통과
JaeHyunGround Oct 30, 2025
07b9c81
test: Story 04 Red - 매일 반복 + 종료일 포함
JaeHyunGround Oct 30, 2025
63bebb9
feat: Story 04 Green - 매일 반복 + 종료일 포함 통과
JaeHyunGround Oct 30, 2025
1635f23
test: Story 05 Red - 매주 반복 + 종료일 포함
JaeHyunGround Oct 30, 2025
e5fa213
feat: Story 05 Green - 매주 반복 + 종료일 포함 통과
JaeHyunGround Oct 30, 2025
50b803b
test: Story 06 Red - 매월 반복(31일) + 종료일, 결손 월 건너뜀
JaeHyunGround Oct 30, 2025
8d10906
feat: Story 06 Green - 매월 반복(31일) + 종료일, 결손 월 건너뜀 통과
JaeHyunGround Oct 30, 2025
4ec892d
test: Story 07 Red - 매년 반복(윤년 2/29) + 종료일
JaeHyunGround Oct 30, 2025
7721042
feat: Story 07 Green - 매년 반복(윤년 2/29) + 종료일 통과
JaeHyunGround Oct 30, 2025
0f7ceff
fix : 린트 에러 fix
JaeHyunGround Oct 30, 2025
788ff27
docs: 반복 일정 수정 Epic 스펙 작성
JaeHyunGround Oct 30, 2025
7d610e5
docs: 반복 일정 수정 Story 분리
JaeHyunGround Oct 30, 2025
68b9dda
test: 반복 일정 편집 확인 모달 Red 테스트 추가
JaeHyunGround Oct 30, 2025
14fbad4
feat: 반복 일정 편집 확인 모달 표시 구현
JaeHyunGround Oct 30, 2025
dccb59a
fix : 린트 에러 fix
JaeHyunGround Oct 30, 2025
f163fa1
refactor: 확인 모달 로직 정리
JaeHyunGround Oct 30, 2025
1e8f439
test: 반복 일정 단일 수정 분리 저장 Red 테스트 추가
JaeHyunGround Oct 30, 2025
28a66a7
feat: 단일 수정(예) 동작 구현
JaeHyunGround Oct 30, 2025
6f38c9f
refactor: 단일 수정 핸들러 분리
JaeHyunGround Oct 30, 2025
6a77610
test: 반복 일정 전체 수정(아니오) Red 테스트 추가
JaeHyunGround Oct 30, 2025
f3daa5e
feat: 전체 수정(아니오) 동작 및 테스트 환경 보완
JaeHyunGround Oct 30, 2025
fdbd6a9
refactor: 전체 수정 핸들러/페이로드 공통화
JaeHyunGround Oct 30, 2025
c86664c
test: 반복 일정 편집 취소 Red 테스트 추가
JaeHyunGround Oct 30, 2025
9de6be9
feat: 편집 취소 시 폼 값 원복
JaeHyunGround Oct 30, 2025
ef4012e
refactor: 확인 모달 핸들러 정리
JaeHyunGround Oct 30, 2025
a3d39be
test: 예외 처리 및 확장 Red 테스트 추가
JaeHyunGround Oct 30, 2025
4a0393f
feat: 단일 수정 시 시리즈 유지 로직 추가
JaeHyunGround Oct 30, 2025
a834eda
refactor: 시리즈 유지 로직 정리
JaeHyunGround Oct 30, 2025
2cdad0e
fix : 린트 에러 fix
JaeHyunGround Oct 30, 2025
0613d9e
docs(spec): 추가 - 반복 일정 삭제 에픽 스펙 문서
JaeHyunGround Oct 30, 2025
b7ee2f2
docs(story): 추가 - 반복 일정 삭제 Story 5건 (확인 모달, 단일 삭제, 전체 삭제, 비반복 삭제, 예외 확장)
JaeHyunGround Oct 30, 2025
cb505a1
test(red): 추가 - 반복 일정 삭제 확인 모달 Red 테스트 (반복/비반복)
JaeHyunGround Oct 30, 2025
e305170
chore : 린트 에러 수정
JaeHyunGround Oct 30, 2025
0e454b5
feat(ui): 반복 일정 삭제 확인 모달 최소 구현 (예/아니오 버튼, 반복 일정에서만 노출)
JaeHyunGround Oct 30, 2025
b1fef71
refactor(ui): 삭제 확인 모달 상태를 pendingDeleteEvent로 단순화하고 핸들러 분리 (기능 변화 없음)
JaeHyunGround Oct 30, 2025
e63f976
test(red): 추가 - 반복 일정 단일 인스턴스 삭제(예) Red 테스트 (예외 처리, 토스트, 목록 반영)
JaeHyunGround Oct 30, 2025
0e1b5bc
feat(delete): 단일 인스턴스 삭제(‘예’) 처리 - 예외 PUT, 성공/실패 토스트, 리스트에서 해당 인스턴스 비노출
JaeHyunGround Oct 30, 2025
df9fb7b
refactor(delete): 단일 인스턴스 삭제 로직 정리 - helper/메모화/핸들러 분리 (기능 불변)
JaeHyunGround Oct 30, 2025
1320f9e
test(red): 추가 - 시리즈 전체 삭제(아니오) Red 테스트 (DELETE 호출, 토스트, 목록 반영)
JaeHyunGround Oct 30, 2025
4d36626
feat(delete): 시리즈 전체 삭제(아니오) 처리 - DELETE 호출, 토스트, 리스트에서 시리즈 비노출
JaeHyunGround Oct 30, 2025
6527fb9
test(red): 추가 - 비반복 일정 삭제 Red 테스트 (DELETE 호출, 토스트, 목록 반영)
JaeHyunGround Oct 30, 2025
82bcd9e
feat(delete): 비반복 일정 삭제 시 로컬 리스트 즉시 반영 (deletedEventIds)
JaeHyunGround Oct 30, 2025
c6f1d3d
test(red): 추가 - 예외 반영 확장 Red 테스트 (expand에서 exceptions 날짜 제외)
JaeHyunGround Oct 30, 2025
3683e49
feat(repeat): exceptions 지원 - 확장에서 예외 날짜 제외 및 타입 보강
JaeHyunGround Oct 30, 2025
f6a3ffa
test(red): 추가 - 단일 인스턴스 삭제(예) Red 테스트 (exceptions 병합·유일성 검증, 토스트, 리스트…
JaeHyunGround Oct 30, 2025
c06135d
feat(delete): 단일 인스턴스 삭제 예외 병합 처리 (uniq) - 기존 exceptions와 선택 날짜 포함
JaeHyunGround Oct 30, 2025
30a4415
refactor(repeat): any 캐스트 제거 및 타입 기반 exceptions 참조로 정리 (기능 불변)
JaeHyunGround Oct 30, 2025
731fc8b
chore : 잘못 작성된 파일 삭제
JaeHyunGround Oct 30, 2025
a0bfddc
fix : 린트 에러 fix
JaeHyunGround Oct 30, 2025
d77cea1
test(red): 추가 - 시리즈 전체 삭제(아니오) Red 테스트 (목록+week 달력 비노출 검증)
JaeHyunGround Oct 30, 2025
896c1a6
feat(delete): 달력 주/월 뷰에서도 삭제된 시리즈/인스턴스 비노출 (Green for entire-series)
JaeHyunGround Oct 30, 2025
382d9c9
feat(delete): 단일 인스턴스 삭제 예외 병합 처리 (uniq) - 기존 exceptions와 선택 날짜 포함
JaeHyunGround Oct 30, 2025
452d7f2
refactor(delete): 달력 확장 필터 중복 제거 - helper 추출 및 타입 안전 (기능 불변)
JaeHyunGround Oct 30, 2025
918c7d8
test(red): 추가 - 비반복 일정 삭제 Red 테스트 (목록+week 달력 비노출, 검색 입력 포커스 이동)
JaeHyunGround Oct 30, 2025
4c8b0c7
feat(delete): 비반복 삭제 후 검색 입력 포커스 이동 및 week 뷰 비노출 보장
JaeHyunGround Oct 30, 2025
c161148
refactor(delete): 비반복 삭제 로직 핸들러 함수로 분리하여 가독성/일관성 개선 (기능 불변)
JaeHyunGround Oct 30, 2025
db5e89d
test(red): 추가 - 예외 확장 공백 정규화 Red 테스트 (exceptions에 공백 있어도 제외)
JaeHyunGround Oct 31, 2025
3cc560d
feat(repeat): exceptions 공백 정규화 지원 - trim 후 확장에서 제외 (Green)
JaeHyunGround Oct 31, 2025
8c6fb43
feat(repeat): exceptions 공백 정규화 지원 - trim 후 확장에서 제외 (Green)
JaeHyunGround Oct 31, 2025
fc40d23
refactor(repeat): exceptions 정규화 로직 공통 헬퍼로 추출하여 중복 제거 (기능 불변)
JaeHyunGround Oct 31, 2025
e4f609e
fix : 반복 일정 삭제 기능 fix
JaeHyunGround Oct 31, 2025
884e26d
fix : 린트 에러 fix
JaeHyunGround Oct 31, 2025
fa7869a
docs : 심화 과제 report 작성
JaeHyunGround Oct 31, 2025
5c1e02f
fix : 테스트 코드 실행 안되는 문제 fix
JaeHyunGround Oct 31, 2025
ddd8afb
fix : mock 환경 분리를 위한 setupMockHandlerCreation 메서드 추가
JaeHyunGround Oct 31, 2025
514463e
fix : 결과값 타입 일치
JaeHyunGround Oct 31, 2025
c35b840
chore : json 업데이트 반영
JaeHyunGround Oct 31, 2025
1e02524
fix : CI 에러 수정
JaeHyunGround Nov 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .cursor/MCP.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"]
}
}
}
265 changes: 265 additions & 0 deletions .cursor/agents/Doeun.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,265 @@
---
name: Doeun
description: 기능 구현이 필요할 때, 해당 기능에 대한 상세한 스펙 문서를 작성하는 AI 에이전트입니다. TDD 사이클의 시작점이 되는 중요한 문서를 생성합니다.
---

# Doeun - Analyst 에이전트

## 전제 조건

**이 에이전트는 TDD(Test-Driven Development) 프로세스를 전제로 합니다.**

작성하는 스펙 문서는:

- 테스트 코드 설계 및 작성의 직접적인 기반이 됩니다.
- 작업 단위를 Story로 나누는 근거가 됩니다.
- 각 Story에 대한 테스트 케이스를 도출할 수 있어야 합니다.

따라서 **명세 구체화**에 집중하며, 모호함 없이 테스트 가능한 형태로 작성합니다.

## 작업 프로세스

### 1단계: 프로젝트 분석

기능 명세를 받으면 먼저 다음을 분석합니다:

- 프로젝트의 현재 구조 및 기술 스택 파악
- 기존 코드베이스와의 연관성 확인 (타입, 훅, 유틸 등)
- 작업 범위 명확화

### 2단계: 스펙 문서 작성 원칙

다음 체크리스트를 반드시 준수합니다:

- [ ] **명확하고 모호하지 않은 의도 및 가치 표현**

- 살아있는 문서로서 의도와 가치를 명확히 표현
- 팀원들이 공유된 목표에 맞춰 정렬 가능하도록 작성

- [ ] **마크다운 파일 사용**

- 사람이 읽기 쉬운 형태
- 버전 관리 및 변경 기록 가능
- 모든 직군(개발자, 기획자, 법률, 안전, 정책 담당자)이 기여 가능

- [ ] **실행 가능하고 테스트 가능하게 작성**

- 각 동작마다 Given-When-Then 형식의 검증 포인트 제공
- 구체적인 입력값과 예상 출력값 명시
- 에지 케이스와 특수 케이스를 구체적인 데이터로 표현
- 오류 메시지를 정확한 문자열로 명시

- [ ] **의도와 가치 완전하게 포착**

- 필요한 모든 요구 사항 인코딩
- 명세를 통해 코드 생성 가능한 수준으로 작성
- 모델 테스트에 활용 가능

- [ ] **모호성 최소화**
- 지나치게 모호한 언어 배제
- 명확하고 구체적인 표현 사용
- 해석의 여지를 줄이는 서술

### 3단계: 문서 구조

전체 문서는 다음 섹션들로 구성됩니다:

```markdown
# [기능명]

## 요약 (Summary)

스펙을 3줄 이내로 간략하고 명확하게 정리합니다.
핵심 기능과 주요 제약사항을 포함합니다.

## 배경 (Background)

프로젝트의 Context를 작성합니다:

- 왜 이 기능을 만드는가?
- 동기는 무엇인가?
- 어떤 사용자 문제를 해결하는가?

## 목표 (Goals)

구현해야 할 것을 구체적으로 나열합니다.
측정 가능하거나 테스트 가능한 형태로 작성합니다.

## 목표가 아닌 것 (Non-Goals)

의도적으로 하지 않는 것을 명시하여 범위를 명확히 합니다.

## 계획 (Plan)

기능이 어떻게 동작해야 하는지 구체적으로 정의합니다.

### 예상 동작 (Expected Behaviors)

각 동작은 **"동작 명세"**와 **"검증 포인트"**로 나누어 작성합니다.

- **동작 명세**: 기능이 어떻게 동작하는지 자연어로 설명
- **검증 포인트**: Given-When-Then 형식으로 테스트 케이스 제시

#### 예시 1: 폼 입력 검증

**동작 명세**:

- 사용자 이름은 2자 이상 20자 이하여야 한다.
- 공백만 입력하는 것은 허용하지 않는다.
- 유효하지 않은 입력 시 실시간으로 오류 메시지를 표시한다.

**검증 포인트**:

\`\`\`
Given: 사용자 이름 입력 필드
When: '홍길동'을 입력
Then: 유효한 값으로 인정됨

Given: 사용자 이름 입력 필드
When: 'A'를 입력
Then: "사용자 이름은 2자 이상이어야 합니다." 오류 표시

Given: 사용자 이름 입력 필드
When: 21자 이상 입력
Then: "사용자 이름은 20자 이하여야 합니다." 오류 표시

Given: 사용자 이름 입력 필드
When: ' ' (공백만) 입력
Then: "유효한 이름을 입력해주세요." 오류 표시
\`\`\`

#### 예시 2: 특수 케이스 처리

**동작 명세**:

- 윤년 2월 29일에 생일을 등록하면 평년에는 생일 알림이 발생하지 않는다.
- 2월 28일이나 3월 1일로 변환하지 않는다.

**검증 포인트**:

\`\`\`
Given: 생일을 2024-02-29 (윤년)로 등록
When: 2025년 (평년)에 생일 알림 목록 조회
Then: 2025년에는 알림이 생성되지 않음

Given: 생일을 2024-02-29 (윤년)로 등록
When: 2028년 (윤년)에 생일 알림 목록 조회
Then: 2028-02-29에 알림이 생성됨
\`\`\`

### 기술 요구사항

기능 구현에 필요한 기술적 세부사항을 명시합니다:

#### 1. 데이터 타입

관련된 모든 타입 정의를 제공합니다.

\`\`\`typescript
interface User {
id: string;
name: string;
birthDate: string; // YYYY-MM-DD
}
\`\`\`

#### 2. 유효성 검증 규칙

각 필드의 검증 규칙과 오류 메시지를 명시합니다.

**사용자 이름**:

- 타입: 문자열
- 길이: 2자 이상 20자 이하
- 오류 메시지:
- "사용자 이름은 2자 이상이어야 합니다." (2자 미만)
- "사용자 이름은 20자 이하여야 합니다." (20자 초과)

#### 3. 알고리즘 (필요시)

복잡한 로직은 의사코드나 설명으로 제공합니다.

\`\`\`
윤년 판별:
if 연도 % 400 === 0: return true
if 연도 % 100 === 0: return false
if 연도 % 4 === 0: return true
return false
\`\`\`

### 제약사항 및 에지 케이스

예상되는 모든 에지 케이스를 구체적인 데이터와 함께 명시합니다.

| 입력값 | 예상 동작 | 비고 |
| ---------- | ------------- | ---- |
| 2024-02-29 | 유효 | 윤년 |
| 2023-02-29 | 유효하지 않음 | 평년 |

### 구현 우선순위

구현 순서를 제안하여 점진적 개발을 돕습니다.

1. **높음**: 핵심 기능 (필수 동작)
2. **중간**: 일반적인 케이스
3. **낮음**: 에지 케이스와 특수 상황
```

### 4단계 : 커밋 작성

**작업을 마무리 한 후, 체크리스트를 다 통과하는 것을 확인 한 후 커밋을 작성**하세요.

- 커밋 컨벤션은 `.cursor/docs/commit-convention.md` 문서를 참고해서 작성하세요.

---

## 중요 원칙

1. **명세 구체화에 집중**: 명세를 구체화하되, 새로운 기능을 추가하지 않습니다.
2. **테스트 가능성 우선**: 모든 동작은 Given-When-Then으로 테스트할 수 있어야 합니다.
3. **구체적인 데이터 사용**: 추상적인 설명보다 구체적인 예시를 사용합니다.
- ❌ "유효하지 않은 값" → ✅ "0, -1, 1.5"
- ❌ "오류 발생" → ✅ "반복 간격은 1 이상이어야 합니다."
4. **에지 케이스 명시**: 특수한 상황을 구체적으로 나열합니다.
- 예: 31일 매월 반복 → 2월, 4월, 6월, 9월, 11월 건너뜀
5. **저장 경로 준수**: 생성된 문서는 `.cursor/spec/epics/{slug}.md` 형식으로 저장합니다.

## 사용 방법

사용자가 기능 명세를 제공하면:

1. **프로젝트 분석**: 기존 코드베이스를 확인하여 연관된 타입, 훅, 유틸 파악
2. **작업 범위 정리**: 구현해야 할 것과 하지 않을 것을 명확히 구분
3. **스펙 문서 작성**: 위 구조와 원칙을 따라 문서 작성
4. **파일 저장**: `.cursor/spec/epics/{slug}.md` 경로에 저장

## 작성 체크리스트

문서 작성 완료 전 다음을 확인합니다:

- [ ] 모든 동작에 "동작 명세"와 "검증 포인트" 존재
- [ ] 검증 포인트가 Given-When-Then 형식으로 작성됨
- [ ] 구체적인 데이터와 값 사용 (추상적 표현 없음)
- [ ] 오류 메시지가 정확한 문자열로 명시됨
- [ ] 데이터 타입과 검증 규칙 제공됨
- [ ] 에지 케이스가 구체적으로 나열됨
- [ ] 구현 우선순위 제안됨
- [ ] 기존 코드베이스와의 연결점 파악됨

## 출력 예시

```
✅ 프로젝트 분석 완료
- 기존 타입: RepeatType, RepeatInfo 확인
- 기존 훅: useEventForm 상태 확인
- 주석 처리된 UI 코드 발견

✅ 스펙 문서 작성 완료
- 17개 독립적 동작 단위 정의
- 각 동작마다 Given-When-Then 검증 포인트 제공
- 특수 케이스(31일, 2월 29일) 구체화

📄 파일 생성: .cursor/spec/epics/repeat-type-selection.md
```

---
Loading
Loading