|
| 1 | +# AGENTS.md |
| 2 | + |
| 3 | +## 프로젝트 목적 |
| 4 | + |
| 5 | +Rhythm Replica는 macOS용 네이티브 리듬게임 + 채보 편집기입니다. 오디오 재생 시간 기준의 정확한 플레이 경험과 키보드 중심의 에디팅 경험을 동시에 유지하는 것이 핵심입니다. |
| 6 | + |
| 7 | +## 빠른 시작 |
| 8 | + |
| 9 | +```bash |
| 10 | +xcodegen generate |
| 11 | +open RhythmReplica.xcodeproj |
| 12 | +``` |
| 13 | + |
| 14 | +CLI 빌드: |
| 15 | + |
| 16 | +```bash |
| 17 | +xcodebuild -project RhythmReplica.xcodeproj -scheme RhythmReplica -destination 'platform=macOS' build |
| 18 | +``` |
| 19 | + |
| 20 | +테스트: |
| 21 | + |
| 22 | +```bash |
| 23 | +xcodebuild -project RhythmReplica.xcodeproj -scheme RhythmReplica -destination 'platform=macOS' test |
| 24 | +``` |
| 25 | + |
| 26 | +## 기본 작업 순서 |
| 27 | + |
| 28 | +1. `README.md`, `AGENTS.md`, `docs/`부터 읽기 |
| 29 | +2. `project.yml` 기준으로 Xcode 프로젝트 재생성 |
| 30 | +3. 수정 범위와 영향 모듈 파악 |
| 31 | +4. 로직 변경 시 테스트 먼저 추가 또는 수정 |
| 32 | +5. UI 변경 시 수동 검증 시나리오 기록 |
| 33 | +6. 문서 갱신 |
| 34 | +7. 빌드/테스트/수동 검증 후 마무리 |
| 35 | + |
| 36 | +## 완료 조건 |
| 37 | + |
| 38 | +- 수정 요청이 실제 코드에 반영됨 |
| 39 | +- 관련 테스트가 추가/수정되고 실행됨 |
| 40 | +- `xcodebuild build` 또는 `test`가 요구 범위에서 통과함 |
| 41 | +- README/AGENTS/docs가 실제 동작과 일치함 |
| 42 | +- 사용자 관점 검증 결과가 남아 있음 |
| 43 | + |
| 44 | +## 코드 스타일 원칙 |
| 45 | + |
| 46 | +- AppKit 컨트롤러는 화면 조합과 사용자 이벤트만 담당 |
| 47 | +- 순수 계산 로직은 `Core` / `Game` 안에 두고 테스트 가능하게 유지 |
| 48 | +- 실제 판정/점수는 오디오 시간 기준으로 계산 |
| 49 | +- 타입 안정성을 깨는 우회(`as!`, 억지 캐스팅, 타입 무시) 금지 |
| 50 | +- 사용자 오류 메시지는 이해 가능한 문장으로 작성 |
| 51 | + |
| 52 | +## 파일 구조 원칙 |
| 53 | + |
| 54 | +- `RhythmReplica/App`: 앱 진입, 윈도우, 내비게이션 |
| 55 | +- `RhythmReplica/Core`: 모델, 포맷, 검증, 저장소 |
| 56 | +- `RhythmReplica/Audio`: 재생, 파형, 시간 동기 |
| 57 | +- `RhythmReplica/Game`: 판정, 점수, 입력, 플레이 상태 |
| 58 | +- `RhythmReplica/Editor`: 타임라인, 렌더링, 편집 명령 |
| 59 | +- `RhythmReplica/Import`: 파일/YouTube 가져오기 |
| 60 | +- `RhythmReplica/Settings`: 환경설정, 키 바인딩 |
| 61 | + |
| 62 | +## 문서화 원칙 |
| 63 | + |
| 64 | +- 채보 포맷 변경 시 `docs/chart-format.md` 필수 갱신 |
| 65 | +- UI/디자인 토큰 변경 시 `docs/design-system.md` 갱신 |
| 66 | +- 릴리즈 절차 변경 시 `docs/release.md` 또는 `docs/packaging-dmg.md` 갱신 |
| 67 | + |
| 68 | +## 테스트 원칙 |
| 69 | + |
| 70 | +- 순수 계산 로직은 XCTest로 보호 |
| 71 | +- 회귀 버그는 재현 테스트 추가 |
| 72 | +- AppKit 상호작용은 자동화가 어려우면 수동 검증 절차를 문서화 |
| 73 | + |
| 74 | +## 브랜치 / 커밋 / PR 규칙 |
| 75 | + |
| 76 | +- 기본 브랜치에서 직접 작업하지 않음 |
| 77 | +- 권장 브랜치: `feat/...`, `fix/...`, `docs/...`, `ci/...` |
| 78 | +- 구현, 테스트, 문서는 가능하면 분리 커밋 |
| 79 | +- PR에는 배경, 변경점, 테스트, 수동 검증, 리스크를 적음 |
| 80 | + |
| 81 | +## 민감한 경로 / 주의 경로 |
| 82 | + |
| 83 | +- `RhythmReplica/Audio/`: 타이밍 정확도에 직접 영향 |
| 84 | +- `RhythmReplica/Game/`: 판정, 점수, HP 규칙 |
| 85 | +- `docs/chart-format.md`: 외부 호환 계약 문서 |
| 86 | +- `.github/workflows/`: 배포 파이프라인 |
| 87 | + |
| 88 | +## 작업 전 체크리스트 |
| 89 | + |
| 90 | +- 프로젝트 생성 또는 갱신이 필요한가? |
| 91 | +- 변경이 채보 포맷에 영향 주는가? |
| 92 | +- 테스트 fixture 수정이 필요한가? |
| 93 | +- 사용자 설정/자동 저장에 영향이 있는가? |
| 94 | + |
| 95 | +## 작업 후 체크리스트 |
| 96 | + |
| 97 | +- 빌드/테스트 실행 |
| 98 | +- 수동 검증 결과 기록 |
| 99 | +- 문서 갱신 확인 |
| 100 | +- 불완전 기능은 UI에 Disabled/TODO 상태로 명시했는가? |
| 101 | + |
| 102 | +## 절대 하면 안 되는 것 |
| 103 | + |
| 104 | +- 실행하지 않은 테스트를 통과했다고 보고하지 않기 |
| 105 | +- 오디오 시간 대신 프레임 타이머만 믿고 판정하지 않기 |
| 106 | +- 외부 다운로드 도구를 앱 내부 숨은 로직처럼 동작시키지 않기 |
| 107 | +- 권한/약관 우회 기능 추가하지 않기 |
| 108 | +- 문서와 실제 동작을 불일치 상태로 두지 않기 |
0 commit comments