Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 .claude/hooks/auto-annotate-reminder.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
# UserPromptSubmit hook — 코드 이해/동작 질문 시 답변 후 해당 코드에 주석/KDoc 을
# 자동 보강하도록 매 프롬프트에 reminder 를 additionalContext 로 주입한다.
# (이전엔 user-memory feedback_auto_annotate_on_question.md 에 있던 동작을 훅으로 일원화)
cat > /dev/null 2>&1 # stdin(prompt JSON) 소비 (SIGPIPE 방지)
cat <<'JSON'
{"hookSpecificOutput":{"hookEventName":"UserPromptSubmit","additionalContext":"[자동 주석 규칙] 이번 사용자 입력이 코드의 이해·동작·이유를 묻는 질문이라면, 채팅 답변만으로 끝내지 말고 답변 직후 질문 대상이 된 코드 파일에 질문 내용을 반영한 주석/KDoc 을 보강하라. 단순 작업 지시나 코드 수정 요청에는 적용하지 않는다."}}
JSON
38 changes: 38 additions & 0 deletions .claude/hooks/source-authority-reminder.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env bash
# UserPromptSubmit hook — 버전/라이브러리/빌드툴체인/디자인 등 "공식 문서 권위"가
# 필요한 질문·작업을 키워드로 감지하면, 역할별 권위 소스 분기 규칙(A~F + Compose↔Kotlin 횡단)을
# additionalContext 로 주입한다. (상시 로드 대신 관련 프롬프트에서만 주입해 컨텍스트 절약)
input="$(cat)"
text="$(printf '%s' "$input" | jq -r '.prompt // empty' 2>/dev/null)"
[ -z "$text" ] && exit 0

# 버전/의존성/빌드툴체인/디자인 관련 키워드 (대소문자 무시)
if ! printf '%s' "$text" | grep -qiE '버전|version|라이브러리|library|의존성|depend|업그레이드|upgrade|마이그레이션|migrat|AGP|gradle|kotlin|compose|material|androidx|maven|좌표|핀|호환|compatib|릴리스|release|stable|KSP|hilt|retrofit|okhttp|coil|compilesdk|targetsdk|minsdk|jdk|libs\.versions|build\.gradle'; then
exit 0
fi

RULES="$(cat <<'RULESEOF'
[작업 원칙 — 역할별 공식 문서 권위 소스]
소스는 평면적 우선순위가 아니라 역할로 구분 — "무엇을 찾느냐"로 분기해 질문 유형에 맞는 권위 소스를 쓸 것. 핵심 문서는 WebFetch 로 원문 확인하고, 답변·커밋 메시지에 출처 URL 을 명시한다.

A. 라이브러리(AndroidX): 사용법·API·버전
1. 사용법·API·동작·마이그레이션 → developer.android.com (Architecture Guide, Library 문서, release notes). 단 release notes 상단 요약 박스(Latest/Stable/RC/Beta/Alpha)는 stable 승격을 늦게 반영하므로 "최신 버전 숫자"의 근거로는 쓰지 말 것.
2. 최신 Stable 좌표(버전 권위) → Google Maven. 브라우징 maven.google.com, 좌표 확정은 아티팩트별 메타데이터 dl.google.com/dl/android/maven2/<group을 슬래시로>/<artifact>/maven-metadata.xml. 핀 박기 전 stable 존재 여부는 여기서 확정.
- 보조: AndroidX Atom 피드 developer.android.com/feeds/androidx-release-notes.xml (라이브러리 전용 — AGP/Gradle 은 여기 안 뜸 → C). fallback 미러(캐시·지연 주의): androidx.tech 또는 mvnrepository.com (1차 실패 시에만).
3. API 시그니처·소스·커밋 → android.googlesource.com / AndroidX GitHub. 버전 체크용 아님.

B. 언어(Kotlin) → kotlinlang.org. 문법·표준 라이브러리·coroutines/Flow 1차(developer.android.com 아님). 버전 좌표는 kotlinlang.org/docs 또는 GitHub JetBrains/kotlin releases.

C. 빌드 툴체인(AGP/Gradle/Studio/JDK/Build Tools/API level) → developer.android.com/build/releases. AGP 좌표는 dl.google.com/.../com/android/tools/build/gradle/maven-metadata.xml. 핵심인 AGP↔Gradle↔Studio↔JDK↔compileSdk 호환 행렬은 .../build/releases/about-agp + 버전별 release notes 가 권위. Gradle 쪽 행렬은 docs.gradle.org/current/userguide/compatibility.html.

D. 디자인(Material 3) → m3.material.io. 가이드라인·토큰·컴포넌트 권위. I/O 2026부터 Material Android = Compose-first, MDC-Android(Views)는 유지보수 모드 → 새 작업은 Compose Material3 기준.

E. 알려진 버그 → issuetracker.google.com (공개 Google Issue Tracker). 핀 박은 버전 오동작 시 "알려진 버그냐/픽스 예정이냐"는 release notes 아니라 여기.

F. (선택) 정준 패턴·샘플 → github.com/android (nowinandroid, architecture-samples, compose-samples).

횡단 — Compose↔Kotlin: Kotlin 2.0+ 는 Compose 컴파일러 버전 = Kotlin 버전. Compose Compiler Gradle plugin(org.jetbrains.kotlin.plugin.compose, version = Kotlin 버전)으로 적용. "Compose to Kotlin Compatibility Map"은 1.9 이하 전용 legacy — 2.0+ 에선 kotlinCompilerExtensionVersion 따로 핀 박지 말 것.
RULESEOF
)"

jq -n --arg ctx "$RULES" '{hookSpecificOutput:{hookEventName:"UserPromptSubmit",additionalContext:$ctx}}'
16 changes: 16 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,22 @@
}
]
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/auto-annotate-reminder.sh\"",
"timeout": 5
},
{
"type": "command",
"command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/source-authority-reminder.sh\"",
"timeout": 5
}
]
}
]
}
}
8 changes: 3 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -239,9 +239,7 @@ XmlUnusedNamespaceDeclaration.xml
!inspection/
!inspection/*.xml

### Claude Code (개인 운영 환경) ###
# 루트 CLAUDE.md 는 개인 컨벤션 파일 — git 추적 안 함. 복원 백업: .claude/backup/CLAUDE.md
/CLAUDE.md

# Claude Code 런타임 부산물 (추적 금지)
### Claude Code (단독 프로젝트 — 추적함) ###
# CLAUDE.md·.claude 설정/훅은 git 으로 추적한다(백업 메커니즘 폐기).
# 런타임 부산물(lock)만 제외.
.claude/scheduled_tasks.lock
11 changes: 11 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Android Project Conventions

## Project Context
- 핵심 도메인: **음식 조합·레시피 공유 앱** — 사용자가 카테고리(하이디라오·서브웨이·편의점)별로 재료·사진·해시태그를 담은 '조합'을 등록·탐색·검색하고 좋아요·랭킹으로 큐레이션. 인증·온보딩·프로필 포함. Mock/실 데이터는 `demo`/`prod` product flavor 로 분기(demo=Fake 로컬 데이터, prod=실 서버 API), `BuildConfig.BASE_URL` 로 엔드포인트 주입.

<!--
'작업 원칙'(역할별 공식 문서 권위 소스 A~F + Compose↔Kotlin 횡단) 규칙은
.claude/hooks/source-authority-reminder.sh (UserPromptSubmit hook) 로 이전됨.
버전·라이브러리·빌드툴체인·디자인 관련 프롬프트를 키워드로 감지했을 때만 주입되어
상시 컨텍스트 로드를 줄인다. 규칙 수정은 해당 훅 스크립트에서 한다.
-->
Loading