From c14348b37023d9516d9a40c4212ef42a409bc19b Mon Sep 17 00:00:00 2001 From: swrring Date: Thu, 16 Apr 2026 12:19:04 +0900 Subject: [PATCH] =?UTF-8?q?feat(process):=20=ED=95=98=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EB=A6=AC=EB=93=9C=20=EA=B5=AC=EC=A1=B0=20=EB=B3=B4=EC=99=84=20?= =?UTF-8?q?5=EA=B1=B4=20=EC=9D=BC=EA=B4=84=20=EA=B5=AC=ED=98=84=20(PD?= =?UTF-8?q?=EB=8B=98=20=EC=A7=81=EC=A0=91=20=EC=A7=80=EC=8B=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. P22·P19·P20 역할 분리 명확화 (SKILL.md) 2. git_fetch_throttle.sh: 소통 허브 inbox 스캔 추가 — 부서별 수신함 변경 감지 3. hold_watch.sh: 소통 허브 inbox의 HOLD·긴급 파일도 감지 — 양방향 전파 4. P23 기획 결정 재량 범위 신설 (SKILL.md) 5. context_brief.sh: 부서 CONTEXT_BRIEF.md 자동 갱신 — Agent 호출 시 컨텍스트 단절 최소화 Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/skills/너드나비스-코어룰/SKILL.md | 18 ++++++++ scripts/context_brief.sh | 50 +++++++++++++++++++++++ scripts/git_fetch_throttle.sh | 32 +++++++++++++++ scripts/hold_watch.sh | 21 +++++++++- 4 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 scripts/context_brief.sh diff --git a/.claude/skills/너드나비스-코어룰/SKILL.md b/.claude/skills/너드나비스-코어룰/SKILL.md index d33985a..96a1432 100644 --- a/.claude/skills/너드나비스-코어룰/SKILL.md +++ b/.claude/skills/너드나비스-코어룰/SKILL.md @@ -876,6 +876,24 @@ PD님이 **"세션 갱신"**이라고 지시하면, 해당 세션의 에이전 ### 수신 SessionStart hook의 `change_digest.sh`가 자동 표시. 별도 pull 불필요. +### P22·P19·P20 역할 분리 (2026-04-16 통합안 확정) + +| 규칙 | 역할 | 기록 내용 | 중복 금지 | +|------|------|----------|----------| +| **P19 (PD 지시 로그)** | "무엇을 하고 있는가" | 지시 진행 상태 트래킹 (활성/아카이브) | — | +| **P22 (결정로그)** | "무엇이 결정되었는가" | 의사결정 팩트만 (결정 + 근거 + 영향) | P19 내용 복제 금지 | +| **P20 (일일보고)** | "왜 그렇게 결정했는가 + 맥락" | 배경·이슈 포함 활동 요약 | P22를 **참조**하되 복제 금지 (C14-4) | + +## P23. 기획 결정 재량 범위 (2026-04-16 PD님 직접 지시) + +기획실이 독립 세션에서 빠르게 작업할 때의 결정 권한 경계를 명확화한다. + +| 재량 수준 | 범위 | 예시 | +|----------|------|------| +| **기획팀장 재량** | 기존 확정 방향 내 세부 수치 조정, 문서 보완, 분석 작업 | 기존 스테이지 난이도 곡선 미세 조정, 오탈자 수정 | +| **PM 확인 필요** | 신규 시스템 제안, 기존 방향 변경, 타 부서 영향 결정 | 새 메커니즘 도입, 기존 조건 체계 재편 | +| **PD님 확인 필요** | 핵심 밸런싱 방향 전환, 유저 경험 직접 영향, 데이터 자산 변경(C6) | 전투 공식 변경, 과금 밸런스 조정 | + --- ## 교훈 및 노하우 diff --git a/scripts/context_brief.sh b/scripts/context_brief.sh new file mode 100644 index 0000000..dbe56a7 --- /dev/null +++ b/scripts/context_brief.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# 부서 CONTEXT_BRIEF.md 자동 갱신 +# PM 허브에서 Agent로 부서 서브에이전트 호출 시 컨텍스트 단절 최소화 +# 사용: 각 부서 세션에서 push 전 또는 P21 세션 갱신 시 실행 + +REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) +[ -z "$REPO_ROOT" ] && exit 0 + +# 현재 부서 판별 +CURRENT_DIR=$(pwd) +DEPT="" +BRIEF_PATH="" +LOG_PATH="" +case "$CURRENT_DIR" in + *개발실*) DEPT="개발실"; BRIEF_PATH="$REPO_ROOT/개발실/CONTEXT_BRIEF.md"; LOG_PATH="$REPO_ROOT/공유/PD_지시_트래킹/개발실_PD_지시_로그.md" ;; + *기획실*) DEPT="기획실"; BRIEF_PATH="$REPO_ROOT/기획실/CONTEXT_BRIEF.md"; LOG_PATH="$REPO_ROOT/공유/PD_지시_트래킹/기획실_PD_지시_로그.md" ;; + *) exit 0 ;; # PM 세션은 대상 아님 +esac + +echo "# ${DEPT} 컨텍스트 브리프 (자동 갱신)" > "$BRIEF_PATH" +echo "> 최종 갱신: $(date +%Y-%m-%d\ %H:%M)" >> "$BRIEF_PATH" +echo "" >> "$BRIEF_PATH" + +# 활성 지시 요약 +echo "## 활성 지시" >> "$BRIEF_PATH" +if [ -f "$LOG_PATH" ]; then + ACTIVE=$(sed -n '/## 활성 지시/,/## 완료 아카이브/p' "$LOG_PATH" 2>/dev/null | grep -E '^\|.*\|(진행중|보류|대기)\|' | head -10) + if [ -n "$ACTIVE" ]; then + echo "$ACTIVE" >> "$BRIEF_PATH" + else + echo "활성 항목 없음" >> "$BRIEF_PATH" + fi +fi +echo "" >> "$BRIEF_PATH" + +# HOLD·차단 요인 +echo "## HOLD·차단 요인" >> "$BRIEF_PATH" +HOLDS=$(find "$REPO_ROOT/${DEPT}" -maxdepth 1 \( -name '🛑_*' -o -name '⚠️_*' -o -name '🚨_*' \) 2>/dev/null) +if [ -n "$HOLDS" ]; then + echo "$HOLDS" | while read -r f; do echo "- $(basename "$f")" ; done >> "$BRIEF_PATH" +else + echo "없음" >> "$BRIEF_PATH" +fi +echo "" >> "$BRIEF_PATH" + +# 최근 커밋 +echo "## 최근 커밋 5건" >> "$BRIEF_PATH" +git log --oneline -5 >> "$BRIEF_PATH" + +exit 0 diff --git a/scripts/git_fetch_throttle.sh b/scripts/git_fetch_throttle.sh index 3898822..dc22512 100644 --- a/scripts/git_fetch_throttle.sh +++ b/scripts/git_fetch_throttle.sh @@ -35,4 +35,36 @@ if [ -n "$CHANGES" ]; then echo "⚠️ 자동 merge 불가 — 세션 갱신으로 수동 해결 필요" fi fi + +# 소통 허브 inbox 스캔 — 자기 부서 수신 채널에 신규 파일 감지 +REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) +if [ -n "$REPO_ROOT" ]; then + INBOX_HASH_FILE="$THROTTLE_DIR/inbox_hash_$REPO_HASH" + # 현재 부서 판별 (PWD 기준) + CURRENT_DIR=$(pwd) + INBOX_DIRS="" + case "$CURRENT_DIR" in + *개발실*) INBOX_DIRS="$REPO_ROOT/공유/소통/PM→개발실 $REPO_ROOT/공유/소통/기획실→개발실" ;; + *기획실*) INBOX_DIRS="$REPO_ROOT/공유/소통/PM→기획실 $REPO_ROOT/공유/소통/개발실→기획실" ;; + *) INBOX_DIRS="$REPO_ROOT/공유/소통/개발실→PM $REPO_ROOT/공유/소통/기획실→PM" ;; + esac + + INBOX_FILES="" + for DIR in $INBOX_DIRS; do + if [ -d "$DIR" ]; then + FILES=$(find "$DIR" -maxdepth 1 -name '*.md' -not -name 'README.md' 2>/dev/null | sort) + INBOX_FILES="$INBOX_FILES$FILES" + fi + done + + if [ -n "$INBOX_FILES" ]; then + CURRENT_INBOX_HASH=$(echo "$INBOX_FILES" | sha1sum 2>/dev/null | cut -d' ' -f1) + PREV_INBOX_HASH=$(cat "$INBOX_HASH_FILE" 2>/dev/null) + if [ "$CURRENT_INBOX_HASH" != "$PREV_INBOX_HASH" ]; then + COUNT=$(echo "$INBOX_FILES" | grep -c '.md$') + echo "📬 [inbox] 소통 허브 수신함에 파일 ${COUNT}건 — 확인 필요" + echo "$CURRENT_INBOX_HASH" > "$INBOX_HASH_FILE" + fi + fi +fi exit 0 diff --git a/scripts/hold_watch.sh b/scripts/hold_watch.sh index 9a203c7..60f95a7 100644 --- a/scripts/hold_watch.sh +++ b/scripts/hold_watch.sh @@ -10,9 +10,28 @@ THROTTLE_DIR="$HOME/.claude/.nerdnavis_throttle" mkdir -p "$THROTTLE_DIR" 2>/dev/null HOLD_HASH_FILE="$THROTTLE_DIR/hold_files_hash" -# 현재 HOLD·긴급 파일 목록 수집 +# 현재 HOLD·긴급 파일 목록 수집 (자기 부서 + 소통 허브 inbox) HOLD_FILES=$(find "$REPO_ROOT" -maxdepth 2 \( -name '🛑_*' -o -name '⚠️_*' -o -name '🚨_*' \) 2>/dev/null | sort) +# 소통 허브 inbox의 HOLD·긴급 파일도 스캔 (타 부서 HOLD 양방향 전파) +CURRENT_DIR=$(pwd) +INBOX_DIRS="" +case "$CURRENT_DIR" in + *개발실*) INBOX_DIRS="$REPO_ROOT/공유/소통/PM→개발실 $REPO_ROOT/공유/소통/기획실→개발실" ;; + *기획실*) INBOX_DIRS="$REPO_ROOT/공유/소통/PM→기획실 $REPO_ROOT/공유/소통/개발실→기획실" ;; + *) INBOX_DIRS="$REPO_ROOT/공유/소통/개발실→PM $REPO_ROOT/공유/소통/기획실→PM" ;; +esac +for DIR in $INBOX_DIRS; do + if [ -d "$DIR" ]; then + INBOX_HOLD=$(find "$DIR" -maxdepth 1 \( -name '*HOLD*' -o -name '*긴급*' -o -name '*차단*' -o -name '*블로커*' \) 2>/dev/null | sort) + if [ -n "$INBOX_HOLD" ]; then + HOLD_FILES="$HOLD_FILES +$INBOX_HOLD" + fi + fi +done +HOLD_FILES=$(echo "$HOLD_FILES" | grep -v '^$' | sort) + if [ -z "$HOLD_FILES" ]; then # HOLD 파일 없음 — 해시 초기화 echo "" > "$HOLD_HASH_FILE"