feat(process): 하이브리드 구조 보완 5건 일괄 구현 (PD님 직접 지시)
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) <noreply@anthropic.com>
This commit is contained in:
parent
d63c7f5a0e
commit
c14348b370
|
|
@ -876,6 +876,24 @@ PD님이 **"세션 갱신"**이라고 지시하면, 해당 세션의 에이전
|
||||||
### 수신
|
### 수신
|
||||||
SessionStart hook의 `change_digest.sh`가 자동 표시. 별도 pull 불필요.
|
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) | 전투 공식 변경, 과금 밸런스 조정 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 교훈 및 노하우
|
## 교훈 및 노하우
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -35,4 +35,36 @@ if [ -n "$CHANGES" ]; then
|
||||||
echo "⚠️ 자동 merge 불가 — 세션 갱신으로 수동 해결 필요"
|
echo "⚠️ 자동 merge 불가 — 세션 갱신으로 수동 해결 필요"
|
||||||
fi
|
fi
|
||||||
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
|
exit 0
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,28 @@ THROTTLE_DIR="$HOME/.claude/.nerdnavis_throttle"
|
||||||
mkdir -p "$THROTTLE_DIR" 2>/dev/null
|
mkdir -p "$THROTTLE_DIR" 2>/dev/null
|
||||||
HOLD_HASH_FILE="$THROTTLE_DIR/hold_files_hash"
|
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)
|
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
|
if [ -z "$HOLD_FILES" ]; then
|
||||||
# HOLD 파일 없음 — 해시 초기화
|
# HOLD 파일 없음 — 해시 초기화
|
||||||
echo "" > "$HOLD_HASH_FILE"
|
echo "" > "$HOLD_HASH_FILE"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue