훅
훅은 편집과 Gradle 실행마다 bash(hooks/elasticore-hook.sh)로 돌고 Claude Code 에 JSON 으로 답합니다. 편집 도구(Edit,
Write, MultiEdit)와 Bash·PowerShell 명령 - 실패한 명령 포함 - 그리고 Claude 가 끝내려는 순간을 봅니다.
| 언제 | 무슨 일이 |
|---|---|
Claude 가 편집 도구로 생성 파일을 고침 - 첫 줄 //ecd:, // Initially generated by ElastiCORE; 줄 없음, 보존 블록 없음 | 거절하고, 그 변경이 어디에 속하는지 알려 줌. 보존 블록 하나를 통째로 더하는 것(// !---------- ... // ------------!)은 통과 |
ElastiCORE 가 생성할 때마다 다시 쓰는 파일을 고침 - blueprint/schema.yml, 복사된 가이드, 기본 i18n/<도메인>-messages.properties, 생성된 orm.xml | 거절 |
| 보존 블록이 있는 생성 파일을 고침 | 허용, 다시 생성해도 블록만 남는다고 알려 줌 |
-Pforce 로 Gradle 을 실행하거나 다른 방식으로 그 속성을 설정 (-P force, ORG_GRADLE_PROJECT_force ...) | 거절: 손 수정을 덮어씀. 사용자가 정함 |
src/main/resources/blueprint/<도메인>/ 의 모델을 바꿈 | 끝내기 전에 ./gradlew compileJava 를 돌리고 경고를 고치라고 알림. elasticore { } 블록이 없는 빌드면 2.x 생성기가 권한·생명주기·파생 값을 무시한다는 것도 |
| Gradle 빌드(성공이든 실패든)가 DSL 검증 경고, 읽지 못한 YAML 파일, 손댄 생성 파일을 출력 | 그 뜻과 할 일을 알려 줌 |
| 성공한 빌드가 생성·컴파일하지 않은 DSL 변경을 둔 채 끝내려 함 | 한 번 되돌려 빌드하게 함. 백그라운드 빌드, 중간에 끊기거나 걸러진 출력, 생성만 한 빌드는 세지 않음 |
중요한 세부
-Pforce는"-Pforce",-P force,--project-prop force,-Dorg.gradle.project.force,ORG_GRADLE_PROJECT_force=로,& ".\gradlew.bat",cmd /c,bash -c,env,time을 거쳐도 알아봅니다. 명령을 셸처럼 읽으므로-Pforce를 언급한 커밋 메시지는 거절하지 않습니다.- "컴파일했다" 는 컴파일했다는 뜻입니다: 생성만(
elcore3,elcore3ts, 컴파일 태스크를-x로 뺀 빌드)으로는 DSL 변경이 끝나지 않고, 한 Gradle 실행은 실패하고 다른 것은 성공한 명령도 마찬가지입니다. - 모델 파일은 ElastiCORE 마법사가 맨 위에
# Generated by ElastiCORE Framework를 썼어도 늘 고칠 수 있습니다. - 긴 출력: 성공한 명령의 전체 출력은 Claude Code 가 저장한 파일에서 읽습니다. 실패한 명령은 Claude Code 가 처음 10,000자만 넘기므로, 아주 큰 프로젝트에서는 경고가 훅이 보는 범위 밖일 수 있습니다.
- 다른 방법(셸의 스크립트)으로 한 편집은 막지 못합니다. 스킬이 Claude 에게 그렇게 하지 말라고 합니다.
- opencode 에서는 키트의 플러그인이 같은 스크립트를 돌립니다: 거절은 도구 오류가 되고, 알림은 도구의 출력에 붙고, 컴파일 안 된 DSL 변경을 둔 채 쉬는 세션은 한 번 되돌려집니다.
프로젝트에서 끄기
.claude/settings.local.json
{ "env": { "ELASTICORE_ALLOW_GENERATED_EDITS": "1" } }
ELASTICORE_ALLOW_FORCE=1 은 -Pforce 를 허용합니다. Windows 에서는 훅에 Git for Windows(Git Bash)가 필요합니다 - 없으면
설치하거나 플러그인을 끕니다.
훅 스크립트는 변경마다 Linux, macOS(자체 /bin/bash 3.2 포함), Windows 에서, Claude Code 가 실제로 보내는 JSON 으로
테스트합니다(tests/hooks/test-hooks.sh).