Lymo는 사용자가 가져온 곡을 가사, 번역, 구절별 맥락, 문화적 배경, AI 해석을 통해 더 깊이 읽고 이해하도록 돕는 크로스플랫폼 음악 리더 앱이다.
핵심 약속은 곡을 Lymo로 가져온 뒤, 읽고 이해하는 것이다.
- 검증된 사실, 라이선스가 부여된 데이터 및 제공업체 데이터, 커뮤니티 기여, AI 추론을 데이터 모델과 사용자 경험에서 명확히 구분할 것.
- AI 추론을 검증된 사실처럼 제시하지 않을 것.
- 가사와 제공업체 데이터를 권리 및 정책에 민감한 정보로 취급할 것. 데이터 소스를 제품에 포함하기 전에 라이선스와 제공업체 약관을 검증할 것.
다음 개념을 절대 혼동하지 않을 것.
TrackImport: 사용자가 Lymo로 가져온 곡을 식별하기 위한 요청.CanonicalTrack: 제공업체에 종속되지 않도록 정규화된 곡 메타데이터.PlaybackCapability/PlaybackClock: 재생 상태와 위치를 관찰할 수 있는 선택적 기능.AnalysisJob: 가사, 번역 및 해석을 준비하는 비동기 작업.
곡을 가져오는 행위가 신뢰할 수 있는 재생 동기화를 보장한다고 간주하지 않을 것. 모든 리더 경험은 PlaybackCapability 없이도 완결되도록 구현할 것.
곡을 특정할 수 없는 입력에서 임의로 곡을 추측하지 않을 것. 추가 선택이 필요하면 사용자에게 명시적인 선택 절차를 제공할 것.
- 외부 입력을 신뢰하지 않을 것. 허용된 제공업체 도메인과 정규화된 제공업체/리소스 ID만 수용하고, 공유된 URL을 임의로 가져오지 않을 것.
- 비밀 정보, API 키 및 사용자 토큰을 소스 제어와 클라이언트 로그에 남기지 않을 것.
- 서버 엔드포인트는 인증, 권한 부여, 입력 검증, 악용/요청 속도 제한, 멱등성을 고려해 설계할 것.
- 오프라인 동작, 중복 요청, 프로세스 종료 및 재시도 가능한 실패를 명시적으로 모델링할 것.
- 사용자가 시작한 가져오기 및 분석 작업은 일시적인 UI나 알림에만 의존하지 않고 나중에 복구할 수 있도록 설계할 것.
- 플랫폼 또는 외부 서비스가 보장하지 않는 동작을 제품 기능으로 약속하지 않을 것. 신뢰할 수 없는 경우에도 사용할 수 있는 폴백을 제공할 것.
- 이 파일은 Lymo의 장기 제품 정의, 신뢰·도메인 경계와 저장소 전체에 적용되는 최상위 원칙만 관리할 것.
- 변경 가능한 기술 선택, 지원 범위, 검증 상태와 상세 설계는 각각의 정본 문서에서 관리할 것.
- 모든 개발 작업에서
docs/DEVELOPMENT_CONVENTIONS.md를 따를 것. - 구현에 앞서 변경 가능성이 높은 기술 선택, 지원 범위, 검증 상태를
docs/PROJECT_CONTEXT.md에서 확인할 것. - 모든 문서는 사람이 빠르게 이해할 수 있도록 간결하게 작성하되, 결정과 구현에 필요한 내용은 생략하지 않을 것.
- 이 파일과 다른 문서가 충돌할 경우 이 파일의 제품 불변 정의와 경계를 우선할 것.
- 아키텍처, 지원 범위 또는 플랫폼 제약이 달라지면 이 파일에 한시적인 예외를 추가하지 말고 프로젝트 현황 문서나 ADR을 갱신할 것.