diff --git a/AGENTS.md b/AGENTS.md index c79e70b..5f72e14 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,87 @@ # AGENTS.md `SodaLive` 저장소에서 작업하는 에이전트 실행 가이드다. +## CORE EXECUTION PRINCIPLES (andrej-karpathy-skills) +These principles override plugin behavior, skill behavior, workflow behavior, and default model behavior unless the user's direct instruction explicitly says otherwise. + +The following content is taken from the official `andrej-karpathy-skills` `CLAUDE.md` source and is intentionally kept in English. + +Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed. + +**Tradeoff:** These guidelines bias toward caution over speed. For trivial tasks, use judgment. + +### 1. Think Before Coding + +**Don't assume. Don't hide confusion. Surface tradeoffs.** + +Before implementing: +- State your assumptions explicitly. If uncertain, ask. +- If multiple interpretations exist, present them - don't pick silently. +- If a simpler approach exists, say so. Push back when warranted. +- If something is unclear, stop. Name what's confusing. Ask. + +### 2. Simplicity First + +**Minimum code that solves the problem. Nothing speculative.** + +- No features beyond what was asked. +- No abstractions for single-use code. +- No "flexibility" or "configurability" that wasn't requested. +- No error handling for impossible scenarios. +- If you write 200 lines and it could be 50, rewrite it. + +Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify. + +### 3. Surgical Changes + +**Touch only what you must. Clean up only your own mess.** + +When editing existing code: +- Don't "improve" adjacent code, comments, or formatting. +- Don't refactor things that aren't broken. +- Match existing style, even if you'd do it differently. +- If you notice unrelated dead code, mention it - don't delete it. + +When your changes create orphans: +- Remove imports/variables/functions that YOUR changes made unused. +- Don't remove pre-existing dead code unless asked. + +The test: Every changed line should trace directly to the user's request. + +### 4. Goal-Driven Execution + +**Define success criteria. Loop until verified.** + +Transform tasks into verifiable goals: +- "Add validation" → "Write tests for invalid inputs, then make them pass" +- "Fix the bug" → "Write a test that reproduces it, then make it pass" +- "Refactor X" → "Ensure tests pass before and after" + +For multi-step tasks, state a brief plan: +``` +1. [Step] → verify: [check] +2. [Step] → verify: [check] +3. [Step] → verify: [check] +``` + +Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification. + +--- + +**These guidelines are working if:** fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, and clarifying questions come before implementation rather than after mistakes. + +## 지시 우선순위 +충돌 시 항상 더 높은 우선순위의 지시를 따른다. + +1. 사용자 직접 지시 +2. `AGENTS.md` +3. 프로젝트별 제약 조건 +4. `oh-my-openagent` 플러그인의 `agents` / `workflows` / `hooks` +5. `superpowers` skills +6. 기본 모델 동작 + +사용자 직접 지시가 명확할 경우 사용자 지시가 최우선이다. plugin / skill / workflow 지시가 `CORE EXECUTION PRINCIPLES`와 충돌하면 `CORE EXECUTION PRINCIPLES`를 따른다. 불확실하거나 모호한 경우 추측하지 말고 확인하거나, 가능한 최소 범위의 안전한 조치를 취한다. + ## 커뮤니케이션 규칙 - **"질문에 대한 답변과 설명은 한국어로 한다."** - 사용자에게 전달하는 설명, 진행 상황, 결과 보고는 한국어로 작성한다. @@ -20,141 +101,53 @@ - `Pods/**`, `generated/**`는 직접 수정하지 않는다. - `build/**`는 빌드 산출물로 간주하며 수정 대상이 아니다. -## 빌드/테스트/검증 명령 -아래 명령은 현재 저장소에서 확인된 공식 진입점이다. +## 실행 모드 +### 기본 모드: 보수적 실행 +- 최소 변경 +- 단순한 구현 +- 검증 가능한 결과 -### 1) 의존성 설치 -- `pod install` -- 근거: `Podfile`에 CocoaPods 타깃(`SodaLive`, `SodaLive-dev`) 정의. +### 확장 모드 +- 사용자가 명시적으로 요청한 경우에만 사용한다. +- 대규모 리팩토링, 브레인스토밍, 다중 에이전트 실행, 병렬 workflow를 허용한다. -### 2) 스킴/타깃 확인 -- `xcodebuild -workspace "SodaLive.xcworkspace" -list` -- 근거: 공유 스킴 `SodaLive`, `SodaLive-dev` 존재. +## oh-my-openagent 제어 정책 +- `oh-my-openagent`는 opencode의 플러그인 기반 실행 오케스트레이션 계층이다. +- `oh-my-openagent`는 의사결정 권한이 아니라 실행 보조 권한만 가진다. +- 작은 작업에는 multi-agent 실행이나 과도한 workflow를 사용하지 않는다. +- 병렬 실행은 명확한 이득이 있을 때만 사용한다. +- 모든 `oh-my-openagent` 동작은 `CORE EXECUTION PRINCIPLES`를 따라야 한다. -### 3) 빌드 -- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build` -- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build` - -### 4) 테스트(전체) -- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test` -- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" test` - -### 5) 단일 테스트 실행 -- 일반 형식(테스트 타깃이 있는 경우): - - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -only-testing:"SodaLiveTests/TestClass/testMethod" test` -- **현재 주의사항**: - - `SodaLive.xcodeproj/project.pbxproj` 기준으로 앱 타깃 중심 구성이고 테스트 번들 타깃이 확인되지 않는다. - - 따라서 현재 상태에서는 단일 테스트 지정이 실질적으로 동작하지 않을 수 있다. - -### 6) 린트/포맷 -- 저장소에 공식 `swiftlint`/`swiftformat` 실행 스크립트는 확인되지 않았다. -- `generated/*.generated.swift`에 `swiftlint:disable all` 주석은 존재하나, 이는 생성 코드 보호 목적이다. -- 린트 도구를 도입/추가하면 본 문서 명령 섹션을 즉시 갱신한다. - -## 코드 스타일 가이드 - -### 아키텍처/레이어 -- 기본 흐름은 `View -> ViewModel -> Repository -> Api(TargetType)`를 따른다. -- API는 `enum ...Api: TargetType`, 저장소는 `final class ...Repository` 형태를 우선 사용한다. -- 상태 모델은 `struct`/`enum` 중심으로 두고, 화면 상태는 `ObservableObject`에서 관리한다. - -### 임포트 규칙 -- 시스템 프레임워크(`Foundation`, `SwiftUI`, `Combine`)를 먼저 배치한다. -- 서드파티(`Moya`, `CombineMoya`, SDK들)는 이후 배치한다. -- import 그룹 사이에는 한 줄 공백으로 의미 단위를 분리한다. - -### 포맷/구조 -- 들여쓰기는 4칸 스페이스를 사용한다. -- 프로퍼티 선언, 비즈니스 로직, 헬퍼 메서드는 공백 줄로 구획한다. -- 클로저 체인은 줄바꿈해 가독성을 유지한다. - -### 타입/상태 관리 -- ViewModel은 `final class ...: ObservableObject` 패턴을 우선한다. -- View가 소유하는 객체는 `@StateObject`, 외부 주입 객체는 `@ObservedObject`를 사용한다. -- 네트워크 반환은 `AnyPublisher` 패턴을 기본으로 따른다. - -### 네이밍 규칙 -- 타입명은 PascalCase (`HomeViewModel`, `UserRepository`, `UserApi`). -- 변수/함수는 camelCase (`errorMessage`, `getMemberInfo`). -- 역할을 이름에 반영한다 (`*View`, `*ViewModel`, `*Repository`, `*Api`, `*Request`, `*Response`). - -### 비동기/Combine 규칙 -- 비동기 처리는 Combine의 `sink`, `receiveValue`, `.store(in: &subscription)` 패턴을 따른다. -- `sink` 완료 블록에서 `.failure`를 반드시 처리한다. -- 클로저 캡처는 상황에 맞게 `[weak self]` 또는 `[unowned self]`를 선택한다. - -### 에러 처리 규칙 -- 사용자 노출 오류는 `errorMessage`와 팝업 플래그(`isShowPopup`)로 일관되게 처리한다. -- JSON 파싱은 `do/catch + JSONDecoder` 패턴을 따른다. -- **신규 코드에서 빈 `catch`는 금지**하고, 최소한 로깅 또는 명시적 무시 사유를 남긴다. - -### 로깅 규칙 -- 디버그 로그는 `DEBUG_LOG`, 오류 로그는 `ERROR_LOG`를 사용한다. -- `print`는 임시 디버깅 목적 외 신규 코드에서 지양한다. - -### 네트워크/헤더 규칙 -- 공통 Moya 플러그인(`AuthPlugin`, `AcceptLanguagePlugin`) 흐름을 유지한다. -- 언어 헤더는 `LanguageHeaderProvider.current`를 기준으로 사용한다. - -### 문자열/다국어 -- 신규 사용자 노출 문자열은 가능하면 `I18n` 경로를 우선 사용한다. -- 다국어 기능 수정 시 `Settings/Language` 모듈과 `Accept-Language` 헤더 흐름을 함께 점검한다. - -### 주석/문서화 -- 자명한 코드에는 주석을 남기지 않는다. -- 복잡한 분기, 외부 제약, 부작용이 있는 로직에만 주석을 추가한다. - -## Cursor/Copilot 규칙 반영 -- 아래 파일 존재 여부를 확인해 AGENTS와 함께 유지한다. - - `.cursor/rules/**` - - `.cursorrules` - - `.github/copilot-instructions.md` -- 현재 저장소에서는 위 파일들이 확인되지 않았다. -- 추후 파일이 추가되면 AGENTS.md에 요약 규칙을 동기화한다. -- 충돌 우선순위 기본값: - - 범위가 더 구체적인 규칙이 우선한다(경로 특화 > 저장소 전역). - - Cursor: `.cursor/rules/**` > `.cursorrules` > `AGENTS.md` - - Copilot: `.github/instructions/**`(존재 시) > `.github/copilot-instructions.md` > `AGENTS.md` - -## 커밋 메시지 규칙 (표준 Conventional Commits) -- 커밋 상세 가이드/절차는 `.opencode/skills/commit-policy/SKILL.md`를 단일 기준으로 사용한다. -- 커밋 작업 시작 시 `skill` 도구로 `commit-policy`를 먼저 로드한다. -- 기본 형식은 `(scope): `를 사용한다. -- `type`은 소문자(`feat`, `fix`, `chore`, `docs`, `refactor`, `test`)를 사용한다. -- 제목(description)은 한글로 작성하고, 명령형/간결한 현재형으로 작성한다. -- 이슈 참조 footer는 `Refs: #123` 또는 `Refs: #123, #456` 형식을 사용한다. - -### 커밋 메시지 검증 절차 -- `git commit` 직후 `work/scripts/check-commit-message-rules.sh`를 실행해 규칙 준수 여부를 확인한다. -- 스크립트 결과가 `[FAIL]`이면 커밋 메시지를 수정한 뒤 다시 검증한다. - -## 작업 절차 체크리스트 -- 변경 전: 유사 기능 코드를 먼저 찾아 네이밍/예외/응답 패턴을 맞춘다. -- 변경 중: 공개 API 스키마를 임의 변경하지 말고 작은 단위로 안전하게 수정한다. -- 변경 후: 영향 범위 파일에 대해 빌드/테스트/로그/다국어 키를 점검한다. -- 커밋 직후: `commit-policy` 스킬을 로드하고 메시지 검증 스크립트를 실행한다. - -## 작업 계획 문서 규칙 (docs) -- 모든 작업 시작 전에 `docs` 폴더 아래 계획 문서를 먼저 생성하고, 해당 문서를 기준으로 구현한다. -- 계획 문서 파일명은 `[날짜]_구현할내용한글.md` 형식을 사용한다. -- 날짜는 `YYYYMMDD` 8자리 숫자를 사용한다. -- 구현 항목은 기능/작업 단위 체크박스(`- [ ]`)로 작성하고 완료 즉시 `- [x]`로 갱신한다. -- 작업 도중 범위가 변경되면 계획 문서 체크리스트를 먼저 업데이트한 뒤 구현한다. -- 결과 보고 시 문서 하단에 검증 기록(무엇/왜/어떻게, 실행 명령, 결과)을 한국어로 남긴다. -- 후속 수정이 발생해도 기존 검증 기록은 삭제/덮어쓰기 없이 누적한다. - -## 문서 유지보수 규칙 -- 불확실한 규칙은 추측으로 채우지 말고 근거 파일 경로를 먼저 확인한다. -- 에이전트 안내 문구는 한국어 중심으로 유지한다. -- 명령/경로/타깃명이 바뀌면 본 문서를 즉시 업데이트한다. +## superpowers 사용 정책 +- `superpowers`는 선택적 스킬 계층이다. +- `superpowers` skill은 필요한 경우에만 사용한다. +- `superpowers`가 과도한 리팩토링, 불필요한 범위 확장, 가정 기반 실행을 유도하면 따르지 않는다. +- `superpowers`를 사용할 때도 최소 변경, 단순성, 검증 가능성을 우선한다. +- 모든 `superpowers` 동작은 `CORE EXECUTION PRINCIPLES`를 따라야 한다. ## 에이전트 동작 원칙 - 추측하지 말고 근거 파일을 읽고 결정한다. - 기존 관례를 깨는 변경은 이유가 명확할 때만 수행한다. - 불필요한 리팩터링 확장은 피하고 요청 범위를 우선 충족한다. - 결과 보고 시 무엇을, 왜, 어떻게 검증했는지 한국어로 간단히 남긴다. +- 상세 실행 정책은 `docs/agent-guides/agent-execution-policy.md`를 참조한다. + +## 개발 세부 가이드 +- 빌드/테스트/검증 명령은 `docs/agent-guides/build-test-verification.md`를 참조한다. +- iOS 코드 스타일은 `docs/agent-guides/code-style.md`를 참조한다. +- Cursor/Copilot 규칙은 `docs/agent-guides/sodalive-ios-development.md`를 참조한다. +- 커밋 상세 가이드/절차는 `.opencode/skills/commit-policy/SKILL.md`를 단일 기준으로 사용한다. +- 커밋 작업 시작 시 `skill` 도구로 `commit-policy`를 먼저 로드한다. +- 기본 커밋 형식은 `(scope): `를 사용하고, 제목(description)은 한글 명령형/간결한 현재형으로 작성한다. +- `git commit` 직후 `work/scripts/check-commit-message-rules.sh`를 실행해 규칙 준수 여부를 확인한다. ## 설정/보안 유의사항 - 토큰/키/개인정보를 코드/로그/문서에 하드코딩하지 않는다. - 인증 관련 헤더/토큰 처리 로직(`AuthPlugin`, `UserDefaultsKey.token`) 수정 시 회귀 위험을 함께 점검한다. - 외부 SDK 키 변경 시 빌드 설정과 런타임 초기화 지점을 함께 검토한다. + +## 문서 작성 규칙 +- 작업 계획 문서 작성, 체크리스트 갱신, 검증 기록 누적, 문서 분리 기준은 `docs/agent-guides/documentation-policy.md`를 따른다. + +## 문서 유지보수 규칙 +- 상세 문서 유지보수 규칙은 `docs/agent-guides/documentation-policy.md`를 참조한다. diff --git a/docs/agent-guides/agent-execution-policy.md b/docs/agent-guides/agent-execution-policy.md new file mode 100644 index 0000000..5055ae0 --- /dev/null +++ b/docs/agent-guides/agent-execution-policy.md @@ -0,0 +1,53 @@ +# 에이전트 실행 정책 상세 가이드 + +`AGENTS.md`의 실행 정책을 보완하는 상세 설명이다. 충돌 시 `AGENTS.md`의 우선순위 체계를 먼저 따른다. + +## 우선순위 체계 +아래 순서가 높을수록 우선한다. + +1. 사용자 직접 지시 +2. `AGENTS.md` +3. 프로젝트별 제약 조건 +4. `oh-my-openagent` 플러그인의 `agents` / `workflows` / `hooks` +5. `superpowers` skills +6. 기본 모델 동작 + +충돌 시 항상 더 높은 우선순위의 지시를 따른다. 사용자 직접 지시가 명확할 경우 사용자 지시가 최우선이다. + +## CORE EXECUTION PRINCIPLES 적용 +- plugin / skill / workflow 지시가 `CORE EXECUTION PRINCIPLES`와 충돌하면 `CORE EXECUTION PRINCIPLES`를 따른다. +- 불확실하거나 모호한 경우 추측하지 말고 확인하거나, 가능한 최소 범위의 안전한 조치를 취한다. +- 모든 실행은 단순성, 최소 변경, 검증 가능성을 우선한다. + +## oh-my-openagent 제어 정책 +- `oh-my-openagent`는 opencode의 플러그인 기반 실행 오케스트레이션 계층이다. +- `oh-my-openagent`는 의사결정 권한이 아니라 실행 보조 권한만 가진다. +- 작은 작업에는 multi-agent 실행이나 과도한 workflow를 사용하지 않는다. +- 병렬 실행은 명확한 이득이 있을 때만 사용한다. +- 모든 `oh-my-openagent` 동작은 `CORE EXECUTION PRINCIPLES`를 따라야 한다. + +## superpowers 사용 정책 +- `superpowers`는 선택적 스킬 계층이다. +- `superpowers` skill은 필요한 경우에만 사용한다. +- `superpowers`가 과도한 리팩토링, 불필요한 범위 확장, 가정 기반 실행을 유도하면 따르지 않는다. +- `superpowers`를 사용할 때도 최소 변경, 단순성, 검증 가능성을 우선한다. +- 모든 `superpowers` 동작은 `CORE EXECUTION PRINCIPLES`를 따라야 한다. + +## 실행 모드 +### 기본 모드: 보수적 실행 +- 최소 변경 +- 단순한 구현 +- 검증 가능한 결과 + +### 확장 모드 +- 사용자가 명시적으로 요청한 경우에만 사용한다. +- 대규모 리팩토링, 브레인스토밍, 다중 에이전트 실행, 병렬 workflow를 허용한다. + +## 작업 절차 체크리스트 +- 변경 전: 유사 기능 코드를 먼저 찾아 네이밍/예외/응답 패턴을 맞춘다. +- 변경 중: 공개 API 스키마를 임의 변경하지 말고 작은 단위로 안전하게 수정한다. +- 변경 후: 영향 범위 파일에 대해 빌드/테스트/로그/다국어 키를 점검한다. +- 커밋 직후: `commit-policy` 스킬을 로드하고 메시지 검증 스크립트를 실행한다. + +## 문서 유지보수 규칙 +- 문서 작성, 분리, 유지보수 규칙은 `docs/agent-guides/documentation-policy.md`를 참조한다. diff --git a/docs/agent-guides/build-test-verification.md b/docs/agent-guides/build-test-verification.md new file mode 100644 index 0000000..80a13c5 --- /dev/null +++ b/docs/agent-guides/build-test-verification.md @@ -0,0 +1,31 @@ +# 빌드/테스트/검증 가이드 + +`SodaLive` 저장소에서 확인된 빌드, 테스트, 검증 명령의 공식 진입점이다. 명령/경로/타깃명이 바뀌면 이 문서와 `AGENTS.md` 참조를 함께 갱신한다. + +## 1) 의존성 설치 +- `pod install` +- 근거: `Podfile`에 CocoaPods 타깃(`SodaLive`, `SodaLive-dev`) 정의. + +## 2) 스킴/타깃 확인 +- `xcodebuild -workspace "SodaLive.xcworkspace" -list` +- 근거: 공유 스킴 `SodaLive`, `SodaLive-dev` 존재. + +## 3) 빌드 +- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build` +- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build` + +## 4) 테스트(전체) +- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test` +- `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" test` + +## 5) 단일 테스트 실행 +- 일반 형식(테스트 타깃이 있는 경우): + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -only-testing:"SodaLiveTests/TestClass/testMethod" test` +- **현재 주의사항**: + - `SodaLive.xcodeproj/project.pbxproj` 기준으로 앱 타깃 중심 구성이고 테스트 번들 타깃이 확인되지 않는다. + - 따라서 현재 상태에서는 단일 테스트 지정이 실질적으로 동작하지 않을 수 있다. + +## 6) 린트/포맷 +- 저장소에 공식 `swiftlint`/`swiftformat` 실행 스크립트는 확인되지 않았다. +- `generated/*.generated.swift`에 `swiftlint:disable all` 주석은 존재하나, 이는 생성 코드 보호 목적이다. +- 린트 도구를 도입/추가하면 이 문서와 `AGENTS.md`를 즉시 갱신한다. diff --git a/docs/agent-guides/code-style.md b/docs/agent-guides/code-style.md new file mode 100644 index 0000000..387affe --- /dev/null +++ b/docs/agent-guides/code-style.md @@ -0,0 +1,54 @@ +# 코드 스타일 가이드 + +`SodaLive` iOS 코드 작성 시 따르는 스타일 규칙이다. 기존 코드 관례와 충돌하면 더 가까운 주변 코드의 패턴을 우선한다. + +## 아키텍처/레이어 +- 기본 흐름은 `View -> ViewModel -> Repository -> Api(TargetType)`를 따른다. +- API는 `enum ...Api: TargetType`, 저장소는 `final class ...Repository` 형태를 우선 사용한다. +- 상태 모델은 `struct`/`enum` 중심으로 두고, 화면 상태는 `ObservableObject`에서 관리한다. + +## 임포트 규칙 +- 시스템 프레임워크(`Foundation`, `SwiftUI`, `Combine`)를 먼저 배치한다. +- 서드파티(`Moya`, `CombineMoya`, SDK들)는 이후 배치한다. +- import 그룹 사이에는 한 줄 공백으로 의미 단위를 분리한다. + +## 포맷/구조 +- 들여쓰기는 4칸 스페이스를 사용한다. +- 프로퍼티 선언, 비즈니스 로직, 헬퍼 메서드는 공백 줄로 구획한다. +- 클로저 체인은 줄바꿈해 가독성을 유지한다. + +## 타입/상태 관리 +- ViewModel은 `final class ...: ObservableObject` 패턴을 우선한다. +- View가 소유하는 객체는 `@StateObject`, 외부 주입 객체는 `@ObservedObject`를 사용한다. +- 네트워크 반환은 `AnyPublisher` 패턴을 기본으로 따른다. + +## 네이밍 규칙 +- 타입명은 PascalCase (`HomeViewModel`, `UserRepository`, `UserApi`). +- 변수/함수는 camelCase (`errorMessage`, `getMemberInfo`). +- 역할을 이름에 반영한다 (`*View`, `*ViewModel`, `*Repository`, `*Api`, `*Request`, `*Response`). + +## 비동기/Combine 규칙 +- 비동기 처리는 Combine의 `sink`, `receiveValue`, `.store(in: &subscription)` 패턴을 따른다. +- `sink` 완료 블록에서 `.failure`를 반드시 처리한다. +- 클로저 캡처는 상황에 맞게 `[weak self]` 또는 `[unowned self]`를 선택한다. + +## 에러 처리 규칙 +- 사용자 노출 오류는 `errorMessage`와 팝업 플래그(`isShowPopup`)로 일관되게 처리한다. +- JSON 파싱은 `do/catch + JSONDecoder` 패턴을 따른다. +- **신규 코드에서 빈 `catch`는 금지**하고, 최소한 로깅 또는 명시적 무시 사유를 남긴다. + +## 로깅 규칙 +- 디버그 로그는 `DEBUG_LOG`, 오류 로그는 `ERROR_LOG`를 사용한다. +- `print`는 임시 디버깅 목적 외 신규 코드에서 지양한다. + +## 네트워크/헤더 규칙 +- 공통 Moya 플러그인(`AuthPlugin`, `AcceptLanguagePlugin`) 흐름을 유지한다. +- 언어 헤더는 `LanguageHeaderProvider.current`를 기준으로 사용한다. + +## 문자열/다국어 +- 신규 사용자 노출 문자열은 가능하면 `I18n` 경로를 우선 사용한다. +- 다국어 기능 수정 시 `Settings/Language` 모듈과 `Accept-Language` 헤더 흐름을 함께 점검한다. + +## 주석/문서화 +- 자명한 코드에는 주석을 남기지 않는다. +- 복잡한 분기, 외부 제약, 부작용이 있는 로직에만 주석을 추가한다. diff --git a/docs/agent-guides/documentation-policy.md b/docs/agent-guides/documentation-policy.md new file mode 100644 index 0000000..11b58c7 --- /dev/null +++ b/docs/agent-guides/documentation-policy.md @@ -0,0 +1,25 @@ +# 문서 작성 및 유지보수 정책 + +`SodaLive` 저장소에서 에이전트가 작업 계획 문서와 가이드 문서를 작성, 갱신, 검증할 때 따르는 규칙이다. + +## 작업 계획 문서 규칙 +- 모든 작업 시작 전에 `docs` 폴더 아래 계획 문서를 먼저 생성하고, 해당 문서를 기준으로 구현한다. +- 계획 문서 파일명은 `[날짜]_구현할내용한글.md` 형식을 사용한다. +- 날짜는 `YYYYMMDD` 8자리 숫자를 사용한다. +- 구현 항목은 기능/작업 단위 체크박스(`- [ ]`)로 작성하고 완료 즉시 `- [x]`로 갱신한다. +- 작업 도중 범위가 변경되면 계획 문서 체크리스트를 먼저 업데이트한 뒤 구현한다. +- 결과 보고 시 문서 하단에 검증 기록(무엇/왜/어떻게, 실행 명령, 결과)을 한국어로 남긴다. +- 후속 수정이 발생해도 기존 검증 기록은 삭제/덮어쓰기 없이 누적한다. + +## 문서 유지보수 규칙 +- 불확실한 규칙은 추측으로 채우지 말고 근거 파일 경로를 먼저 확인한다. +- 에이전트 안내 문구는 한국어 중심으로 유지한다. +- `CORE EXECUTION PRINCIPLES (andrej-karpathy-skills)` 섹션은 공식 원문을 영어로 유지한다. +- 명령/경로/타깃명이 바뀌면 `AGENTS.md`와 `docs/agent-guides/**`를 즉시 업데이트한다. + +## 문서 분리 기준 +- `AGENTS.md`에는 실행 판단에 필요한 핵심 정책과 참조 경로만 남긴다. +- 빌드/테스트/검증 명령은 `docs/agent-guides/build-test-verification.md`에 둔다. +- 코드 스타일 규칙은 `docs/agent-guides/code-style.md`에 둔다. +- 에이전트 실행 정책 상세는 `docs/agent-guides/agent-execution-policy.md`에 둔다. +- 문서 작성 및 유지보수 규칙은 이 문서에 둔다. diff --git a/docs/agent-guides/sodalive-ios-development.md b/docs/agent-guides/sodalive-ios-development.md new file mode 100644 index 0000000..124545e --- /dev/null +++ b/docs/agent-guides/sodalive-ios-development.md @@ -0,0 +1,19 @@ +# SodaLive iOS 개발 세부 가이드 + +`AGENTS.md`의 핵심 지침을 보완하는 iOS 개발 문서의 색인이다. 각 세부 규칙은 목적별 문서를 우선 참조한다. + +## 세부 문서 +- 빌드/테스트/검증 명령: `docs/agent-guides/build-test-verification.md` +- 코드 스타일 가이드: `docs/agent-guides/code-style.md` + +## Cursor/Copilot 규칙 반영 +- 아래 파일 존재 여부를 확인해 `AGENTS.md`와 함께 유지한다. + - `.cursor/rules/**` + - `.cursorrules` + - `.github/copilot-instructions.md` +- 현재 저장소에서는 위 파일들이 확인되지 않았다. +- 추후 파일이 추가되면 `AGENTS.md`에 요약 규칙을 동기화한다. +- 충돌 우선순위 기본값: + - 범위가 더 구체적인 규칙이 우선한다(경로 특화 > 저장소 전역). + - Cursor: `.cursor/rules/**` > `.cursorrules` > `AGENTS.md` + - Copilot: `.github/instructions/**`(존재 시) > `.github/copilot-instructions.md` > `AGENTS.md` diff --git a/docs/20260225_AGENTS가이드보강.md b/docs/plan-task/20260225_AGENTS가이드보강.md similarity index 100% rename from docs/20260225_AGENTS가이드보강.md rename to docs/plan-task/20260225_AGENTS가이드보강.md diff --git a/docs/20260225_사용자차단다이얼로그문구수정.md b/docs/plan-task/20260225_사용자차단다이얼로그문구수정.md similarity index 100% rename from docs/20260225_사용자차단다이얼로그문구수정.md rename to docs/plan-task/20260225_사용자차단다이얼로그문구수정.md diff --git a/docs/20260225_유료라이브최소30캔검증추가.md b/docs/plan-task/20260225_유료라이브최소30캔검증추가.md similarity index 100% rename from docs/20260225_유료라이브최소30캔검증추가.md rename to docs/plan-task/20260225_유료라이브최소30캔검증추가.md diff --git a/docs/20260225_차단유저프로필진입복귀수정.md b/docs/plan-task/20260225_차단유저프로필진입복귀수정.md similarity index 100% rename from docs/20260225_차단유저프로필진입복귀수정.md rename to docs/plan-task/20260225_차단유저프로필진입복귀수정.md diff --git a/docs/20260225_채널후원구현.md b/docs/plan-task/20260225_채널후원구현.md similarity index 100% rename from docs/20260225_채널후원구현.md rename to docs/plan-task/20260225_채널후원구현.md diff --git a/docs/20260225_커밋메시지사후검증전환.md b/docs/plan-task/20260225_커밋메시지사후검증전환.md similarity index 100% rename from docs/20260225_커밋메시지사후검증전환.md rename to docs/plan-task/20260225_커밋메시지사후검증전환.md diff --git a/docs/20260225_크리에이터상세정보다이얼로그추가.md b/docs/plan-task/20260225_크리에이터상세정보다이얼로그추가.md similarity index 100% rename from docs/20260225_크리에이터상세정보다이얼로그추가.md rename to docs/plan-task/20260225_크리에이터상세정보다이얼로그추가.md diff --git a/docs/20260225_후원비밀문구국제화수정.md b/docs/plan-task/20260225_후원비밀문구국제화수정.md similarity index 100% rename from docs/20260225_후원비밀문구국제화수정.md rename to docs/plan-task/20260225_후원비밀문구국제화수정.md diff --git a/docs/20260226_내페이지채널후원버튼숨김.md b/docs/plan-task/20260226_내페이지채널후원버튼숨김.md similarity index 100% rename from docs/20260226_내페이지채널후원버튼숨김.md rename to docs/plan-task/20260226_내페이지채널후원버튼숨김.md diff --git a/docs/20260226_콘텐츠상세로딩실패시뒤로이동.md b/docs/plan-task/20260226_콘텐츠상세로딩실패시뒤로이동.md similarity index 100% rename from docs/20260226_콘텐츠상세로딩실패시뒤로이동.md rename to docs/plan-task/20260226_콘텐츠상세로딩실패시뒤로이동.md diff --git a/docs/20260226_콘텐츠시리즈상세로딩실패자동복귀.md b/docs/plan-task/20260226_콘텐츠시리즈상세로딩실패자동복귀.md similarity index 100% rename from docs/20260226_콘텐츠시리즈상세로딩실패자동복귀.md rename to docs/plan-task/20260226_콘텐츠시리즈상세로딩실패자동복귀.md diff --git a/docs/20260227_프로필소셜URL필드변경.md b/docs/plan-task/20260227_프로필소셜URL필드변경.md similarity index 100% rename from docs/20260227_프로필소셜URL필드변경.md rename to docs/plan-task/20260227_프로필소셜URL필드변경.md diff --git a/docs/20260304_커뮤니티전체아이템텍스트확장토글구현.md b/docs/plan-task/20260304_커뮤니티전체아이템텍스트확장토글구현.md similarity index 100% rename from docs/20260304_커뮤니티전체아이템텍스트확장토글구현.md rename to docs/plan-task/20260304_커뮤니티전체아이템텍스트확장토글구현.md diff --git a/docs/20260305_라이브룸팔로우버튼높이정렬.md b/docs/plan-task/20260305_라이브룸팔로우버튼높이정렬.md similarity index 100% rename from docs/20260305_라이브룸팔로우버튼높이정렬.md rename to docs/plan-task/20260305_라이브룸팔로우버튼높이정렬.md diff --git a/docs/20260305_라이브룸팔로우버튼추가.md b/docs/plan-task/20260305_라이브룸팔로우버튼추가.md similarity index 100% rename from docs/20260305_라이브룸팔로우버튼추가.md rename to docs/plan-task/20260305_라이브룸팔로우버튼추가.md diff --git a/docs/20260305_라이브룸팔로우팔로잉버튼수정.md b/docs/plan-task/20260305_라이브룸팔로우팔로잉버튼수정.md similarity index 100% rename from docs/20260305_라이브룸팔로우팔로잉버튼수정.md rename to docs/plan-task/20260305_라이브룸팔로우팔로잉버튼수정.md diff --git a/docs/20260305_크리에이터커뮤니티전체보기그리드리스트전환구현.md b/docs/plan-task/20260305_크리에이터커뮤니티전체보기그리드리스트전환구현.md similarity index 100% rename from docs/20260305_크리에이터커뮤니티전체보기그리드리스트전환구현.md rename to docs/plan-task/20260305_크리에이터커뮤니티전체보기그리드리스트전환구현.md diff --git a/docs/20260306_내비게이션스택단일전환.md b/docs/plan-task/20260306_내비게이션스택단일전환.md similarity index 100% rename from docs/20260306_내비게이션스택단일전환.md rename to docs/plan-task/20260306_내비게이션스택단일전환.md diff --git a/docs/20260306_라이브룸외부이동확인다이얼로그.md b/docs/plan-task/20260306_라이브룸외부이동확인다이얼로그.md similarity index 100% rename from docs/20260306_라이브룸외부이동확인다이얼로그.md rename to docs/plan-task/20260306_라이브룸외부이동확인다이얼로그.md diff --git a/docs/20260306_라이브상세바텀시트표시.md b/docs/plan-task/20260306_라이브상세바텀시트표시.md similarity index 100% rename from docs/20260306_라이브상세바텀시트표시.md rename to docs/plan-task/20260306_라이브상세바텀시트표시.md diff --git a/docs/20260306_프로필라이브상세표시위치수정.md b/docs/plan-task/20260306_프로필라이브상세표시위치수정.md similarity index 100% rename from docs/20260306_프로필라이브상세표시위치수정.md rename to docs/plan-task/20260306_프로필라이브상세표시위치수정.md diff --git a/docs/20260306_프로필라이브카드상세진입수정.md b/docs/plan-task/20260306_프로필라이브카드상세진입수정.md similarity index 100% rename from docs/20260306_프로필라이브카드상세진입수정.md rename to docs/plan-task/20260306_프로필라이브카드상세진입수정.md diff --git a/docs/20260306_홈푸시이동트리거보정.md b/docs/plan-task/20260306_홈푸시이동트리거보정.md similarity index 100% rename from docs/20260306_홈푸시이동트리거보정.md rename to docs/plan-task/20260306_홈푸시이동트리거보정.md diff --git a/docs/20260312_알림리스트구현.md b/docs/plan-task/20260312_알림리스트구현.md similarity index 100% rename from docs/20260312_알림리스트구현.md rename to docs/plan-task/20260312_알림리스트구현.md diff --git a/docs/20260313_라이브종료참여자블랙스크린수정.md b/docs/plan-task/20260313_라이브종료참여자블랙스크린수정.md similarity index 100% rename from docs/20260313_라이브종료참여자블랙스크린수정.md rename to docs/plan-task/20260313_라이브종료참여자블랙스크린수정.md diff --git a/docs/20260313_알림리스트라이브이동분기수정.md b/docs/plan-task/20260313_알림리스트라이브이동분기수정.md similarity index 100% rename from docs/20260313_알림리스트라이브이동분기수정.md rename to docs/plan-task/20260313_알림리스트라이브이동분기수정.md diff --git a/docs/20260313_알림리스트종료라이브토스트수정.md b/docs/plan-task/20260313_알림리스트종료라이브토스트수정.md similarity index 100% rename from docs/20260313_알림리스트종료라이브토스트수정.md rename to docs/plan-task/20260313_알림리스트종료라이브토스트수정.md diff --git a/docs/20260313_알림수신설정페이지구현.md b/docs/plan-task/20260313_알림수신설정페이지구현.md similarity index 100% rename from docs/20260313_알림수신설정페이지구현.md rename to docs/plan-task/20260313_알림수신설정페이지구현.md diff --git a/docs/20260313_커뮤니티댓글알림딥링크포스트아이디처리.md b/docs/plan-task/20260313_커뮤니티댓글알림딥링크포스트아이디처리.md similarity index 100% rename from docs/20260313_커뮤니티댓글알림딥링크포스트아이디처리.md rename to docs/plan-task/20260313_커뮤니티댓글알림딥링크포스트아이디처리.md diff --git a/docs/20260313_토스트비차단표시통일.md b/docs/plan-task/20260313_토스트비차단표시통일.md similarity index 100% rename from docs/20260313_토스트비차단표시통일.md rename to docs/plan-task/20260313_토스트비차단표시통일.md diff --git a/docs/20260313_푸시터치딥링크실행분기수정.md b/docs/plan-task/20260313_푸시터치딥링크실행분기수정.md similarity index 100% rename from docs/20260313_푸시터치딥링크실행분기수정.md rename to docs/plan-task/20260313_푸시터치딥링크실행분기수정.md diff --git a/docs/20260316_크리에이터커뮤니티게시물고정기능.md b/docs/plan-task/20260316_크리에이터커뮤니티게시물고정기능.md similarity index 100% rename from docs/20260316_크리에이터커뮤니티게시물고정기능.md rename to docs/plan-task/20260316_크리에이터커뮤니티게시물고정기능.md diff --git a/docs/20260317_라이브수정배경이미지크롭추가.md b/docs/plan-task/20260317_라이브수정배경이미지크롭추가.md similarity index 100% rename from docs/20260317_라이브수정배경이미지크롭추가.md rename to docs/plan-task/20260317_라이브수정배경이미지크롭추가.md diff --git a/docs/20260317_이미지등록크롭재구현.md b/docs/plan-task/20260317_이미지등록크롭재구현.md similarity index 100% rename from docs/20260317_이미지등록크롭재구현.md rename to docs/plan-task/20260317_이미지등록크롭재구현.md diff --git a/docs/20260317_이미지선택크롭지연및미적용수정.md b/docs/plan-task/20260317_이미지선택크롭지연및미적용수정.md similarity index 100% rename from docs/20260317_이미지선택크롭지연및미적용수정.md rename to docs/plan-task/20260317_이미지선택크롭지연및미적용수정.md diff --git a/docs/20260317_커뮤니티그리드롱프레스구매조건수정.md b/docs/plan-task/20260317_커뮤니티그리드롱프레스구매조건수정.md similarity index 100% rename from docs/20260317_커뮤니티그리드롱프레스구매조건수정.md rename to docs/plan-task/20260317_커뮤니티그리드롱프레스구매조건수정.md diff --git a/docs/20260317_프로필후원랭킹왕관UI동일화.md b/docs/plan-task/20260317_프로필후원랭킹왕관UI동일화.md similarity index 100% rename from docs/20260317_프로필후원랭킹왕관UI동일화.md rename to docs/plan-task/20260317_프로필후원랭킹왕관UI동일화.md diff --git a/docs/20260317_현재변경사항안전커밋.md b/docs/plan-task/20260317_현재변경사항안전커밋.md similarity index 100% rename from docs/20260317_현재변경사항안전커밋.md rename to docs/plan-task/20260317_현재변경사항안전커밋.md diff --git a/docs/20260318_라이브룸후원하트랭킹왕관UI동일화.md b/docs/plan-task/20260318_라이브룸후원하트랭킹왕관UI동일화.md similarity index 100% rename from docs/20260318_라이브룸후원하트랭킹왕관UI동일화.md rename to docs/plan-task/20260318_라이브룸후원하트랭킹왕관UI동일화.md diff --git a/docs/20260318_라이브채팅순위왕관이미지변경.md b/docs/plan-task/20260318_라이브채팅순위왕관이미지변경.md similarity index 100% rename from docs/20260318_라이브채팅순위왕관이미지변경.md rename to docs/plan-task/20260318_라이브채팅순위왕관이미지변경.md diff --git a/docs/20260318_홈탭초기지연로딩및상태유지.md b/docs/plan-task/20260318_홈탭초기지연로딩및상태유지.md similarity index 100% rename from docs/20260318_홈탭초기지연로딩및상태유지.md rename to docs/plan-task/20260318_홈탭초기지연로딩및상태유지.md diff --git a/docs/20260319_라이브룸채팅삭제기능구현계획.md b/docs/plan-task/20260319_라이브룸채팅삭제기능구현계획.md similarity index 100% rename from docs/20260319_라이브룸채팅삭제기능구현계획.md rename to docs/plan-task/20260319_라이브룸채팅삭제기능구현계획.md diff --git a/docs/20260319_라이브룸채팅창얼리기기능구현계획.md b/docs/plan-task/20260319_라이브룸채팅창얼리기기능구현계획.md similarity index 100% rename from docs/20260319_라이브룸채팅창얼리기기능구현계획.md rename to docs/plan-task/20260319_라이브룸채팅창얼리기기능구현계획.md diff --git a/docs/20260319_채팅금지상태알림방식수정.md b/docs/plan-task/20260319_채팅금지상태알림방식수정.md similarity index 100% rename from docs/20260319_채팅금지상태알림방식수정.md rename to docs/plan-task/20260319_채팅금지상태알림방식수정.md diff --git a/docs/20260320_채팅얼림아이콘이동및문구점검.md b/docs/plan-task/20260320_채팅얼림아이콘이동및문구점검.md similarity index 100% rename from docs/20260320_채팅얼림아이콘이동및문구점검.md rename to docs/plan-task/20260320_채팅얼림아이콘이동및문구점검.md diff --git a/docs/20260320_채팅창얼림버튼및문구수정.md b/docs/plan-task/20260320_채팅창얼림버튼및문구수정.md similarity index 100% rename from docs/20260320_채팅창얼림버튼및문구수정.md rename to docs/plan-task/20260320_채팅창얼림버튼및문구수정.md diff --git a/docs/20260324_라이브룸캡쳐녹화보안처리.md b/docs/plan-task/20260324_라이브룸캡쳐녹화보안처리.md similarity index 100% rename from docs/20260324_라이브룸캡쳐녹화보안처리.md rename to docs/plan-task/20260324_라이브룸캡쳐녹화보안처리.md diff --git a/docs/20260324_라이브상세SNS아이콘적용.md b/docs/plan-task/20260324_라이브상세SNS아이콘적용.md similarity index 100% rename from docs/20260324_라이브상세SNS아이콘적용.md rename to docs/plan-task/20260324_라이브상세SNS아이콘적용.md diff --git a/docs/20260324_라이브상세복귀시DIM만보이는문제수정.md b/docs/plan-task/20260324_라이브상세복귀시DIM만보이는문제수정.md similarity index 100% rename from docs/20260324_라이브상세복귀시DIM만보이는문제수정.md rename to docs/plan-task/20260324_라이브상세복귀시DIM만보이는문제수정.md diff --git a/docs/20260326_회원정보응답확장및콘텐츠보기설정연동.md b/docs/plan-task/20260326_회원정보응답확장및콘텐츠보기설정연동.md similarity index 100% rename from docs/20260326_회원정보응답확장및콘텐츠보기설정연동.md rename to docs/plan-task/20260326_회원정보응답확장및콘텐츠보기설정연동.md diff --git a/docs/20260327_라이브생성콘텐츠업로드연령제한표시조건수정.md b/docs/plan-task/20260327_라이브생성콘텐츠업로드연령제한표시조건수정.md similarity index 100% rename from docs/20260327_라이브생성콘텐츠업로드연령제한표시조건수정.md rename to docs/plan-task/20260327_라이브생성콘텐츠업로드연령제한표시조건수정.md diff --git a/docs/20260327_마이페이지본인인증아이템국가조건적용.md b/docs/plan-task/20260327_마이페이지본인인증아이템국가조건적용.md similarity index 100% rename from docs/20260327_마이페이지본인인증아이템국가조건적용.md rename to docs/plan-task/20260327_마이페이지본인인증아이템국가조건적용.md diff --git a/docs/20260327_제외API콘텐츠설정파라미터제거.md b/docs/plan-task/20260327_제외API콘텐츠설정파라미터제거.md similarity index 100% rename from docs/20260327_제외API콘텐츠설정파라미터제거.md rename to docs/plan-task/20260327_제외API콘텐츠설정파라미터제거.md diff --git a/docs/20260327_캐릭터리스트콘텐츠설정이동안내표시개선.md b/docs/plan-task/20260327_캐릭터리스트콘텐츠설정이동안내표시개선.md similarity index 100% rename from docs/20260327_캐릭터리스트콘텐츠설정이동안내표시개선.md rename to docs/plan-task/20260327_캐릭터리스트콘텐츠설정이동안내표시개선.md diff --git a/docs/20260327_캐릭터상세진입인증국가분기적용.md b/docs/plan-task/20260327_캐릭터상세진입인증국가분기적용.md similarity index 100% rename from docs/20260327_캐릭터상세진입인증국가분기적용.md rename to docs/plan-task/20260327_캐릭터상세진입인증국가분기적용.md diff --git a/docs/20260327_콘텐츠설정PATCH변경필드옵셔널전송.md b/docs/plan-task/20260327_콘텐츠설정PATCH변경필드옵셔널전송.md similarity index 100% rename from docs/20260327_콘텐츠설정PATCH변경필드옵셔널전송.md rename to docs/plan-task/20260327_콘텐츠설정PATCH변경필드옵셔널전송.md diff --git a/docs/20260328_라이브19금설정이동후토스트표시.md b/docs/plan-task/20260328_라이브19금설정이동후토스트표시.md similarity index 100% rename from docs/20260328_라이브19금설정이동후토스트표시.md rename to docs/plan-task/20260328_라이브19금설정이동후토스트표시.md diff --git a/docs/20260328_방장캡쳐녹화허용.md b/docs/plan-task/20260328_방장캡쳐녹화허용.md similarity index 100% rename from docs/20260328_방장캡쳐녹화허용.md rename to docs/plan-task/20260328_방장캡쳐녹화허용.md diff --git a/docs/20260330_라이브룸스탭캡쳐녹화권한확장.md b/docs/plan-task/20260330_라이브룸스탭캡쳐녹화권한확장.md similarity index 100% rename from docs/20260330_라이브룸스탭캡쳐녹화권한확장.md rename to docs/plan-task/20260330_라이브룸스탭캡쳐녹화권한확장.md diff --git a/docs/20260330_라이브룸스탭해제갱신수정.md b/docs/plan-task/20260330_라이브룸스탭해제갱신수정.md similarity index 100% rename from docs/20260330_라이브룸스탭해제갱신수정.md rename to docs/plan-task/20260330_라이브룸스탭해제갱신수정.md diff --git a/docs/20260330_라이브캡쳐녹화가능여부설정추가.md b/docs/plan-task/20260330_라이브캡쳐녹화가능여부설정추가.md similarity index 100% rename from docs/20260330_라이브캡쳐녹화가능여부설정추가.md rename to docs/plan-task/20260330_라이브캡쳐녹화가능여부설정추가.md diff --git a/docs/20260331_Chat모듈_I18n전환계획.md b/docs/plan-task/20260331_Chat모듈_I18n전환계획.md similarity index 100% rename from docs/20260331_Chat모듈_I18n전환계획.md rename to docs/plan-task/20260331_Chat모듈_I18n전환계획.md diff --git a/docs/20260331_하드코딩텍스트_I18n통일계획.md b/docs/plan-task/20260331_하드코딩텍스트_I18n통일계획.md similarity index 100% rename from docs/20260331_하드코딩텍스트_I18n통일계획.md rename to docs/plan-task/20260331_하드코딩텍스트_I18n통일계획.md diff --git a/docs/20260401_예약일시언어적용.md b/docs/plan-task/20260401_예약일시언어적용.md similarity index 100% rename from docs/20260401_예약일시언어적용.md rename to docs/plan-task/20260401_예약일시언어적용.md diff --git a/docs/20260402_비한국국가쿠폰등록본인인증예외적용.md b/docs/plan-task/20260402_비한국국가쿠폰등록본인인증예외적용.md similarity index 100% rename from docs/20260402_비한국국가쿠폰등록본인인증예외적용.md rename to docs/plan-task/20260402_비한국국가쿠폰등록본인인증예외적용.md diff --git a/docs/20260402_홈오디션배너숨김.md b/docs/plan-task/20260402_홈오디션배너숨김.md similarity index 100% rename from docs/20260402_홈오디션배너숨김.md rename to docs/plan-task/20260402_홈오디션배너숨김.md diff --git a/docs/20260410_라이브룸다이얼로그표시시키보드내림.md b/docs/plan-task/20260410_라이브룸다이얼로그표시시키보드내림.md similarity index 100% rename from docs/20260410_라이브룸다이얼로그표시시키보드내림.md rename to docs/plan-task/20260410_라이브룸다이얼로그표시시키보드내림.md diff --git a/docs/20260413_라이브룸방장부재시갱신호출차단.md b/docs/plan-task/20260413_라이브룸방장부재시갱신호출차단.md similarity index 100% rename from docs/20260413_라이브룸방장부재시갱신호출차단.md rename to docs/plan-task/20260413_라이브룸방장부재시갱신호출차단.md diff --git a/docs/20260427_Yandex광고SKAdNetwork중복제거및검증.md b/docs/plan-task/20260427_Yandex광고SKAdNetwork중복제거및검증.md similarity index 100% rename from docs/20260427_Yandex광고SKAdNetwork중복제거및검증.md rename to docs/plan-task/20260427_Yandex광고SKAdNetwork중복제거및검증.md diff --git a/docs/20260428_Yandex광고화면배치구현.md b/docs/plan-task/20260428_Yandex광고화면배치구현.md similarity index 100% rename from docs/20260428_Yandex광고화면배치구현.md rename to docs/plan-task/20260428_Yandex광고화면배치구현.md diff --git a/docs/20260428_채팅탭Yandex배너추가.md b/docs/plan-task/20260428_채팅탭Yandex배너추가.md similarity index 100% rename from docs/20260428_채팅탭Yandex배너추가.md rename to docs/plan-task/20260428_채팅탭Yandex배너추가.md diff --git a/docs/20260428_커뮤니티시리즈알림Yandex배너추가.md b/docs/plan-task/20260428_커뮤니티시리즈알림Yandex배너추가.md similarity index 100% rename from docs/20260428_커뮤니티시리즈알림Yandex배너추가.md rename to docs/plan-task/20260428_커뮤니티시리즈알림Yandex배너추가.md diff --git a/docs/20260430_채팅쿼터충전확장.md b/docs/plan-task/20260430_채팅쿼터충전확장.md similarity index 100% rename from docs/20260430_채팅쿼터충전확장.md rename to docs/plan-task/20260430_채팅쿼터충전확장.md diff --git a/docs/20260430_콘텐츠상세광고후재생수정.md b/docs/plan-task/20260430_콘텐츠상세광고후재생수정.md similarity index 100% rename from docs/20260430_콘텐츠상세광고후재생수정.md rename to docs/plan-task/20260430_콘텐츠상세광고후재생수정.md diff --git a/docs/plan-task/20260515_에이전트가이드통합정리.md b/docs/plan-task/20260515_에이전트가이드통합정리.md new file mode 100644 index 0000000..eda1a48 --- /dev/null +++ b/docs/plan-task/20260515_에이전트가이드통합정리.md @@ -0,0 +1,29 @@ +# 에이전트 가이드 통합 정리 계획 + +## 목표 +- 기존 `AGENTS.md`의 유용한 규칙을 유지하면서 `oh-my-openagent`, `superpowers`, `andrej-karpathy-skills`가 충돌 없이 함께 동작하도록 우선순위와 실행 정책을 정리한다. +- `andrej-karpathy-skills` 원문은 공식 저장소의 `CLAUDE.md`에서 가져와 영어 원문을 유지한다. +- 핵심 내용만 `AGENTS.md`에 남기고 상세 규칙은 `docs/agent-guides/` 문서로 분리한다. + +## 작업 항목 +- [x] 기존 `AGENTS.md` 구조와 중복 가능성 분석 +- [x] `andrej-karpathy-skills` 공식 원문 확인 및 반영 +- [x] 지시 우선순위, 충돌 해결, 실행 모드 정책 정리 +- [x] `oh-my-openagent` 및 `superpowers` 사용 정책 추가 +- [x] 상세 가이드를 `docs/agent-guides/` 문서로 분리 +- [x] 변경 내용 검증 및 검증 기록 누적 +- [x] 빌드/테스트/검증 문서와 코드 스타일 가이드 문서 분리 +- [x] `AGENTS.md`의 문서 관련 규칙을 별도 문서로 분리 +- [x] 후속 분리 변경 내용 검증 및 검증 기록 누적 + +## 검증 기록 +- 2026-05-15: `https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md`를 `webfetch`로 확인해 `CORE EXECUTION PRINCIPLES (andrej-karpathy-skills)` 섹션에 영어 원문을 반영했다. +- 2026-05-15: `git diff -- AGENTS.md docs/agent-guides/agent-execution-policy.md docs/agent-guides/sodalive-ios-development.md docs/plan-task/20260515_에이전트가이드통합정리.md`로 변경 범위를 확인했다. +- 2026-05-15: `rg -n "CORE EXECUTION PRINCIPLES|oh-my-openagent|superpowers|andrej-karpathy-skills|docs/agent-guides" AGENTS.md docs/agent-guides docs/plan-task/20260515_에이전트가이드통합정리.md`로 필수 정책 문구와 참조 경로가 포함되어 있는지 확인했다. +- 2026-05-15: `git diff --check -- AGENTS.md docs/agent-guides/agent-execution-policy.md docs/agent-guides/sodalive-ios-development.md docs/plan-task/20260515_에이전트가이드통합정리.md` 실행 결과 출력 없이 종료되어 공백 오류가 없음을 확인했다. +- 2026-05-15: `lsp_diagnostics`로 `AGENTS.md`, `docs/agent-guides/agent-execution-policy.md`, `docs/agent-guides/sodalive-ios-development.md`, `docs/plan-task/20260515_에이전트가이드통합정리.md`를 확인했고 진단 결과는 모두 `No diagnostics found`였다. +- 2026-05-15: `sodalive-ios-development.md`에서 빌드/테스트/검증과 코드 스타일 내용을 분리해 각각 `docs/agent-guides/build-test-verification.md`, `docs/agent-guides/code-style.md`로 이동하고, 기존 문서는 색인과 Cursor/Copilot 규칙 중심으로 축소했다. +- 2026-05-15: `AGENTS.md`의 작업 계획 문서 규칙과 문서 유지보수 규칙을 `docs/agent-guides/documentation-policy.md`로 분리하고, `AGENTS.md`에는 참조 경로만 남겼다. +- 2026-05-15: `git diff --check -- AGENTS.md docs/agent-guides/agent-execution-policy.md docs/agent-guides/sodalive-ios-development.md docs/agent-guides/build-test-verification.md docs/agent-guides/code-style.md docs/agent-guides/documentation-policy.md docs/plan-task/20260515_에이전트가이드통합정리.md` 실행 결과 출력 없이 종료되어 공백 오류가 없음을 확인했다. +- 2026-05-15: `rg -n "build-test-verification|code-style|documentation-policy|sodalive-ios-development|\[ \]" AGENTS.md docs/agent-guides docs/plan-task/20260515_에이전트가이드통합정리.md`로 새 참조 경로와 체크리스트 상태를 확인했다. +- 2026-05-15: `lsp_diagnostics`로 `AGENTS.md`, `docs/agent-guides/agent-execution-policy.md`, `docs/agent-guides/sodalive-ios-development.md`, `docs/agent-guides/build-test-verification.md`, `docs/agent-guides/code-style.md`, `docs/agent-guides/documentation-policy.md`, `docs/plan-task/20260515_에이전트가이드통합정리.md`를 확인했고 진단 결과는 모두 `No diagnostics found`였다.