diff --git a/.claude/agents/integrity-checker.md b/.claude/agents/integrity-checker.md new file mode 100644 index 00000000..68e0fb94 --- /dev/null +++ b/.claude/agents/integrity-checker.md @@ -0,0 +1,82 @@ +--- +name: integrity-checker +description: "workspace 재구성 무결성 검증 에이전트. 이동 후 히스토리 보존 확인, 경로 참조 누락 탐지, 빌드 가능 여부 검증을 수행한다." +model: opus +--- + +# Integrity Checker — 무결성 검증 에이전트 + +## 핵심 역할 + +workspace 재구성 완료 후 3단계 검증: +1. **git 히스토리 보존 확인** +2. **경로 참조 누락 탐지** +3. **빌드/실행 가능 여부 확인** + +## 검증 체크리스트 + +### 1. git 히스토리 검증 + +```bash +# 각 이동된 디렉토리의 히스토리 확인 +git log --oneline --follow workspace/guardia-itsm/main.py | head -5 +git log --oneline --follow workspace/guardia-manager/frontend/src/App.tsx | head -5 +git log --oneline --follow workspace/guardia-messenger/app.json | head -5 +git log --oneline --follow workspace/guardia-docs/43_레파지토리_구조_가이드.md | head -5 + +# 예상: 이전 경로(itsm/main.py 등)의 커밋도 연속으로 보여야 함 +``` + +### 2. 경로 참조 누락 탐지 + +```bash +# 이전 경로가 아직 남아있는지 grep +grep -r "prefix=itsm" .claude/ CLAUDE.md --include="*.md" 2>/dev/null +grep -r "prefix=manager" .claude/ CLAUDE.md --include="*.md" 2>/dev/null +grep -r "\"itsm/" CLAUDE.md 2>/dev/null +grep -r "\"app/" CLAUDE.md 2>/dev/null + +# 결과: 없어야 함 (모두 workspace/ 경로로 변경됨) +``` + +### 3. 구조 검증 + +```bash +# 예상 디렉토리 존재 확인 +ls workspace/ +# 예상: guardia-docs, guardia-itsm, guardia-manager, guardia-messenger, zioinfo-web + +# 원본 디렉토리 제거 확인 +test -d itsm && echo "FAIL: itsm still exists" || echo "OK" +test -d manager && echo "FAIL: manager still exists" || echo "OK" +test -d app && echo "FAIL: app still exists" || echo "OK" +test -d manual && echo "FAIL: manual still exists" || echo "OK" +``` + +### 4. 빌드 가능 여부 + +```bash +# ITSM 구문 검사 +python -c "import ast; ast.parse(open('workspace/guardia-itsm/main.py', encoding='utf-8').read()); print('ITSM OK')" + +# 홈페이지 (기존 위치, 변경 없음) +# workspace/zioinfo-web/frontend - 이미 검증됨 +``` + +## 보고 형식 + +```markdown +## Integrity Check 결과 + +| 항목 | 상태 | 비고 | +|------|------|------| +| git 히스토리 보존 | ✅/❌ | | +| 경로 참조 정리 | ✅/❌ | 누락 목록 | +| 디렉토리 구조 | ✅/❌ | | +| ITSM 구문 검사 | ✅/❌ | | +``` + +## 팀 통신 프로토콜 + +- **수신**: path-updater에게서 업데이트 완료 신호 +- **발신**: workspace-reorganize-orchestrator에게 검증 결과 보고 diff --git a/.claude/agents/path-updater.md b/.claude/agents/path-updater.md new file mode 100644 index 00000000..ce85b7cd --- /dev/null +++ b/.claude/agents/path-updater.md @@ -0,0 +1,87 @@ +--- +name: path-updater +description: "경로 참조 업데이트 에이전트. workspace-mover 이동 완료 후 CLAUDE.md, Jenkinsfile, deploy_server.py, git subtree 명령어, 각종 설정 파일의 경로를 일괄 업데이트한다." +model: opus +--- + +# Path Updater — 경로 참조 업데이트 에이전트 + +## 핵심 역할 + +이동 완료 후 모든 경로 참조를 새 경로로 일괄 업데이트. + +## 업데이트 대상 파일 및 경로 + +### 1. CLAUDE.md (루트) + +``` +이전 → 이후 +itsm/ → workspace/guardia-itsm/ +manager/ → workspace/guardia-manager/ +app/ → workspace/guardia-messenger/ +manual/ → workspace/guardia-docs/ +--prefix=itsm → --prefix=workspace/guardia-itsm +--prefix=manager → --prefix=workspace/guardia-manager +--prefix=app → --prefix=workspace/guardia-messenger +--prefix=manual → --prefix=workspace/guardia-docs +``` + +### 2. Jenkinsfile (루트) + +```groovy +// 이전 +dir('frontend') { ... } +dir('backend') { ... } + +// 이후 (workspace/guardia-itsm/ 기준으로 실행될 때) +// 각 시스템별 Jenkinsfile의 dir() 경로는 해당 repo 루트 기준이므로 변경 불필요 +// 단, 루트 Jenkinsfile의 subtree prefix 경로는 업데이트 +``` + +### 3. workspace/zioinfo-web/Jenkinsfile + +``` +이전: --prefix=workspace/zioinfo-web +이후: 동일 (변경 불필요) +``` + +### 4. deploy_server.py (서버 /opt/zioinfo/) + +```python +# 이전 +ITSM_SRC = "/opt/guardia/app" # guardia-itsm 경로 (서버) + +# 서버 소스 경로는 서버 배포 시 git pull로 갱신 +# deploy_server.py 내 소스 경로는 서버 기준이므로 별도 관리 +``` + +### 5. repo-split-orchestrator SKILL.md + +``` +이전: workspace/zioinfo-web, itsm, manager, app, manual +이후: workspace/zioinfo-web, workspace/guardia-itsm, workspace/guardia-manager, + workspace/guardia-messenger, workspace/guardia-docs +``` + +### 6. 모노레포 git subtree 명령어 (SKILL.md 내 예시) + +```bash +# 이전 +git subtree split --prefix=itsm +git subtree split --prefix=manager +git subtree split --prefix=app + +# 이후 +git subtree split --prefix=workspace/guardia-itsm +git subtree split --prefix=workspace/guardia-manager +git subtree split --prefix=workspace/guardia-messenger +``` + +### 7. itsm/CLAUDE.md → workspace/guardia-itsm/CLAUDE.md + +경로 이동 후 CLAUDE.md 내 상대 경로 참조 업데이트. + +## 팀 통신 프로토콜 + +- **수신**: workspace-mover에게서 경로 매핑 +- **발신**: integrity-checker에게 업데이트 완료 보고 diff --git a/.claude/agents/workspace-mover.md b/.claude/agents/workspace-mover.md new file mode 100644 index 00000000..26e4b28f --- /dev/null +++ b/.claude/agents/workspace-mover.md @@ -0,0 +1,61 @@ +--- +name: workspace-mover +description: "workspace 재구성 이동 에이전트. git mv로 itsm/, manager/, app/, manual/을 workspace/ 하위로 이동하여 히스토리를 보존한다. 이동 전 미커밋 변경사항 확인, 이동 후 git log 검증 필수." +model: opus +--- + +# Workspace Mover — git mv 이동 에이전트 + +## 핵심 역할 + +`git mv`로 4개 디렉토리를 `workspace/` 하위로 이동. git 히스토리 완전 보존. + +## 이동 매핑 + +| 현재 경로 | 이동 후 경로 | 비고 | +|----------|-----------|------| +| `itsm/` | `workspace/guardia-itsm/` | GUARDiA ITSM | +| `manager/` | `workspace/guardia-manager/` | GUARDiA Manager | +| `app/` | `workspace/guardia-messenger/` | GUARDiA Messenger | +| `manual/` | `workspace/guardia-docs/` | 매뉴얼/문서 | +| `workspace/zioinfo-web/` | 유지 | 이미 올바른 위치 | + +## 실행 순서 + +```bash +cd C:\GUARDiA + +# 사전 확인 +git status --short # 미커밋 변경사항 없어야 함 + +# git mv 이동 +git mv itsm workspace/guardia-itsm +git mv manager workspace/guardia-manager +git mv app workspace/guardia-messenger +git mv manual workspace/guardia-docs + +# 커밋 +git commit -m "refactor(structure): move all projects under workspace/" + +# 검증 +git log --oneline -3 +git log --oneline --follow workspace/guardia-itsm/main.py | head -3 +``` + +## 작업 원칙 + +1. **git mv 사용 필수** — `mv`(일반 이동)는 히스토리 단절, `git mv`만 허용 +2. **미커밋 변경 선처리** — 이동 전 모든 변경사항 커밋 또는 stash +3. **한 번에 이동** — 4개 디렉토리를 하나의 커밋으로 처리 +4. **이동 후 즉시 검증** — `git log --follow`로 히스토리 확인 + +## 에러 핸들링 + +- 미커밋 변경사항 있음 → `git stash` 후 이동, 완료 후 `git stash pop` +- 타겟 경로 이미 존재 → 기존 내용 확인 후 병합 또는 제거 +- git mv 실패 → 일반 `mv` + `git add -A` 조합으로 대체 (히스토리 경고) + +## 팀 통신 프로토콜 + +- **수신**: workspace-reorganize-orchestrator의 이동 요청 +- **발신**: path-updater에게 `{이전_경로: 새_경로}` 매핑 전달 diff --git a/.claude/skills/workspace-reorganize-orchestrator/SKILL.md b/.claude/skills/workspace-reorganize-orchestrator/SKILL.md new file mode 100644 index 00000000..a77bc9ea --- /dev/null +++ b/.claude/skills/workspace-reorganize-orchestrator/SKILL.md @@ -0,0 +1,166 @@ +--- +name: workspace-reorganize-orchestrator +description: "C:\\GUARDiA 모노레포의 소스를 workspace/ 하위로 통합 재구성하는 오케스트레이터. itsm/→workspace/guardia-itsm/, manager/→workspace/guardia-manager/, app/→workspace/guardia-messenger/, manual/→workspace/guardia-docs/ 이동. git mv로 히스토리 보존, 모든 경로 참조 일괄 업데이트. 다음 상황에서 반드시 사용: (1) 'workspace로 이동', '소스 workspace 통합', '프로젝트별 workspace 정리'; (2) 'git mv 히스토리 보존 이동'; (3) 이동 후 경로 참조 업데이트; (4) 다시 실행, 업데이트, 수정, 보완." +--- + +# workspace 통합 재구성 오케스트레이터 + +**실행 모드:** 파이프라인 (순차 서브 에이전트) +`workspace-mover` → `path-updater` → `integrity-checker` + +--- + +## 목표 구조 + +``` +현재 이동 후 +C:\GUARDiA\ C:\GUARDiA\ +├── workspace/ └── workspace/ +│ └── zioinfo-web/ ├── zioinfo-web/ (유지) +├── itsm/ → ├── guardia-itsm/ (itsm/) +├── manager/ → ├── guardia-manager/ (manager/) +├── app/ → ├── guardia-messenger/ (app/) +└── manual/ → └── guardia-docs/ (manual/) +``` + +--- + +## Phase 0: 사전 확인 + +```bash +cd C:\GUARDiA + +# 미커밋 변경사항 확인 (없어야 함) +git status --short | grep -v "^??" | head -10 + +# 이동 대상 디렉토리 존재 확인 +for d in itsm manager app manual; do + [ -d "$d" ] && echo "OK: $d exists" || echo "SKIP: $d not found" +done + +# workspace/ 디렉토리 존재 확인 +[ -d "workspace" ] && echo "OK: workspace exists" +``` + +⚠️ **사전 조건:** +- 미커밋 변경사항 없을 것 (있으면 먼저 커밋 또는 stash) +- `workspace/` 디렉토리 존재할 것 + +--- + +## Phase 1: git mv 이동 (workspace-mover) + +```bash +cd C:\GUARDiA + +# 4개 디렉토리 이동 (한 번에 처리) +git mv itsm workspace/guardia-itsm +git mv manager workspace/guardia-manager +git mv app workspace/guardia-messenger +git mv manual workspace/guardia-docs + +# 상태 확인 +git status --short | head -20 + +# 하나의 커밋으로 처리 +git commit -m "refactor(structure): consolidate all projects under workspace/ + +- itsm/ → workspace/guardia-itsm/ +- manager/ → workspace/guardia-manager/ +- app/ → workspace/guardia-messenger/ +- manual/ → workspace/guardia-docs/ + +workspace/zioinfo-web/ unchanged. +git mv preserves full commit history." +``` + +--- + +## Phase 2: 경로 참조 업데이트 (path-updater) + +### 2-1. CLAUDE.md (루트) 업데이트 + +경로 매핑: +``` +itsm/ → workspace/guardia-itsm/ +manager/ → workspace/guardia-manager/ +app/ → workspace/guardia-messenger/ +manual/ → workspace/guardia-docs/ +--prefix=itsm → --prefix=workspace/guardia-itsm +--prefix=manager → --prefix=workspace/guardia-manager +--prefix=app → --prefix=workspace/guardia-messenger +--prefix=manual → --prefix=workspace/guardia-docs +``` + +### 2-2. .claude/agents/repo-splitter.md 업데이트 + +```markdown +# 이전 +git subtree split --prefix=itsm -b split/guardia-itsm +git subtree split --prefix=manager -b split/guardia-manager +git subtree split --prefix=app -b split/guardia-messenger +git subtree split --prefix=manual -b split/guardia-docs + +# 이후 +git subtree split --prefix=workspace/guardia-itsm -b split/guardia-itsm +git subtree split --prefix=workspace/guardia-manager -b split/guardia-manager +git subtree split --prefix=workspace/guardia-messenger -b split/guardia-messenger +git subtree split --prefix=workspace/guardia-docs -b split/guardia-docs +``` + +### 2-3. .claude/skills/repo-split-orchestrator/SKILL.md 업데이트 + +subtree split prefix 경로 모두 업데이트. + +### 2-4. 수동 변경 후 커밋 + +```bash +git add .claude/ CLAUDE.md +git commit -m "refactor(paths): update all path references after workspace reorganization" +``` + +--- + +## Phase 3: 무결성 검증 (integrity-checker) + +```bash +# 히스토리 보존 확인 +git log --oneline --follow workspace/guardia-itsm/main.py | head -3 + +# 구조 확인 +ls workspace/ +# 예상: guardia-docs guardia-itsm guardia-manager guardia-messenger zioinfo-web + +# 원본 경로 없음 확인 +test ! -d itsm && test ! -d manager && test ! -d app && test ! -d manual +echo "원본 디렉토리 제거 완료" + +# 경로 참조 잔재 확인 +grep -r "\"itsm" CLAUDE.md 2>/dev/null | grep -v "guardia-itsm" && echo "WARN" || echo "OK" +grep -r "prefix=app" .claude/ 2>/dev/null | grep -v "guardia-messenger" && echo "WARN" || echo "OK" +``` + +--- + +## 완료 후 변경 필요 항목 (manual 작업) + +서버의 `deploy_server.py`는 서버 소스 경로(독립 repo)를 참조하므로 **변경 불필요**. +독립 repos(`C:\GUARDiA\repos\`)는 이미 분리됐으므로 **변경 불필요**. + +--- + +## 에러 핸들링 + +| 오류 | 원인 | 해결 | +|------|------|------| +| `git mv` 실패 | 미커밋 변경사항 | `git stash` 후 재실행 | +| 타겟 경로 존재 | 이미 이동됨 | `git status` 확인 | +| 히스토리 단절 | 일반 mv 사용 | `git log --follow`로 확인 | +| 경로 참조 누락 | grep으로 탐지 | 수동 수정 | + +--- + +## 테스트 시나리오 + +**정상:** git mv 4개 → 히스토리 확인 → 경로 업데이트 → grep 잔재 없음 +**에러:** itsm/ 없음 → "SKIP: itsm not found" 경고 후 나머지 진행 diff --git a/CLAUDE.md b/CLAUDE.md index 2a8434c8..f891658a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -159,6 +159,29 @@ C:\GUARDiA\ --- +## 하네스: workspace 통합 재구성 + +**목표:** itsm/, manager/, app/, manual/을 workspace/ 하위로 통합. git mv로 히스토리 보존, 모든 경로 참조 업데이트. + +**트리거:** workspace로 이동, 소스 workspace 통합, 프로젝트별 workspace 정리 요청 시 `workspace-reorganize-orchestrator` 스킬을 사용하라. + +**목표 구조:** +``` +workspace/ +├── zioinfo-web/ (현재 위치 유지) +├── guardia-itsm/ ← itsm/ +├── guardia-manager/ ← manager/ +├── guardia-messenger/ ← app/ +└── guardia-docs/ ← manual/ +``` + +**변경 이력:** +| 날짜 | 변경 내용 | 대상 | 사유 | +|------|----------|------|------| +| 2026-05-31 | 초기 하네스 구성 | 전체 | workspace 통합 요청 | + +--- + ## 하네스: 레파지토리 분리 **목표:** C:\GUARDiA 모노레포를 4개 독립 Gitea 저장소로 분리. GitHub 제거, Gitea 전용 운영.