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.
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.
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.
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.
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.
- 앱 이름: Runnect (러넥트) — 러닝과 일상을 연결하는 달리기 앱
- 플랫폼: iOS (UIKit)
- 언어: Swift 5.9
- 최소 타겟: iOS 17.0
- Xcode: 16.0
- 패키지 관리: Swift Package Manager (SPM) — v2.5.0에서 CocoaPods → SPM 마이그레이션 완료
- 앱스토어: 배포 중
본 레포는 public 저장소. 아래 파일은 절대 commit / push 금지:
| 파일 | 포함 secret |
|---|---|
Runnect-iOS/Network/Foundation/Config.swift |
서버 baseURL, kakaoRestAPIKey, tmapAPIKey, kakaoNativeAppKey, naverMapClientId, 개발자 패스워드 |
Runnect-iOS/Network/Foundation/AdConfig.swift |
AdMob 광고 단위 ID |
Runnect-iOS/GoogleService-Info.plist |
Firebase 설정 |
관리 흐름:
- 위 파일 모두
.gitignore등록 + 메인 레포에서 추적 해제됨 - 실제 값은 별도 private 레포
thingineeer/thingineeer-env의Runnect-env/에서 관리 - 신규 셋업:
gh auth login후 git root 에서./bin/setup한 줄로 자동 배치ghCLI 본인 계정 인증을 활용해 private 레포 접근. 권한 없는 계정은 자동 차단
작업 시 주의:
git status --ignored가 아닌 일반 status 에는 안 보이지만, 실수로라도git add -f/ staged 처리 / commit 금지- 신규 secret 추가 시 위 패턴 따를 것 (gitignore 등록 + private 레포 보관)
- AI 도구(Claude 등) 사용 시에도 이 규칙 적용 — Config/AdConfig 변경분이 PR diff 에 절대 포함되면 안 됨
| 라이브러리 | 용도 |
|---|---|
| Moya | 네트워킹 |
| SnapKit | Auto Layout |
| Then | UI 편의 |
| Kingfisher | 이미지 로딩 |
| NMapsMap | 네이버 지도 SDK |
| Google-Mobile-Ads-SDK | AdMob 광고 |
| FirebaseAnalytics | 애널리틱스 |
의존성은 Runnect-iOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved 에서 관리. Xcode 가 자동 resolve.
- 메인 브랜치:
develop - Feature 브랜치:
feature/v{버전}-{설명} - Fix 브랜치:
fix/v{버전}-{설명} - Chore 브랜치:
chore/v{버전}-{설명} - PR 대상: 본체 레포
Runnect/Runnect-iOS→develop - 포크:
thingineeer/Runnect-iOS - 머지 후: 로컬 + 리모트 브랜치 삭제
- 형식:
<type>: <한국어 명사형 제목> - 타입: feat, fix, refactor, style, docs, chore, test
- 제목: 한국어, 50자 이내, 명사형
- 본문:
-불릿 포인트로 how 설명 - Author:
thingineeer <dlaudwls1203@gmail.com> - 금지: Co-Authored-By: Claude, Generated with Claude Code 등 AI 관련 표기 절대 금지
- 제목 형식:
[Prefix] - 한국어 제목 - Prefix: Feat, Fix, Refactor, Style, Docs, Chore, Test (첫글자 대문자)
- 예시:
[Feat] - 코스 발견 성능 최적화 및 UX 개선 - Assignee: 항상
--assignee @me(thingineeer) 지정 - 성과 기록: 빌드 시간 단축, 코드 라인 수 변화, 성능 수치 등 측정 가능한 데이터는 PR 본문에 반드시 포함
- Labels: PR prefix에 맞는 라벨 +
명진😼항상 추가 (Feat, Fix, Refactor, Chore, Del, UX, Setting, Docs 등) - 본문 템플릿 (
.github/PULL_REQUEST_TEMPLATE.md):- 🌱 작업한 내용
- 🌱 PR Point
- 📸 스크린샷
- 📮 관련 이슈
Runnect-iOS/
├── Runnect-iOS/
│ ├── Presentation/ # 화면별 UI (VC, View, Cell)
│ │ ├── CourseDiscovery/ # 코스 발견
│ │ ├── CourseDrawing/ # 코스 그리기
│ │ ├── CourseStorage/ # 보관함
│ │ └── MyPage/ # 마이페이지
│ ├── Network/ # API 통신 (Moya)
│ ├── Global/ # 공통 유틸, 익스텐션
│ └── Resource/ # 에셋, 폰트
├── .github/ # PR 템플릿, 워크플로우
├── bin/setup # 신규 클론 환경 자동 셋업 (secret 배치)
└── Runnect-iOS.xcodeproj # SPM 의존성 포함
fastlane release version:X.X.X— 빌드 + App Store 업로드fastlane submit_review version:X.X.X— 심사 제출 (바이너리 업로드 없이)fastlane update_metadata version:X.X.X— 메타데이터만 수정 (심사 중이면 자동 취소 후 재제출)fastlane beta version:X.X.X— TestFlight 배포- 주의:
bundle exec사용 불가 (bundler 버전 이슈) →fastlane직접 실행 - 주의:
fastlane/metadata/가 gitignored →git add -f필요 - 코드 서명: match 대신 자동 프로비저닝 (
update_code_signing_settings) 사용
- 현재 버전: v2.5.0 (CocoaPods → SPM 마이그레이션, App Store 업로드)
- iOS 버전 참고: iOS 18 다음이 iOS 26 (19~25 없음)