feat(#57 후속): 옵션 A Unity 프로젝트 SessionStart 자동 pull 구축
PD님 2026-04-20 승인 "옵션 A로 진행" 수용. PC별 클론 경로 상이 수용 + C30 이행 자동화 + C30 예외 명시 불요로 전환. [자진 고지 양축] - 개발팀장 축: #57 "C30 점검 불가" 자진 고지는 FilGoodBandits 상위만 확인한 오류. 실제 DeckBuilding/.git 실존 (NerdNavis/DeckBuilding.git) - PM 축: Agent 응답 환경 판정 주장을 재실측 없이 수용 (C27 변형 위반) - feedback_git_scope_shortcut.md 양축 재발 방지 기록 [집행 7종] - scripts/unity_project_sync.sh 신설 (Lock + stale cleanup + trap 제거 + C34-12 Degraded) - .claude/settings.json SessionStart hook 편입 - scripts/verify_setup.ps1 2.8 섹션 (UNITY 경로·git·sync 4축 검증) - SKILL.md C30-1 운용 세칙 정비 (수동 점검 → SessionStart hook 자동 이행, 외연 유지) - paths.local.json.template (기존 UNITY_PROJECT_ROOT 재활용) - feedback_git_scope_shortcut.md 신설 (양축) - MEMORY.md 인덱스 [pm-auditor 감사 정정] - Critical 2·Major 3·Minor 2·Improvement 2 전수 수용 - C34-15 5문항 체크 결과 대화로그 기재 - Lock cleanup 로직 포함 - feedback 양축 기록 [Unity MCP 편집 표준 워크플로우 v1 0단계 추가 — 개발팀장 후속 Task] 본 commit 후 별도 Task 위임 (Agent 경계 보호) [C30 예외 명시 자연 종결] PD 결정 3 (C30 예외 보류) → 자동 pull 구축으로 불요 전환 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e5a4c3cc78
commit
6f88079d08
|
|
@ -105,6 +105,10 @@
|
||||||
"type": "command",
|
"type": "command",
|
||||||
"command": "bash scripts/sync_audit_repo_to_central.sh 2>/dev/null || true"
|
"command": "bash scripts/sync_audit_repo_to_central.sh 2>/dev/null || true"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"command": "bash scripts/unity_project_sync.sh 2>/dev/null || true"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "command",
|
"type": "command",
|
||||||
"command": "bash scripts/inbox_scan.sh 2>/dev/null || true"
|
"command": "bash scripts/inbox_scan.sh 2>/dev/null || true"
|
||||||
|
|
|
||||||
|
|
@ -1031,7 +1031,7 @@ C20-7 자기검증 5문항에 다음 항목 추가:
|
||||||
|
|
||||||
### C30-1. 점검 대상 프로젝트 (예시, 비한정)
|
### C30-1. 점검 대상 프로젝트 (예시, 비한정)
|
||||||
- 조직 레포(`NerdNavisAi`) — SessionStart hook으로 자동 점검 중
|
- 조직 레포(`NerdNavisAi`) — SessionStart hook으로 자동 점검 중
|
||||||
- Unity 프로젝트(`${UNITY_PROJECT_ROOT}`) — 수동 점검 필요
|
- Unity 프로젝트(`${UNITY_PROJECT_ROOT}`) — **외부 저장소**(예: `NerdNavis/DeckBuilding.git`). PC별 클론 경로는 `paths.local.json`에 등록. **SessionStart hook `scripts/unity_project_sync.sh`로 자동 pull 이행** (2026-04-20 PD 옵션 A 승인). git 레포 아닌 경우 C34-12 Degraded 운영으로 경고만 출력
|
||||||
- NerdNavis.Framework 코어 레포 — 수동 점검 필요
|
- NerdNavis.Framework 코어 레포 — 수동 점검 필요
|
||||||
- 차기 프로젝트 레포 — 추가 시 본 규칙 적용
|
- 차기 프로젝트 레포 — 추가 시 본 규칙 적용
|
||||||
- 기타 git 기반 모든 프로젝트
|
- 기타 git 기반 모든 프로젝트
|
||||||
|
|
|
||||||
|
|
@ -41,3 +41,4 @@
|
||||||
- [auditor_call_log RESOLVED word boundary 결함](feedback_auditor_resolved_substring_bug.md) — 2026-04-20 #48 A 집행. grep -q "RESOLVED"가 "UN**RESOLVED**" 부분문자열 매칭되어 append 영구 실패. grep -qw 수정 + 본 PC UNRESOLVED 수동 해소로 즉시 검증. 모든 PC 공통 구조 결함
|
- [auditor_call_log RESOLVED word boundary 결함](feedback_auditor_resolved_substring_bug.md) — 2026-04-20 #48 A 집행. grep -q "RESOLVED"가 "UN**RESOLVED**" 부분문자열 매칭되어 append 영구 실패. grep -qw 수정 + 본 PC UNRESOLVED 수동 해소로 즉시 검증. 모든 PC 공통 구조 결함
|
||||||
- [종결된 사유를 현재 HOLD 사유처럼 재프레이밍 금지 — 현 상태 왜곡 (5회차 판정 확정)](feedback_resolved_cause_as_current_hold.md) — 2026-04-20 4·5회차 + **PD님 판정 확정 (2026-04-20): 현 PM 유지 · C31-E 확장 승인 · 6회차 이관 선제 동의**. 4회차: #38 답변 중 해결 완료 Python 시뮬·Unity MCP 전환을 현재 HOLD 사유로 서술. 5회차: "세션 공유 후 남은 업무" 재요청에 **완료·push된 #52-B·#52-B2를 "대기"로 유지** (실측 응집성 실패 축). SKILL.md C31-1 E 그룹 "실측 응집성 축" 체크 문항 헌법급 편입. **재발 시마다 PM 반성 + 구조 개선안 자진 제시 + 체크리스트 확장 안건화 + 강조 선언 4종 의무 부과** (PD님 직접 지시). 6회차 재발 시 PM 역할 재검토는 PD님 명시 결정 영역 이관
|
- [종결된 사유를 현재 HOLD 사유처럼 재프레이밍 금지 — 현 상태 왜곡 (5회차 판정 확정)](feedback_resolved_cause_as_current_hold.md) — 2026-04-20 4·5회차 + **PD님 판정 확정 (2026-04-20): 현 PM 유지 · C31-E 확장 승인 · 6회차 이관 선제 동의**. 4회차: #38 답변 중 해결 완료 Python 시뮬·Unity MCP 전환을 현재 HOLD 사유로 서술. 5회차: "세션 공유 후 남은 업무" 재요청에 **완료·push된 #52-B·#52-B2를 "대기"로 유지** (실측 응집성 실패 축). SKILL.md C31-1 E 그룹 "실측 응집성 축" 체크 문항 헌법급 편입. **재발 시마다 PM 반성 + 구조 개선안 자진 제시 + 체크리스트 확장 안건화 + 강조 선언 4종 의무 부과** (PD님 직접 지시). 6회차 재발 시 PM 역할 재검토는 PD님 명시 결정 영역 이관
|
||||||
- [PM 실측 가능 범위 자의적 축소 — 환경·능력 과소평가 금지](feedback_pm_capability_underestimation.md) — 2026-04-20 5회차 PM 의무 4종 후속. PM이 `mcp__unity-mcp__*` deferred tools를 실측 없이 "환경 부재"로 반복 단언하여 선행 조건 2를 "스켈레톤만"으로 축소. PD님 "유니티 MCP 연결 환경은 이미 확보되어 있어" 지적으로 정정. **ToolSearch + 간이 실측 의무화** + 환경·능력 주장 전 실측 근거 첨부 필수. C23 "추정의 사실화" 특수 유형. 과거 시점 설계 문서 "미확인 고지"를 현 시점 상태로 재적용 금지
|
- [PM 실측 가능 범위 자의적 축소 — 환경·능력 과소평가 금지](feedback_pm_capability_underestimation.md) — 2026-04-20 5회차 PM 의무 4종 후속. PM이 `mcp__unity-mcp__*` deferred tools를 실측 없이 "환경 부재"로 반복 단언하여 선행 조건 2를 "스켈레톤만"으로 축소. PD님 "유니티 MCP 연결 환경은 이미 확보되어 있어" 지적으로 정정. **ToolSearch + 간이 실측 의무화** + 환경·능력 주장 전 실측 근거 첨부 필수. C23 "추정의 사실화" 특수 유형. 과거 시점 설계 문서 "미확인 고지"를 현 시점 상태로 재적용 금지
|
||||||
|
- [git 레포 점검 범위 축소 — 상위 디렉토리만 확인 후 "레포 아님" 단언](feedback_git_scope_shortcut.md) — 2026-04-20 #57 자진 고지 오류 양축. 개발팀장이 `D:\NerdNavis\FilGoodBandits` 상위만 확인 → "C30 점검 불가" 단언. 실제로는 하위 `DeckBuilding`이 git 레포 (remote `NerdNavis/DeckBuilding.git`). PM도 Agent 응답을 추가 재실측 없이 수용 (C27 변형 위반). **해결**: Unity 프로젝트 SessionStart 자동 pull 구축(옵션 A PD 승인) · `.git` 존재 검사 2~3단계 하위까지 · Agent 환경 판정 주장은 PM 재실측 의무. C30-1 조항 "수동 점검" → "자동 이행"으로 정비
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
---
|
||||||
|
name: git 레포 점검 범위 축소 — 상위 디렉토리만 확인 후 "레포 아님" 단언
|
||||||
|
description: 2026-04-20 #57 자진 고지 오류. 개발팀장이 `D:\NerdNavis\FilGoodBandits`만 확인하고 git 레포 아님으로 단언 → 실제 하위 `DeckBuilding`이 git 레포였음. PM도 Agent 응답을 추가 검증 없이 수용 (C27 변형 위반). 양축 재발 방지
|
||||||
|
type: feedback
|
||||||
|
---
|
||||||
|
|
||||||
|
# git 레포 점검 범위 축소 — 상위 디렉토리만 확인 후 "레포 아님" 단언
|
||||||
|
|
||||||
|
## 사건 개요
|
||||||
|
|
||||||
|
- **발생일**: 2026-04-20
|
||||||
|
- **맥락**: PD 지시 #57 A 집행 중 C30(git 동기화 점검 의무) 준수 시 개발팀장 Agent가 Unity 프로젝트 경로 점검
|
||||||
|
- **오류 경로**: `D:\NerdNavis\FilGoodBandits` 상위 디렉토리만 확인
|
||||||
|
- **실제 경로**: `D:\NerdNavis\FilGoodBandits\DeckBuilding\.git` 실존 (remote: `https://burning.i234.me/NerdNavis/DeckBuilding.git`)
|
||||||
|
- **결과**: 개발팀장 #57 자진 고지 "C30 점검 불가"로 보고 → PM 대화로그·PD 지시 로그 등재 → 나중 PM 실측으로 오류 확인
|
||||||
|
|
||||||
|
## 양축 기록
|
||||||
|
|
||||||
|
### 개발팀장 축 — git 레포 점검 범위 축소
|
||||||
|
|
||||||
|
**위반 원칙**:
|
||||||
|
- **C23** 추정의 사실화 (하위 미점검 상태에서 "레포 아님" 단언)
|
||||||
|
- **C5** 정직성 (실측 근거 불완전)
|
||||||
|
- **C2-1** 근본 원인 재정의 선행 (점검 "가능·불가능" 판정 전 경로 구조 재검토 누락)
|
||||||
|
|
||||||
|
**근본 원인**:
|
||||||
|
- **Unity 프로젝트 경로 관성 해석**: Unity 프로젝트는 `{루트}/Assets/`·`{루트}/.git` 형태이나, 조직에 따라 상위 디렉토리(예: `FilGoodBandits`)에 `.git`이 없고 하위 `DeckBuilding`이 레포 루트인 구조 존재
|
||||||
|
- **점검 경로 미실측**: `git -C <경로> rev-parse --is-inside-work-tree` 또는 `.git` 디렉토리 존재 검사를 **각 후보 경로 반복**하지 않음
|
||||||
|
- **하위 디렉토리 전수 스캔 습관 부재**: "상위 = 루트" 가정
|
||||||
|
|
||||||
|
**재발 방지 체크**:
|
||||||
|
1. "레포 아님" 단언 전 **후보 경로 2~3단계 하위까지 `.git` 존재 검사**
|
||||||
|
2. `git -C <경로> remote -v` 또는 `rev-parse` 실측 근거 첨부 의무
|
||||||
|
3. Unity MCP 편집 표준 워크플로우 v1 0단계에 `$UNITY_PROJECT_ROOT` 경로의 `.git` 확인 명시
|
||||||
|
|
||||||
|
### PM 축 — Agent 응답 수용 시 추가 검증 누락 (C27 변형 위반)
|
||||||
|
|
||||||
|
**위반 원칙**:
|
||||||
|
- **C27** Agent 호출 완료 시 PM 로그 갱신 확인 (확장 해석: Agent 응답의 사실 주장도 PM 재검증 의무)
|
||||||
|
- **C5** 정직성 (개발팀장 자진 고지를 그대로 대화로그·PD 로그에 등재)
|
||||||
|
|
||||||
|
**근본 원인**:
|
||||||
|
- **Agent 신뢰 과도**: 개발팀장 Agent의 "C30 점검 불가" 자진 고지가 **스스로 위반을 인정하는 형태**라 PM이 추가 의심 없이 수용
|
||||||
|
- **PD 보고 시점 실측 미수행**: PM이 #57 완료 보고에 자진 고지 2건을 그대로 PD님께 전달 · PD님이 다시 활용하는 시점에서야 PM이 실측 수행
|
||||||
|
- **C29-4 업무 완료 동기화 약화**: PM이 Agent 완료 결과를 **원본 경로 실측 없이** 조직 기록에 기입
|
||||||
|
|
||||||
|
**재발 방지 체크**:
|
||||||
|
1. Agent 응답 중 **"불가·부재·권한 없음·레포 아님" 단언**은 **PM이 직접 재실측** (tool_use 결과 이중 확인)
|
||||||
|
2. 개발팀 자진 고지 중 **환경·경로 판정**은 PM이 `bash` 또는 `ls`로 즉시 검증
|
||||||
|
3. C31-B 체크리스트 확장 안건 고려: "Agent 응답의 환경 판정 사실 주장을 PM이 재실측했는가?"
|
||||||
|
|
||||||
|
## 영향 범위
|
||||||
|
|
||||||
|
- **본 건**: 저위험 (실제로 git 레포 존재 + 파일 편집 성공 + 복구 경로 확보)
|
||||||
|
- **재발 시 고위험**: 레포 존재함에도 "레포 아님"으로 오판 → C30 점검 누락 → 구버전 상태 작업 → 충돌·회귀
|
||||||
|
- **C30 규칙 체계 훼손**: "수동 점검 필요"로 표기된 대상이 사실 자동화 가능한데 방치
|
||||||
|
|
||||||
|
## 해결 (2026-04-20 집행)
|
||||||
|
|
||||||
|
1. **본 feedback 신설** (양축 근본 원인 + 재발 방지 체크)
|
||||||
|
2. **Unity 프로젝트 SessionStart 자동 pull 구축** (옵션 A · PD 승인) — 양축 오류 구조적 차단
|
||||||
|
3. **SKILL.md C30-1 조항 정비** — "Unity 프로젝트 — 수동 점검 필요" → "SessionStart hook 자동 이행"
|
||||||
|
4. **verify_setup.ps1 2.8 섹션** — UNITY_PROJECT_ROOT·git 레포·sync 스크립트 3축 검증
|
||||||
|
5. **paths.local.json** 기반 PC별 경로 관리 (이미 `UNITY_PROJECT_ROOT` 변수 존재)
|
||||||
|
|
||||||
|
## 연관
|
||||||
|
|
||||||
|
- **C2-1** 근본 원인 재정의 (환경 판정 시 재검토)
|
||||||
|
- **C5** 정직성 (실측 근거 불완전 단언 금지)
|
||||||
|
- **C23** 추정의 사실화 (Agent 자진 고지도 추정 포함 가능)
|
||||||
|
- **C27** Agent 결과 검증 의무 (변형 외연)
|
||||||
|
- **C30** git 동기화 점검 (본 건 직접 대상)
|
||||||
|
- `feedback_pm_capability_underestimation.md` (PM 실측 가능 범위 자의적 축소 — 개발팀장 축과 유사)
|
||||||
|
- `feedback_c6_backup_before_edit_violation.md` (Unity MCP 집행 시 표준 워크플로우)
|
||||||
|
|
||||||
|
## 재발 기록 (향후 append)
|
||||||
|
|
||||||
|
| 회차 | 일시 | 유형 | 경위 요지 |
|
||||||
|
|------|------|------|----------|
|
||||||
|
| 1 | 2026-04-20 | 개발팀장·PM 양축 | #57 A 집행 · FilGoodBandits 상위만 확인 · PM 재실측 누락 |
|
||||||
|
|
||||||
|
(향후 재발 시 회차 추가)
|
||||||
|
|
@ -0,0 +1,87 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Unity 프로젝트 SessionStart 자동 pull (2026-04-20 PD 옵션 A 승인)
|
||||||
|
#
|
||||||
|
# 역할: paths.local.json의 UNITY_PROJECT_ROOT 경로를 읽어 git pull --ff-only 수행
|
||||||
|
# 근거: C30 git 동기화 점검 의무 · 외부 저장소 Unity 프로젝트 자동 이행
|
||||||
|
# C34-12 Degraded 운영: 경로 미설정·레포 아님·pull 실패 시 경고만, 작업 차단 금지
|
||||||
|
|
||||||
|
set +e # Degraded 운영 — 실패 시 exit 0 보장
|
||||||
|
|
||||||
|
# Lock 파일 (race 방지)
|
||||||
|
LOCK_FILE="$HOME/.claude/.nerdnavis_unity_sync.lock"
|
||||||
|
LOCK_STALE_SECONDS=300 # 5분 이상 lock = stale
|
||||||
|
|
||||||
|
# Stale lock cleanup (trap 이전)
|
||||||
|
if [ -f "$LOCK_FILE" ]; then
|
||||||
|
LOCK_MTIME=$(stat -c %Y "$LOCK_FILE" 2>/dev/null || stat -f %m "$LOCK_FILE" 2>/dev/null)
|
||||||
|
NOW=$(date +%s)
|
||||||
|
if [ -n "$LOCK_MTIME" ] && [ $((NOW - LOCK_MTIME)) -gt $LOCK_STALE_SECONDS ]; then
|
||||||
|
rm -f "$LOCK_FILE" 2>/dev/null
|
||||||
|
echo "ℹ️ [Unity sync] stale lock 제거 ($((NOW - LOCK_MTIME))s)"
|
||||||
|
else
|
||||||
|
echo "ℹ️ [Unity sync] 이미 진행 중 (lock 존재) — 스킵"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Lock 획득 + 종료 시 자동 제거 (trap)
|
||||||
|
touch "$LOCK_FILE"
|
||||||
|
trap 'rm -f "$LOCK_FILE" 2>/dev/null' EXIT
|
||||||
|
|
||||||
|
# paths.local.json 존재 확인
|
||||||
|
PATHS_FILE="paths.local.json"
|
||||||
|
if [ ! -f "$PATHS_FILE" ]; then
|
||||||
|
echo "⚠️ [Unity sync] paths.local.json 부재 — template 복사 후 UNITY_PROJECT_ROOT 설정 필요"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# UNITY_PROJECT_ROOT 추출 (jq 없으면 grep 대체)
|
||||||
|
if command -v jq >/dev/null 2>&1; then
|
||||||
|
UNITY_ROOT=$(jq -r '.UNITY_PROJECT_ROOT // empty' "$PATHS_FILE" 2>/dev/null)
|
||||||
|
else
|
||||||
|
UNITY_ROOT=$(grep -oP '"UNITY_PROJECT_ROOT"\s*:\s*"\K[^"]+' "$PATHS_FILE" 2>/dev/null)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$UNITY_ROOT" ] || [ "$UNITY_ROOT" = "null" ]; then
|
||||||
|
echo "⚠️ [Unity sync] UNITY_PROJECT_ROOT 미설정"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 경로 실체 확인
|
||||||
|
if [ ! -d "$UNITY_ROOT" ]; then
|
||||||
|
echo "⚠️ [Unity sync] 경로 부재: $UNITY_ROOT"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# git 레포 확인
|
||||||
|
if [ ! -d "$UNITY_ROOT/.git" ]; then
|
||||||
|
echo "⚠️ [Unity sync] git 레포 아님: $UNITY_ROOT (C30 수동 점검 대상 외)"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# fetch + pull --ff-only
|
||||||
|
cd "$UNITY_ROOT" || { echo "⚠️ [Unity sync] cd 실패"; exit 0; }
|
||||||
|
|
||||||
|
FETCH_OUT=$(git fetch origin 2>&1)
|
||||||
|
FETCH_EXIT=$?
|
||||||
|
if [ $FETCH_EXIT -ne 0 ]; then
|
||||||
|
echo "⚠️ [Unity sync] fetch 실패 (network·인증 확인 필요)"
|
||||||
|
echo "$FETCH_OUT" | head -3
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
BEHIND=$(git rev-list --count HEAD..@{u} 2>/dev/null || echo "0")
|
||||||
|
if [ "$BEHIND" -gt 0 ]; then
|
||||||
|
PULL_OUT=$(git pull --ff-only 2>&1)
|
||||||
|
PULL_EXIT=$?
|
||||||
|
if [ $PULL_EXIT -eq 0 ]; then
|
||||||
|
echo "✅ [Unity sync] $BEHIND 커밋 pull 완료 — $UNITY_ROOT"
|
||||||
|
else
|
||||||
|
echo "⚠️ [Unity sync] pull 실패 (충돌·manual merge 필요): $UNITY_ROOT"
|
||||||
|
echo "$PULL_OUT" | head -3
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "✅ [Unity sync] 최신 상태 — $UNITY_ROOT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
@ -285,6 +285,37 @@ if (Test-Path $gi) {
|
||||||
Check ".gitignore 존재" $false ".gitignore 파일 없음"
|
Check ".gitignore 존재" $false ".gitignore 파일 없음"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 2.8. Unity 프로젝트 자동 pull 설정 검증 (C30 자동 이행 · 2026-04-20 옵션 A PD 승인)
|
||||||
|
$pathsLocal = Join-Path $repoRoot "paths.local.json"
|
||||||
|
if (Test-Path $pathsLocal) {
|
||||||
|
try {
|
||||||
|
$pathsJson = Get-Content $pathsLocal -Raw | ConvertFrom-Json
|
||||||
|
$unityRoot = $pathsJson.UNITY_PROJECT_ROOT
|
||||||
|
if ($unityRoot) {
|
||||||
|
Check "Unity 프로젝트 경로 설정 (paths.local.json)" $true $unityRoot
|
||||||
|
if (Test-Path $unityRoot) {
|
||||||
|
$unityGit = Join-Path $unityRoot ".git"
|
||||||
|
if (Test-Path $unityGit) {
|
||||||
|
Check "Unity 프로젝트 git 레포 실체" $true $unityRoot
|
||||||
|
} else {
|
||||||
|
Warn "Unity 프로젝트 git 레포 아님" "$unityRoot — C30 수동 점검 대상 외 (C34-12 Degraded)"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Warn "Unity 프로젝트 경로 부재" "$unityRoot — paths.local.json UNITY_PROJECT_ROOT 재확인 필요"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Warn "UNITY_PROJECT_ROOT 미설정" "paths.local.json에 경로 지정 필요"
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Warn "paths.local.json 파싱 실패" $_.Exception.Message
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Warn "paths.local.json 부재" "paths.local.json.template 복사 후 UNITY_PROJECT_ROOT 설정 필요 (C30 자동 pull 미작동)"
|
||||||
|
}
|
||||||
|
|
||||||
|
$unitySyncScript = Join-Path $repoRoot "scripts\unity_project_sync.sh"
|
||||||
|
Check "scripts/unity_project_sync.sh 존재" (Test-Path $unitySyncScript) $unitySyncScript
|
||||||
|
|
||||||
# 5. settings.json (조직 공용 승인) 존재
|
# 5. settings.json (조직 공용 승인) 존재
|
||||||
$settings = Join-Path $repoRoot ".claude\settings.json"
|
$settings = Join-Path $repoRoot ".claude\settings.json"
|
||||||
Check ".claude/settings.json (조직 공용 승인)" (Test-Path $settings) $settings
|
Check ".claude/settings.json (조직 공용 승인)" (Test-Path $settings) $settings
|
||||||
|
|
|
||||||
|
|
@ -1114,3 +1114,84 @@ PD님 2종 지시 수령 → PM이 개발팀장·기획팀장 Task Agent 병렬
|
||||||
- Agent 병렬 호출 완료 · 양 팀장 응답 수령 완료
|
- Agent 병렬 호출 완료 · 양 팀장 응답 수령 완료
|
||||||
- PM 통합 보고 발신 (본 엔트리)
|
- PM 통합 보고 발신 (본 엔트리)
|
||||||
- PD 결정 3종 대기
|
- PD 결정 3종 대기
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- #PD지시 #PM #완료 #옵션A #Unity자동pull #C30자동이행 #양축자진고지 -->
|
||||||
|
## [PM 집행 완료] 옵션 A — Unity 프로젝트 SessionStart 자동 pull 구축
|
||||||
|
|
||||||
|
### 요지
|
||||||
|
|
||||||
|
PD님 직접 승인 "옵션 A로 진행" 수용. Unity 프로젝트(외부 저장소 `NerdNavis/DeckBuilding.git`) SessionStart 시 자동 pull 메커니즘 구축. PC별 클론 경로 상이 수용 + C30 이행 자동화 + C30 예외 명시 불요로 전환. pm-auditor 사전 감사 Critical 2·Major 3 정정 후 집행.
|
||||||
|
|
||||||
|
### 자진 고지 (C3·C5 양축)
|
||||||
|
|
||||||
|
개발팀장 #57 자진 고지 "C30 점검 불가"는 **상위 디렉토리만 확인한 오류**. PM 실측으로 `D:\NerdNavis\FilGoodBandits\DeckBuilding\.git` 실존 확인 (remote: `https://burning.i234.me/NerdNavis/DeckBuilding.git`). PM도 Agent 응답 재실측 없이 수용 (C27 변형 위반). 양축 feedback 기록 필수.
|
||||||
|
|
||||||
|
### 집행 (7종)
|
||||||
|
|
||||||
|
1. **`scripts/unity_project_sync.sh` 신설**
|
||||||
|
- paths.local.json에서 `UNITY_PROJECT_ROOT` 읽기 (jq 또는 grep 대체)
|
||||||
|
- `git fetch origin && git pull --ff-only` 수행
|
||||||
|
- Lock 파일 `$HOME/.claude/.nerdnavis_unity_sync.lock` + stale cleanup (5분 타임아웃) + trap 자동 제거
|
||||||
|
- C34-12 Degraded 운영 주석 포함 (경로 미설정·레포 아님·pull 실패 시 exit 0)
|
||||||
|
|
||||||
|
2. **`.claude/settings.json` SessionStart hook 편입**
|
||||||
|
- audit sync 다음에 `unity_project_sync.sh` 추가
|
||||||
|
- 기존 hook 체인 유지 · 독립 실행
|
||||||
|
|
||||||
|
3. **`paths.local.json.template`** — `UNITY_PROJECT_ROOT` 기존 존재 확인 (추가 변경 불요)
|
||||||
|
|
||||||
|
4. **`scripts/verify_setup.ps1` 2.8 섹션 신설**
|
||||||
|
- paths.local.json · UNITY_PROJECT_ROOT 설정 · 경로 실체 · git 레포 · sync 스크립트 존재 4축 검증
|
||||||
|
|
||||||
|
5. **SKILL.md C30-1 조항 정비**
|
||||||
|
- 기존: "Unity 프로젝트(`${UNITY_PROJECT_ROOT}`) — 수동 점검 필요"
|
||||||
|
- 변경: "Unity 프로젝트 — **외부 저장소**. PC별 클론 경로는 `paths.local.json`에 등록. **SessionStart hook `scripts/unity_project_sync.sh`로 자동 pull 이행** (2026-04-20 PD 옵션 A 승인). git 레포 아닌 경우 C34-12 Degraded 운영으로 경고만 출력"
|
||||||
|
- **외연 유지 · 축소·확장 없음** (C37-2)
|
||||||
|
|
||||||
|
6. **`memory/org/feedback_git_scope_shortcut.md` 신설 (양축)**
|
||||||
|
- 개발팀장 축: 상위 디렉토리만 확인 후 "레포 아님" 단언 · 하위 스캔 의무 신설
|
||||||
|
- PM 축: Agent 응답 "환경 판정" 사실 주장을 재실측 없이 수용 · C27 변형 위반
|
||||||
|
- 재발 방지 체크 양축 분리 기록
|
||||||
|
|
||||||
|
7. **`memory/org/MEMORY.md` 인덱스** 및 **`.live/2026-04-20_옵션A_UnityPull구축.md` 더미**
|
||||||
|
|
||||||
|
### pm-auditor 감사 결과 반영
|
||||||
|
|
||||||
|
- **Critical-1 (매니페스트 범위)**: 신규 매니페스트 `2026-04-20_옵션A_Unity자동pull` 등록 (target_files 9종) 해소
|
||||||
|
- **Critical-2 (C30-1 본문 수정 범위)**: 운용 세칙 기입 + 외연 유지로 C36-2 경계선 통과 (축소·확장 없음)
|
||||||
|
- **Major-1 (C34-15 5문항)**: 본 엔트리·`.live` 더미에 5문항 체크 결과 명시
|
||||||
|
- **Major-2 (feedback 양축)**: `feedback_git_scope_shortcut.md`에 개발팀장·PM 양축 기록
|
||||||
|
- **Major-3 (Lock cleanup)**: sync.sh에 stale lock cleanup + trap 제거 로직 포함
|
||||||
|
- **Minor·Improvement**: 주석·섹션 번호·예시 구체화 반영
|
||||||
|
|
||||||
|
### C34-15 5문항 체크 결과
|
||||||
|
|
||||||
|
1. **PC 단위 vs worktree 단위**: PC 단위 (paths.local.json 변수 PC별 상이)
|
||||||
|
2. **경계 안전성**: Unity 레포는 외부 저장소 · 조직 레포 worktree와 무관
|
||||||
|
3. **중앙화 필요성**: 불필요 (외부 저장소 · PC별 독립)
|
||||||
|
4. **레포 루트 vs worktree 실행 차이**: paths.local.json이 .gitignore 대상이라 worktree 전파는 C34 기존 관리
|
||||||
|
5. **Agent 경계 보호**: Unity MCP 편집은 외부 레포라 절대 경로 불가피 · Agent 프롬프트에 `UNITY_PROJECT_ROOT` 변수 사용 의무 (후속 개발팀장 Task에서 명시)
|
||||||
|
|
||||||
|
### Unity MCP 편집 표준 워크플로우 v1 0단계 추가 (후속 개발팀장 Task)
|
||||||
|
|
||||||
|
PD 승인 범위 "옵션 A + 체크리스트 보조"에 포함. 개발팀장 Task로 워크플로우 v1 0단계("작업 전 `unity_project_sync.sh` 실행 확인") 추가 집행 예정. 본 commit 이후 별도 Task 호출.
|
||||||
|
|
||||||
|
### C30 예외 명시 — **불요로 전환**
|
||||||
|
|
||||||
|
PD님 요구 "항상 Pull"은 C30 이행의 자동화이지 예외가 아님. 외부 저장소 조항 추가·자동 pull 구축으로 C30 의무 충족 → 예외 명시 불필요. PD 결정 3(C30 예외 보류)는 자연 종결.
|
||||||
|
|
||||||
|
### 기각안
|
||||||
|
|
||||||
|
1. **UserPromptSubmit hook 주기 fetch 추가** — PD 승인 "SessionStart 자동 pull" 범위 밖. 별도 안건 상정 가능하나 본 집행 범위 아님. 기각 (C36 준수)
|
||||||
|
2. **Unity MCP 편집 표준 워크플로우 0단계 본 commit 동시 집행** — 개발팀장 영역 (`.claude/agents/` 참조 링크)이라 개발팀장 Task 위임. PM 재량 직접 편집은 Agent 경계 침범. 기각
|
||||||
|
3. **개발팀장 #57 자진 고지 오류를 본 feedback에 미기록** — C3 은폐에 해당. 양축 기록 필수 (Major-2). 기각
|
||||||
|
4. **paths.local.json.template 수정** — 기존 `UNITY_PROJECT_ROOT` 변수 이미 존재. 추가 수정 불요. 기각 (C37-1 중복 금지)
|
||||||
|
|
||||||
|
### 상태
|
||||||
|
|
||||||
|
- 집행 7종 완료 · commit + push 후 조직 공유 완료 (C18)
|
||||||
|
- 개발팀장 Task 후속: Unity MCP 편집 표준 워크플로우 v1 0단계 추가
|
||||||
|
- C30 예외 명시 자연 종결 (PD 결정 3 보류 → 불요 전환)
|
||||||
|
- 신규 PC 셋업 가이드: paths.local.json 복사 + UNITY_PROJECT_ROOT 지정 → verify_setup.ps1 통과 → 이후 자동 pull 작동
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue