fix(BT16-ImmortalSword): 도구 자동승인 ask 폴백 근본 해결·C35-9 게이트 탐지 공백 수리·BT16 등재
- auto_approve.py: 미등재 도구 폴백 ask→allow + PowerShell 명시 allow (PD "도구·문서 편집 묻지 말고 항상 자동 승인" 4회차 — 도구명 목록 추가는 proxy) - auditor_gate.sh + git_gate_detect.py(신규): 셸 대상 Bash|PowerShell, command JSON 파싱으로 git 전역 옵션(-C 등)·연쇄 명령 뒤 commit/push 탐지, Windows 역슬래시 경로의 memory/org/feedback 편집 게이트 — 기존 차단 대상 11건 중 9건 미탐지 수리 (회귀 18케이스 통과) - PD 지시 로그: BT16-ImmortalSword 소급 등재 · BT15-Org 완료 아카이브 이동 - feedback_tool_approval_hook_gap 근본 원인 갱신 · MEMORY 인덱스 - 대화로그 ImmortalSword/2026-09-16.md 신설 (§1 Safe Mode 원인·수정 · §2 자동 승인 · §3 pm-auditor 판정 반영) · INDEX 등재 ImmortalSword 레포 수정은 별도 로컬 커밋 335e16d9c (push 보류 — PD 확인 대기) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
9ae02ca055
commit
2d6b1e4ae9
|
|
@ -62,7 +62,7 @@
|
||||||
- [🏛️ PD에게 작업 떠넘기기 금지·MCP 능동 활용 의무](feedback_pm_pd_work_offloading.md) — 2026-05-10 BT12-Dev-Death PD 직접 지적 "MCP 활용해서 네가 직접 체크해! 왜 자꾸 나에게 일을 미루는거지?". 본 PM 가설 5회 누적 부정확 후 PD 자료 제공 영역 — Inspector 스크린샷·Animator Parameters 능동 요청 영역. Unity MCP 영역 read_console·controller_get_info·execute_code·manage_animation 영역 자율 활용 가능 영역 영역 영역 영역 X. 재발 차단 3 단계 자문 — MCP 활용 가능 영역 X·Read/Grep 가능 영역 X·PD 능동 요청 정당 영역 X. 헌법급. C29·C36·C44·C45·C47·feedback_pm_solution_proactive_proposal·feedback_pm_root_diagnosis_priority 정합
|
- [🏛️ PD에게 작업 떠넘기기 금지·MCP 능동 활용 의무](feedback_pm_pd_work_offloading.md) — 2026-05-10 BT12-Dev-Death PD 직접 지적 "MCP 활용해서 네가 직접 체크해! 왜 자꾸 나에게 일을 미루는거지?". 본 PM 가설 5회 누적 부정확 후 PD 자료 제공 영역 — Inspector 스크린샷·Animator Parameters 능동 요청 영역. Unity MCP 영역 read_console·controller_get_info·execute_code·manage_animation 영역 자율 활용 가능 영역 영역 영역 영역 X. 재발 차단 3 단계 자문 — MCP 활용 가능 영역 X·Read/Grep 가능 영역 X·PD 능동 요청 정당 영역 X. 헌법급. C29·C36·C44·C45·C47·feedback_pm_solution_proactive_proposal·feedback_pm_root_diagnosis_priority 정합
|
||||||
- [🏛️ hook 상대 경로 + fail-open 침묵 무력화 금지](feedback_hook_relative_path_failopen.md) — 2026-08-21 BT14. hook 상대 경로는 세션 cwd 기준 해석 — GodDem cwd 세션에서 27종 hook(auditor_gate 포함) 침묵 무력화·에러 422건. 처방 = `cd "$CLAUDE_PROJECT_DIR" &&` 전량 적용 + 게이트 헬스체크. hook 참조 스크립트 git 추적 의무. C16·C35-9 정합
|
- [🏛️ hook 상대 경로 + fail-open 침묵 무력화 금지](feedback_hook_relative_path_failopen.md) — 2026-08-21 BT14. hook 상대 경로는 세션 cwd 기준 해석 — GodDem cwd 세션에서 27종 hook(auditor_gate 포함) 침묵 무력화·에러 422건. 처방 = `cd "$CLAUDE_PROJECT_DIR" &&` 전량 적용 + 게이트 헬스체크. hook 참조 스크립트 git 추적 의무. C16·C35-9 정합
|
||||||
- [🏛️ 세션 비대 → 403 사망·세션 수명 기준](feedback_session_lifetime_bloat_403.md) — 2026-08-21 BT14. 스크린샷 116장 → 세션 30MB → 403 socket closed 사망 실측. C14-7(텍스트 실측 우선·허용 3종) + C40 세션 수명(10MB/30장/끊김/압축 → 전환 권고) + session_health.sh 자동 실측. 두 PC 병행 동시 세션 금지. NerdNavis C50-6·C55 이식
|
- [🏛️ 세션 비대 → 403 사망·세션 수명 기준](feedback_session_lifetime_bloat_403.md) — 2026-08-21 BT14. 스크린샷 116장 → 세션 30MB → 403 socket closed 사망 실측. C14-7(텍스트 실측 우선·허용 3종) + C40 세션 수명(10MB/30장/끊김/압축 → 전환 권고) + session_health.sh 자동 실측. 두 PC 병행 동시 세션 금지. NerdNavis C50-6·C55 이식
|
||||||
- [🏛️ 도구 자동승인 반복 프롬프트 = auto_approve.py hook 누락](feedback_tool_approval_hook_gap.md) — 2026-08-21 BT13. PD 반복 지적. 근본 = auto_approve.py가 ToolSearch를 allow 누락→ask 폴백(지연로드 도구마다 프롬프트). 지난 세션 "재시작 필요" 오진단. hook은 매 호출 재실행→스크립트 수정 즉시 반영. 반복 지적=1차 진단 불완전 신호
|
- [🏛️ 도구 자동승인 반복 프롬프트 = auto_approve.py ask 폴백 방향](feedback_tool_approval_hook_gap.md) — 2026-08-21 BT13 · 2026-09-16 BT16 갱신. PD 4회 반복 지적. 근본 = 미등재 도구 ask 폴백(도구명 목록 추가는 proxy — PowerShell 로 재발). 처방 = 폴백 allow·차단 필요분만 명시 deny. 게이트 훅도 도구명·명령 형식 변화에 뚫림(auditor_gate 11건 중 9건 미탐지) → 교체 전 bash -n·회귀 케이스 재실행. hook 은 매 호출 재실행→수정 즉시 반영
|
||||||
- [🏛️ PD "그대로 이식" 지시를 조직이 스케일 재조정으로 임의 변경](feedback_pd_directive_altered_to_rescale.md) — 2026-08-22 BT13 PD 플레이 실측 적발. 공격력 정액축 누락·배율 축소로 원작 이탈. PD §6-D "증가량 모두 그대로 이식"을 조직이 "구조는 원작·수치 재조정"으로 변경·PD 재확인 누락=C36. 원작 그대로 지시 시 임의 재조정 금지·부적합 우려는 고지 후 PD 결정(C2-4)
|
- [🏛️ PD "그대로 이식" 지시를 조직이 스케일 재조정으로 임의 변경](feedback_pd_directive_altered_to_rescale.md) — 2026-08-22 BT13 PD 플레이 실측 적발. 공격력 정액축 누락·배율 축소로 원작 이탈. PD §6-D "증가량 모두 그대로 이식"을 조직이 "구조는 원작·수치 재조정"으로 변경·PD 재확인 누락=C36. 원작 그대로 지시 시 임의 재조정 금지·부적합 우려는 고지 후 PD 결정(C2-4)
|
||||||
- [🏛️ 상점 노출 검증 = 필터+소스(TabKeys) 양쪽](feedback_shop_exposure_filter_source_both.md) — 2026-08-22 BT13. 공격력 2층 정액 attack 트랙이 ConsumedUpgradeKeys(소비)엔 있으나 TabKeys(상점 노출 소스)엔 없어 플레이어 미도달. "사이클 완료" 보고에 구멍·plan-auditor v2도 필터만 확인. 완료 판정=코드소비+UI 도달경로 양쪽 실측·상점검증=소스∩필터·TabKeys 자동교차검증 편입(C2)
|
- [🏛️ 상점 노출 검증 = 필터+소스(TabKeys) 양쪽](feedback_shop_exposure_filter_source_both.md) — 2026-08-22 BT13. 공격력 2층 정액 attack 트랙이 ConsumedUpgradeKeys(소비)엔 있으나 TabKeys(상점 노출 소스)엔 없어 플레이어 미도달. "사이클 완료" 보고에 구멍·plan-auditor v2도 필터만 확인. 완료 판정=코드소비+UI 도달경로 양쪽 실측·상점검증=소스∩필터·TabKeys 자동교차검증 편입(C2)
|
||||||
- [🏛️ 세션 이동 반복 되묻기 금지](feedback_session_transition_repeated_prompting.md) — 2026-08-22 BT13 PD 직접 지적 "별도 판단 후 지시 전까지 세션 이동 되묻지 마". PM이 마일스톤마다 세션 정리 3~4회 반복 제안(PD 매번 "이대로 진행"). 세션 실측 3MB 건강해 근거도 약함. PD 세션 유지 결정 시 이동 재제안 금지·session_health 임계 실도달 시에만 1회 고지. C47·excessive_decision_request 연장
|
- [🏛️ 세션 이동 반복 되묻기 금지](feedback_session_transition_repeated_prompting.md) — 2026-08-22 BT13 PD 직접 지적 "별도 판단 후 지시 전까지 세션 이동 되묻지 마". PM이 마일스톤마다 세션 정리 3~4회 반복 제안(PD 매번 "이대로 진행"). 세션 실측 3MB 건강해 근거도 약함. PD 세션 유지 결정 시 이동 재제안 금지·session_health 임계 실도달 시에만 1회 고지. C47·excessive_decision_request 연장
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,21 @@
|
||||||
---
|
---
|
||||||
name: tool-approval-hook-gap
|
name: tool-approval-hook-gap
|
||||||
description: 도구 자동승인 반복 프롬프트의 근본은 auto_approve.py의 ToolSearch 누락 — 지난 세션 "세션 재시작 필요" 오진단. hook은 매 호출 재실행이라 스크립트 수정이 즉시 반영 (2026-08-21)
|
description: 도구 자동승인 프롬프트 반복의 근본은 auto_approve.py 의 미등재 도구 ask 폴백 방향 — 도구명 목록 추가는 proxy(4회차 재발로 입증). 폴백 allow·차단 필요분만 명시 deny. 게이트 훅 탐지도 도구명·명령 형식이 바뀌면 뚫림 (2026-08-21 · 2026-09-16 갱신)
|
||||||
metadata:
|
metadata:
|
||||||
type: feedback
|
type: feedback
|
||||||
---
|
---
|
||||||
|
|
||||||
# 도구 자동승인 반복 프롬프트 — hook 스크립트 누락이 근본 (2026-08-21 BT13)
|
# 도구 자동승인 반복 프롬프트 — ask 폴백 방향이 근본 (2026-09-16 BT16 갱신)
|
||||||
|
|
||||||
**발견**: PD가 "도구 자동 승인" 여러 세션 반복 지적("몇 번이나 말하냐"). 지난 세션(§6-F-3)은 원인을 `permissions.defaultMode: dontAsk`의 세션 시작 고정으로만 진단하고 "세션 재시작이 완전 해결"로 종결 — **불완전 진단**. 실제 근본은 별도 레이어: PreToolUse 자동승인 hook `scripts/auto_approve.py`가 `ToolSearch`를 allow 목록에서 누락 → line 71 `respond("ask")` 폴백 → 지연 로드 도구를 쓸 때마다 ToolSearch 호출 → 매번 프롬프트. MCP·Bash·Edit·Agent는 커버되나 ToolSearch만 구멍이었다.
|
**발견**: PD "도구 사용 묻지 말고 자동 승인" 지시가 4회 반복(2026-08-19 BT13 ②·08-20·08-21·09-16 BT16 ②). 매번 대응이 **도구명을 allow 목록에 추가**(08-21 = ToolSearch)였고, 새 도구가 쓰이면 PreToolUse 훅 `scripts/auto_approve.py` 의 미등재 도구 폴백 `respond("ask")` 에 걸려 프롬프트가 되살아났다. 09-16 은 Windows 기본 셸 `PowerShell` 이 미등재 — 사용자 전역 allow 에 PowerShell 이 이미 있었는데도 훅의 ask 가 프롬프트를 강제했다. **결함은 목록 누락이 아니라 폴백 방향.** 처방 = 폴백 allow + 차단이 필요한 것만 명시 deny.
|
||||||
|
|
||||||
**Why**: 반복 지적을 받고도 1차 진단이 한 레이어(설정)만 보고 다른 레이어(hook 스크립트)를 놓쳤다. "재시작하면 된다"는 회피성 결론이 재발을 방치했다. 지연 로드 도구 체계에서 ToolSearch는 세션 중 최빈 호출 도구인데 자동승인에서 빠진 것을 실측하지 않았다.
|
**Why**: 반복 지적마다 "이번에 빠진 도구"만 보고 목록을 늘렸다 — 증상(특정 도구 누락) 대응을 근본(폴백 구조)으로 오인. 하네스 도구는 계속 늘어나므로 화이트리스트 + ask 폴백은 구조적으로 재발한다. 같은 계열 결함이 감사 게이트 `scripts/auditor_gate.sh` 에도 있었다 — 셸을 `Bash` 만 보고, `git` 직후 `commit|push` 만 매칭하고, grep 추출이 JSON 이스케이프 따옴표에서 잘리고, Windows 역슬래시 경로를 못 봐서 **차단 대상 11건 중 9건이 새고 있었다**(09-16 pm-auditor Critical · PM 회귀 실측).
|
||||||
|
|
||||||
**How to apply**:
|
**How to apply**:
|
||||||
1. 도구 승인 프롬프트가 반복되면 `defaultMode`뿐 아니라 **PreToolUse 자동승인 hook의 실제 판정 로직**(auto_approve.py)을 먼저 Read — ask 폴백에 걸리는 도구가 있는지 실측
|
1. 도구 승인 프롬프트가 반복되면 `defaultMode` 가 아니라 **PreToolUse 훅의 폴백 판정**부터 Read — ask 폴백이 남아 있으면 그것이 원인
|
||||||
2. hook 스크립트는 **매 도구 호출마다 재실행** → 스크립트 수정은 세션 재시작 없이 즉시 적용 (settings의 defaultMode 세션 고정과 다른 레이어)
|
2. **도구명 목록 추가로 대응하지 말 것.** 폴백 allow 를 유지하고 차단이 필요한 도구·명령만 명시 deny. 단 첫 토큰 매칭처럼 `cd x; ...`·파이프로 빠지는 deny 는 넣지 말 것 — 효과 없이 조직 공인 경로(예: `Remove-Item`)만 막는다
|
||||||
3. 새 내장 도구가 하네스에 추가되면 auto_approve.py allow 목록도 갱신 대상 — ToolSearch·TaskOutput·Workflow 등 제어·조회 도구는 안전 처리
|
3. hook 스크립트는 매 도구 호출마다 재실행 → 수정은 세션 재시작 없이 즉시 적용. 단 게이트 훅은 모든 호출에 걸리므로 **교체 전 스크래치 복사본으로 `bash -n` + 회귀 케이스 실행**(오류 시 전 도구 차단)
|
||||||
4. PD 반복 지적 = 1차 진단이 근본이 아니었다는 신호. 회피성 결론("재시작") 경계. 관련: [[hook-relative-path-failopen]]
|
4. **셸 도구·명령 형식이 늘 때마다 게이트 회귀 케이스 재실행** — `git -C <경로> commit`·연쇄(`&&`·`;`)·PowerShell·Windows 역슬래시 경로 포함 (판정 SOT `scripts/git_gate_detect.py`)
|
||||||
|
5. PD 반복 지적 = 1차 진단이 근본이 아니었다는 신호. 회피성 결론("재시작")·증상 대응("목록 추가") 경계
|
||||||
|
|
||||||
|
**이력**: 2026-08-21 1차 진단 = "ToolSearch allow 누락"으로 목록 추가 종결 → 09-16 PowerShell 로 재발해 proxy 판명. 상세 `공유/대화로그/ImmortalSword/2026-09-16.md` §2·§3. 관련: [[hook-relative-path-failopen]]
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,48 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# PreToolUse hook — 감사 미보고 시 Edit/Write/MultiEdit/Bash(git commit·push) 차단
|
# PreToolUse hook — 감사 미보고 시 Edit/Write/MultiEdit/셸(Bash·PowerShell)의 git commit·push 차단
|
||||||
# C35-9 Layer 3 개정 (2026-04-20 PD님 직접 지시 — 차단 + 해제 워크플로우)
|
# C35-9 Layer 3 개정 (2026-04-20 PD님 직접 지시 — 차단 + 해제 워크플로우)
|
||||||
# 근본 해결: "hook은 proxy" 자인 + LLM 자율 준수 한계 차단 층 추가
|
# 근본 해결: "hook은 proxy" 자인 + LLM 자율 준수 한계 차단 층 추가
|
||||||
# 8회차 변종 재발 방지 (proxy 회피 반사·작업 유연성 명분 기각)
|
# 8회차 변종 재발 방지 (proxy 회피 반사·작업 유연성 명분 기각)
|
||||||
|
# 2026-09-16 탐지 공백 수리 (pm-auditor Critical · 대화로그 ImmortalSword/2026-09-16.md §3):
|
||||||
|
# ① 셸 도구를 Bash 만 봐서 PowerShell 경유 commit/push 미포착
|
||||||
|
# ② grep 추출이 JSON 이스케이프 따옴표에서 잘려 `cd "x" && git commit` 미포착
|
||||||
|
# ③ `git` 직후 commit|push 만 매칭해 `git -C <레포> commit` 미포착
|
||||||
|
# ④ Windows 경로는 JSON 에서 역슬래시라 memory/org/feedback 슬래시 패턴 미매칭
|
||||||
|
# → 셸 판정은 JSON 파싱(git_gate_detect.py), 파싱 실패 시 넓힌 grep 폴백. 셸 도구·명령 형식이 늘면 회귀 케이스 재실행.
|
||||||
|
|
||||||
INPUT=$(cat 2>/dev/null)
|
INPUT=$(cat 2>/dev/null)
|
||||||
|
SCRIPT_DIR=$(cd "$(dirname "$0")" 2>/dev/null && pwd)
|
||||||
|
|
||||||
# 1. tool_name 추출
|
# 1. tool_name 추출
|
||||||
TOOL_NAME=$(echo "$INPUT" | grep -oE '"tool_name"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"\([^"]*\)"$/\1/')
|
TOOL_NAME=$(echo "$INPUT" | grep -oE '"tool_name"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"\([^"]*\)"$/\1/')
|
||||||
|
|
||||||
# 2. 대상 tool 필터
|
# 2. 대상 tool 필터
|
||||||
SHOULD_GATE=0
|
SHOULD_GATE=0
|
||||||
|
GIT_GATED=0
|
||||||
case "$TOOL_NAME" in
|
case "$TOOL_NAME" in
|
||||||
Edit|Write|MultiEdit) SHOULD_GATE=1 ;;
|
Edit|Write|MultiEdit) SHOULD_GATE=1 ;;
|
||||||
Bash)
|
Bash|PowerShell)
|
||||||
CMD=$(echo "$INPUT" | grep -oE '"command"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1)
|
DETECT=$(printf '%s' "$INPUT" | PYTHONIOENCODING=utf-8 python "$SCRIPT_DIR/git_gate_detect.py" 2>/dev/null)
|
||||||
if echo "$CMD" | grep -qE 'git[[:space:]]+(commit|push)'; then
|
if [ "$DETECT" != "1" ] && [ "$DETECT" != "0" ]; then
|
||||||
|
# 폴백 (python 부재·파싱 실패): 전역 옵션(-C <경로> 등)을 건너뛰는 grep — 입력 전체 대상이라 과탐 쪽으로 기운다
|
||||||
|
DETECT=0
|
||||||
|
if echo "$INPUT" | grep -qiE 'git(\.exe)?([[:space:]]+-[^[:space:]]+([[:space:]]+[^-[:space:]][^[:space:]]*)?)*[[:space:]]+(commit|push)'; then
|
||||||
|
DETECT=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ "$DETECT" = "1" ]; then
|
||||||
SHOULD_GATE=1
|
SHOULD_GATE=1
|
||||||
|
GIT_GATED=1
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
[ "$SHOULD_GATE" -eq 0 ] && exit 0
|
[ "$SHOULD_GATE" -eq 0 ] && exit 0
|
||||||
|
|
||||||
# 3. 의무 영역 식별 (auditor_guard 동일 로직)
|
# 3. 의무 영역 식별 (auditor_guard 동일 로직 — 경로 구분자는 / 와 JSON 역슬래시 모두 허용)
|
||||||
TARGET=""
|
TARGET=""
|
||||||
if echo "$INPUT" | grep -qE '"file_path"[[:space:]]*:[[:space:]]*"[^"]*(SKILL\.md|memory/org/feedback|조직공지|PD_지시_트래킹)[^"]*"'; then
|
if echo "$INPUT" | grep -qE '"file_path"[[:space:]]*:[[:space:]]*"[^"]*(SKILL\.md|memory[/\\]+org[/\\]+feedback|조직공지|PD_지시_트래킹)[^"]*"'; then
|
||||||
TARGET="의무 영역 파일"
|
TARGET="의무 영역 파일"
|
||||||
elif echo "$INPUT" | grep -qE '"command"[[:space:]]*:[[:space:]]*"[^"]*git[[:space:]]+(commit|push)'; then
|
elif [ "$GIT_GATED" -eq 1 ]; then
|
||||||
TARGET="git commit/push"
|
TARGET="git commit/push"
|
||||||
fi
|
fi
|
||||||
[ -z "$TARGET" ] && exit 0
|
[ -z "$TARGET" ] && exit 0
|
||||||
|
|
|
||||||
|
|
@ -75,8 +75,16 @@ def main():
|
||||||
if re.search(pat, cmd):
|
if re.search(pat, cmd):
|
||||||
respond("deny", "dangerous bash: " + pat)
|
respond("deny", "dangerous bash: " + pat)
|
||||||
respond("allow", "safe bash")
|
respond("allow", "safe bash")
|
||||||
|
# PowerShell = Windows 기본 셸. 목록에 없어 ask 폴백 → 매 호출 프롬프트가 떴다 (PD 지시 2026-09-16).
|
||||||
|
# 파괴 명령 deny 는 두지 않는다: 첫 토큰 매칭은 `cd x; Remove-Item ...`·파이프로 그대로 빠져 차단 효과가 없고,
|
||||||
|
# Remove-Item 은 Bash rm 차단 시 조직 공인 삭제 경로다(memory/org/feedback_session_start_protocol.md).
|
||||||
|
# 문장·파이프 단위 파괴 명령 판정은 별도 설계 안건 (pm-auditor Major 1 가안 · 대화로그 ImmortalSword/2026-09-16.md §3).
|
||||||
|
if tool_name == "PowerShell":
|
||||||
|
respond("allow", "powershell")
|
||||||
|
|
||||||
respond("ask", "unknown tool " + tool_name)
|
# 미등재 도구도 승인 — ask 폴백은 PD "도구·문서 편집 묻지 말고 항상 자동 승인" 지시(2026-09-16)와 충돌.
|
||||||
|
# 새 도구가 추가될 때마다 프롬프트가 되살아나는 구조였으므로 폴백 자체를 allow 로 둔다.
|
||||||
|
respond("allow", "unlisted tool auto-approved " + tool_name)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""auditor_gate.sh 보조 — 셸 도구(Bash·PowerShell) 명령에 git commit/push 가 있는지 판정 (C35-9 Layer 3)
|
||||||
|
|
||||||
|
grep 추출은 JSON 문자열의 이스케이프 따옴표에서 잘리고, `git` 바로 뒤에 commit|push 가 올 때만 잡아
|
||||||
|
`git -C <레포> commit` · `cd "x" && git commit` · PowerShell 경유 commit/push 를 놓쳤다
|
||||||
|
(2026-09-16 pm-auditor Critical — ImmortalSword 세션 대화로그 §3).
|
||||||
|
|
||||||
|
stdin : PreToolUse hook JSON
|
||||||
|
stdout: "1" = 게이트 대상 / "0" = 아님
|
||||||
|
exit 3: JSON 파싱 실패 (호출부가 grep 폴백으로 판정)
|
||||||
|
"""
|
||||||
|
import io
|
||||||
|
import json
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
GIT_COMMIT_PUSH = re.compile(
|
||||||
|
r"""(?:^|[\s;&|(`{])git(?:\.exe)? # git 실행 토큰 (연쇄·파이프·서브셸 뒤 포함)
|
||||||
|
(?:\s+(?:-C\s+(?:"[^"]*"|'[^']*'|\S+) # -C <경로> (대소문자 무시라 -c key=value 도 여기서 소비)
|
||||||
|
|--[\w-]+(?:=(?:"[^"]*"|'[^']*'|\S+))? # --git-dir=... · --no-pager 등
|
||||||
|
|-\w+))* # 기타 전역 플래그
|
||||||
|
\s+(?:commit|push)\b""",
|
||||||
|
re.IGNORECASE | re.VERBOSE,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
raw = sys.stdin.buffer.read().decode("utf-8", errors="replace")
|
||||||
|
try:
|
||||||
|
data = json.loads(raw)
|
||||||
|
except Exception:
|
||||||
|
sys.exit(3)
|
||||||
|
tool = data.get("tool_name", "")
|
||||||
|
cmd = (data.get("tool_input") or {}).get("command") or ""
|
||||||
|
hit = tool in ("Bash", "PowerShell") and bool(GIT_COMMIT_PUSH.search(cmd))
|
||||||
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
|
||||||
|
sys.stdout.write("1" if hit else "0")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -5,6 +5,7 @@
|
||||||
## 프로젝트
|
## 프로젝트
|
||||||
- `EerieVillage/` — 기묘한 고을: 조선퇴마뎐 (BurningTimes 첫 게임 프로젝트, 2026-04-21 출범)
|
- `EerieVillage/` — 기묘한 고을: 조선퇴마뎐 (BurningTimes 첫 게임 프로젝트, 2026-04-21 출범)
|
||||||
- `GodDem/` — GodDem (신작, 레포 `E:\NerdNavis\GodDem`, 2026-08-19 개시 · 인게임 중앙 디펜스 전환 + Layer Lab UI 개편 + EerieVillage 스킬 이식)
|
- `GodDem/` — GodDem (신작, 레포 `E:\NerdNavis\GodDem`, 2026-08-19 개시 · 인게임 중앙 디펜스 전환 + Layer Lab UI 개편 + EerieVillage 스킬 이식)
|
||||||
|
- `ImmortalSword/` — 불멸의 검 (신작, 레포 `C:\BurningTimes\ImmortalSword` · origin `bluecell2/ImmortalSword`, 2026-09-16 개시 · ReaperGirlIdle 베이스 개발·폴리싱)
|
||||||
- `코어프레임워크/` — BT.Framework 조직 자산
|
- `코어프레임워크/` — BT.Framework 조직 자산
|
||||||
- `조직운영/` — 프로세스·규칙·구조 관련
|
- `조직운영/` — 프로세스·규칙·구조 관련
|
||||||
|
|
||||||
|
|
@ -14,6 +15,7 @@
|
||||||
- `#완료` `#진행중` `#보류` — 상태
|
- `#완료` `#진행중` `#보류` — 상태
|
||||||
|
|
||||||
## 최근 로그
|
## 최근 로그
|
||||||
|
- **2026-09-16: ImmortalSword** — BT16 개시. Safe Mode 원인(활성 플랫폼 Standalone + `#if UNITY_ANDROID` 전용 `PlayGamesPlatform` 무가드 3곳) 수정 · 도구 자동 승인 4회차 근본 해결(ask 폴백) · C35-9 감사 게이트 탐지 공백 수리 (`ImmortalSword/2026-09-16.md`)
|
||||||
- **2026-08-19~20: GodDem** — BT13 개시. 원작(Wild Survival) 밸런스 복호화·CSV 230종, 인게임 중앙 디펜스 실플레이, Layer Lab UI 개편 Phase A·B, EerieVillage 스킬 이식 S1·S2 (`GodDem/2026-08-19.md`)
|
- **2026-08-19~20: GodDem** — BT13 개시. 원작(Wild Survival) 밸런스 복호화·CSV 230종, 인게임 중앙 디펜스 실플레이, Layer Lab UI 개편 Phase A·B, EerieVillage 스킬 이식 S1·S2 (`GodDem/2026-08-19.md`)
|
||||||
- **2026-04-21: 조직운영** — BurningTimes 조직 출범 (Phase 1·2-A·2-B·2-C 집행, NerdNavis → BurningTimes 전환)
|
- **2026-04-21: 조직운영** — BurningTimes 조직 출범 (Phase 1·2-A·2-B·2-C 집행, NerdNavis → BurningTimes 전환)
|
||||||
- 이전 NerdNavis 조직 기록(2026-04-16 ~ 2026-04-20 조직운영 대화로그)은 조직 기억 자산으로 보존 (당시 시점 이벤트 기록)
|
- 이전 NerdNavis 조직 기록(2026-04-16 ~ 2026-04-20 조직운영 대화로그)은 조직 기억 자산으로 보존 (당시 시점 이벤트 기록)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,116 @@
|
||||||
|
# ImmortalSword 대화로그 — 2026-09-16
|
||||||
|
|
||||||
|
> §번호는 프로젝트 누적 연속 (본 파일이 ImmortalSword 최초 로그)
|
||||||
|
>
|
||||||
|
> **프로젝트**: 불멸의 검(ImmortalSword) · 레포 `C:\BurningTimes\ImmortalSword` (origin `bluecell2/ImmortalSword`) · Unity 6000.3.9f1 · ReaperGirlIdle 코드 베이스 위에 얹은 작업 트리. 프로젝트 규칙 SOT = 레포 루트 `CLAUDE.md`(101줄) + `AGENTS.md`(57줄), 기획 SOT = `docs/불멸의 검 기획.md`.
|
||||||
|
|
||||||
|
## 1. 프로젝트 개시 + Unity 컴파일 에러 수정 (PM 직접 집행)
|
||||||
|
|
||||||
|
### PD 원문 (2026-09-16)
|
||||||
|
|
||||||
|
> ① "이 세션은 신규 프로젝트 "ImmortalSword"를 개발 및 폴리싱하기 위한 세션이야. 아래 경로의 프로젝트 경로를 살펴보고, 유니티 에러가 발생되는 부분을 수정해줘. * C:\BurningTimes\ImmortalSword"
|
||||||
|
>
|
||||||
|
> ③ "참고 사항 : 해당 경로의 문서를 한번 살펴봐. * C:\BurningTimes\ImmortalSword 경로에 claude 문서 및 AGENTS 문서를 체크해볼 것."
|
||||||
|
|
||||||
|
(② 도구 자동 승인 지시는 §2)
|
||||||
|
|
||||||
|
### 실측
|
||||||
|
|
||||||
|
| # | 실측 | 근거 |
|
||||||
|
|---|------|------|
|
||||||
|
| 1 | 프로젝트 문서 전문 확인 — `CLAUDE.md` 101줄(ReaperGirlIdle 규칙 + ImmortalSword 확정 규칙: XZ 2D 판정·LocalAvoidance/RuntimeGameTool 부활 금지·GuideMission 유지·생성 파일 편집 금지 등) · `AGENTS.md` 57줄 | Read 전문 |
|
||||||
|
| 2 | 로컬 `main` = `origin/main` (`ada6c2c88`) · 작업 트리 변경은 `ProjectSettings.asset` 줄바꿈(LF→CRLF)뿐 | `git fetch` + `git status -sb` · `git diff --stat` 내용 변경 0 |
|
||||||
|
| 3 | ImmortalSword 에디터(PID 58632) 창 제목 **`ImmortalSword - SAFE MODE - 6000.3.9f1 <Vulkan>`** = 컴파일 에러로 Safe Mode 진입 | `Get-Process` MainWindowTitle |
|
||||||
|
| 4 | `%LOCALAPPDATA%\Unity\Editor\Editor.log`(3.98GB)는 **nn_himminji 인스턴스**가 점유(“There are 2 event systems” 경고 반복) — ImmortalSword 인스턴스 진단 불가 | 끝 300MB 스크립트 스캔(C14-6) |
|
||||||
|
| 5 | 대체 근거 = `Library/Bee/tundra.log.json`(Bee 빌드 로그) — 실패 노드 **1개**(`Assembly-CSharp.dll`) · 에러 **3건** | JSON 파싱 스크립트 |
|
||||||
|
| 6 | 에러 원문: `GameManager.cs(125,13)` · `StartScene.cs(459,13)` · `UI\ChangeAccountPopupUI.cs(48,13)` — 3건 모두 `error CS0103: The name 'PlayGamesPlatform' does not exist in the current context` | 동상 |
|
||||||
|
| 7 | **원인 1** — `Assembly-CSharp.rsp` define = `UNITY_STANDALONE_WIN`(활성 플랫폼 Windows, Android 아님) | rsp 실측 |
|
||||||
|
| 8 | **원인 2** — GPGS `PlayGamesPlatform.cs` L17 `#if UNITY_ANDROID` → 비Android 에서 클래스 자체가 컴파일 제외. 네임스페이스 `GooglePlayGames` 는 다른 파일로 존재(CS0246 0건) | 플러그인 소스 |
|
||||||
|
| 9 | **원인 3** — 사용부 3곳 무가드(`GameManager.Start` 의 Activate 호출만 `#if UNITY_ANDROID` 안) | 소스 |
|
||||||
|
| 10 | 새 클론의 `Library` 는 기본 플랫폼 Standalone → **클론할 때마다 재현되는 잠재 결함**(Android 전환 상태가 git 으로 전파되지 않음) | 클론 시각 21:25~21:29 · Library 22:24 생성 |
|
||||||
|
| 11 | Assembly-CSharp-Editor 는 선행 어셈블리 실패로 **미컴파일 상태**였음 → 후속 에러 은닉 가능성 | dag.json Csc 노드 의존 `Assembly-CSharp.ref.dll` |
|
||||||
|
| 12 | Unity MCP 인스턴스 0 — Safe Mode + `Packages/manifest.json` 에 MCP for Unity 패키지 없음 | `mcpforunity://instances` |
|
||||||
|
|
||||||
|
### 결정과 기각안 (C32)
|
||||||
|
|
||||||
|
**결정 — 사용부 3곳 `#if UNITY_ANDROID` 가드 + 비Android 폴백**
|
||||||
|
|
||||||
|
- `StartScene.LoginGooglePlayGames` → `#else OnGoogleLoginFailed("Google Play Games is Android only")` — 기존 실패 경로(자동 로그인 선택 삭제 + 선택 UI 복귀)로 보내 **토큰 무한 대기 소프트락 차단**
|
||||||
|
- `ChangeAccountPopupUI.LinkGooglePlayGames` → `m_Requesting = true` 앞에 가드 시작 줄을 삽입해 가드 안에 포함(기존 줄 삭제 0), `#else` 경고 로그 — 버튼 잠김 없음
|
||||||
|
- `GameManager.LoginGooglePlayGames` → `#else` 경고 로그(호출부가 이미 `#if UNITY_ANDROID` 안)
|
||||||
|
- `#if UNITY_ANDROID` 블록 내부 코드는 **기존과 문자 동일**(재들여쓰기 없음) — Android 경로 동작 무변경
|
||||||
|
|
||||||
|
**기각안 A — 에디터 활성 플랫폼만 Android 로 전환**: 플랫폼 설정은 `Library` 로컬 값이라 git 으로 전파되지 않음 → 새 클론·새 PC 마다 동일 에러 재발(C2 proxy). 대량 에셋 재임포트도 유발. **코드 가드가 근본 해결**, 플랫폼 전환은 Android 빌드 시점의 별개 작업.
|
||||||
|
|
||||||
|
**기각안 B — `using GooglePlayGames*` 지시문까지 가드**: 네임스페이스는 비Android 에서도 존재(CS0246 0건 실측)해 불필요. `StartScene.cs` L13 주석이 using 정리로 인한 Android 빌드 파손을 경고하고 있어 손대지 않음.
|
||||||
|
|
||||||
|
### 검증
|
||||||
|
|
||||||
|
- **Unity 동일 컴파일러·동일 rsp 스크래치 컴파일**(출력만 스크래치로 우회, `Library` 무접촉): `Assembly-CSharp` exit 0 · **error 0** · warning 10(기존) / `Assembly-CSharp-Editor` exit 0 · **error 0** · warning 0 → 실측 11의 후속 에러 은닉 없음 확인
|
||||||
|
- **PD 에디터 재기동(22:46) 후 Unity 자체 컴파일**: `tundra.log.json`(22:46:15) Csc 노드 2개 **실패 0** · 수정 3파일 발 진단 0 · `Library/ScriptAssemblies/Assembly-CSharp.dll`(22:46:14)·`Assembly-CSharp-Editor.dll`(22:46:15) 생성
|
||||||
|
- **미검증 명시**: Android 타깃 실컴파일은 수행하지 않음(근거 = 가드 내부 문자 동일) · 런타임(Play) 미검증 · **에디터 기동 완료·콘솔(임포트·초기화) 에러 전수 미확인** — 재기동 에디터(PID 59692, 22:46 Hub 실행, `-logFile` 없음)가 23:15 시점까지 `Opening project...`(Safe Mode 에서 건너뛴 에셋 임포트 진행: CPU 누적 3,839초·`UnwrapCL.exe` 29개·최근 2분 Artifacts 1,984파일). 이 인스턴스의 로그는 파일로 남지 않고(`Editor.log` 끝 64MB `ImmortalSword` 0건) MCP 인스턴스도 없어 콘솔 관측 경로 부재
|
||||||
|
|
||||||
|
### 변경 파일 (ImmortalSword 레포)
|
||||||
|
|
||||||
|
- `Assets/Scripts/Manager/GameManager.cs`
|
||||||
|
- `Assets/Scripts/StartScene.cs`
|
||||||
|
- `Assets/Scripts/UI/ChangeAccountPopupUI.cs`
|
||||||
|
|
||||||
|
## 2. 도구·문서 편집 자동 승인 — PD 반복 지시 근본 해결 (PM 직접 집행)
|
||||||
|
|
||||||
|
### PD 원문 (2026-09-16)
|
||||||
|
|
||||||
|
> ② "앞으로는 자꾸 도구나 문서 편집을 묻지 말고 항상 자동으로 승인하도록 해."
|
||||||
|
|
||||||
|
동일 취지 선행 지시: BT13-GodDem ②(2026-08-19) "앞으로는 도구 사용을 묻지 않도록 자동으로 도구 승인처리해" + 2026-08-20·08-21 반복(`auto_approve.py` 주석). **본 건 = 4회차.**
|
||||||
|
|
||||||
|
### 실측
|
||||||
|
|
||||||
|
| # | 실측 | 근거 |
|
||||||
|
|---|------|------|
|
||||||
|
| 1 | 본 세션 `permissionMode` = **`acceptEdits`** — 프로젝트·로컬 설정 `defaultMode: dontAsk` 와 불일치 = 데스크톱 앱 세션 모드는 앱이 정함 | `get_session(self)` |
|
||||||
|
| 2 | `scripts/auto_approve.py`(PreToolUse) 판정 목록에 **`PowerShell` 부재** → 폴백 `ask` 판정. PD ② 이전 본 세션 호출 중 ask 폴백에 걸리는 도구는 **PowerShell(4건)뿐** — 사용자 전역 allow 에 PowerShell 이 이미 있었는데도 프롬프트가 뜬 원인 | 소스 L79 |
|
||||||
|
| 3 | `dontAsk` 의 실제 의미 = **허용 목록 밖 도구 자동 거부**(승인 아님) — PD 의도(자동 승인)와 명칭이 어긋남 | Claude Code 권한 모드 정의 |
|
||||||
|
|
||||||
|
**근본 원인**: 역대 대응이 **도구명 화이트리스트 추가**뿐 → 새 도구(이번엔 Windows 기본 셸 PowerShell)가 등장할 때마다 `ask` 폴백으로 프롬프트 재발. 목록 누락이 아니라 **폴백 방향**이 결함.
|
||||||
|
|
||||||
|
### 조치
|
||||||
|
|
||||||
|
1. `scripts/auto_approve.py` — 폴백 `ask` → **`allow`** + `PowerShell` 명시 allow. 시스템 경로 deny·Bash 위험 명령 deny 는 기존 유지. **PowerShell 파괴 명령 deny 는 1차 초안에 넣었다가 감사 Major 1 로 철회**(§3)
|
||||||
|
2. `~/.claude/settings.json`(사용자 전역) — allow **30개 추가**: `mcp__mcpforunityserver`·`mcp__claude-in-chrome`·`mcp__ccd_view`·`mcp__ccd_sidebar`·`mcp__ccd_window`·`mcp__ccd_pr`·`mcp__ccd_connectors`·`TodoWrite`·`Workflow`·`SendMessage`·`ListAgents`·`EnterPlanMode`·`ExitPlanMode`·`EnterWorktree`·`ExitWorktree`·`CronCreate`·`CronDelete`·`CronList`·`RemoteTrigger`·`PushNotification`·`ReportFindings`·`SuggestSkills`·`ArtifactComments`·`ArtifactData`·`DesignSync`·`ListPlugins`·`ListSkills`·`SearchPlugins`·`SearchSkills`·`SuggestPluginInstall` + `additionalDirectories` 에 `C:/BurningTimes`. **적용 범위 = 이 PC 의 전 프로젝트 세션**(동시 실행 중인 NerdNavisAi 등 포함) · git 밖이라 다른 PC 로는 전파되지 않음. `Bash`·`PowerShell` 은 변경 전부터 전역 allow 에 있었음
|
||||||
|
3. 본 세션 `bypassPermissions` 전환 — 모드 전환 결과만 확인(승인 카드 표시 여부는 미관측). 이 모드에서는 권한 프롬프트가 사라져 훅(`auditor_gate.sh` 등)이 사실상 유일한 통제선 — 공식 문서는 격리 환경 사용을 권장
|
||||||
|
4. `scripts/auditor_gate.sh` 탐지 공백 수리 + `scripts/git_gate_detect.py` 신설 — §3 Critical
|
||||||
|
|
||||||
|
**기각안 — 프로젝트 `settings.json` `defaultMode` 를 `bypassPermissions` 로 변경**: 실측 1 기준 데스크톱 세션 모드는 설정 파일 값을 따르지 않아 효과가 실증되지 않은 변경. 훅 폴백 수정이 설정 모드와 무관하게 작동하는 근본 계층.
|
||||||
|
|
||||||
|
### 발견 이슈 (C3)
|
||||||
|
|
||||||
|
- **`scripts/auditor_gate.sh` C35-9 탐지 공백** — 1차 기재는 "PowerShell 미포착·별건"으로 범위를 좁게 적었음 → 감사 Critical 로 실측 범위 확대·본 커밋에서 수리(§3)
|
||||||
|
- **`scripts/session_health.sh` 오측정 (별건 유지)** — 세션 시작 경고 "현 세션 86MB·이미지 113장"은 본 세션(1.7MB)이 아닌 타 프로젝트 세션 파일. L29 `transcript_path` 추출 실패 시 L33 폴백이 **전 프로젝트 mtime 최신 jsonl** 을 고름(당시 최신 = NerdNavisAi 세션) → C40 세션 전환 권고 오발. 추출 실패 원인은 미확정 → 별건 작업 칩으로 분리
|
||||||
|
|
||||||
|
## 3. pm-auditor 사전 감사 판정 반영 (C35-1 #2·#3)
|
||||||
|
|
||||||
|
판정 요지: **커밋·push 불가 — Critical 1 · Major 6 · Minor 3 · Improvement 1.** C35-11 갈음 비대상(설계 계층 감사 미선행) → C35-1 #2 원칙대로 반영 후 커밋. 감사관은 읽기 전용 지시로 표준 산출물 3종을 만들지 않았으므로 본 엔트리가 판정·처리 기록의 SOT.
|
||||||
|
|
||||||
|
| 등급 | 지적 | 처리 | 근거·조치 |
|
||||||
|
|------|------|------|----------|
|
||||||
|
| **Critical 1** | C35-9 게이트 탐지 공백 — PowerShell 만이 아니라 `git -C <레포> commit`·`cd "x" && git commit`·`git add "a b" && git commit` 도 미탐지. `auto_approve` PowerShell allow + bypass 모드로 노출 확대 | **수용 · 본 커밋 수리** | PM 독립 실측: 기존 게이트는 차단 대상 11건 중 **9건 미탐지**. 감사 지적 외 **추가 공백 1건** — Edit 의 Windows 경로는 JSON 에서 역슬래시라 `memory/org/feedback` 패턴이 빗나가 feedback 메모리 편집이 게이트 무통과. 수리: 셸 대상 `Bash|PowerShell` · command 판정 JSON 파싱(`scripts/git_gate_detect.py` — `git` + 전역 옵션 + `commit|push`) · 파싱 실패 시 넓힌 grep 폴백 · 경로 구분자 `[/\\]` 허용. 회귀 18케이스(차단 11·통과 7)를 빈 매니페스트 임시 레포에서 실행 → **신 게이트 18/18 일치**. 교체 전 `bash -n` 문법 검사(훅이 모든 도구 호출에 걸려 오류 시 전 도구 차단 위험) · 설치 후 실레포 스모크 3건(Read 0 · PowerShell `git status` 0 · PowerShell `git commit` 2). 별건 칩 회수 |
|
||||||
|
| **Major 1** | PowerShell deny = 첫 토큰 매칭이라 `cd x; Remove-Item`·파이프로 무력 · 조직 공인 삭제 경로(`Remove-Item`) 봉쇄 · ask→deny 는 PD 지시 반대 방향인데 미고지 | **수용 · 가안(철회)** | 명시 allow 로 교체, 주석에 철회 사유 기록. 문장·파이프 단위 파괴 명령 판정은 별도 설계 안건 |
|
||||||
|
| **Major 2** | 게임 레포 origin push = 승인 범위 밖 | **수용** | PM 재실측: 작성자 64건 전원 bluecell2 계열(`bluecell2` 59 · `bluecell` 5) · 최신 `ada6c2c88` 도 bluecell2(09-16 21:02) · 로컬 신원 `swrring` = 첫 외부 작성자. GodDem 선례(조직 원격·swrring 작성)와 조건 상이. **3파일 경로 지정 로컬 커밋까지 · push 여부 PD 확인** |
|
||||||
|
| **Major 3** | P19 시작 등록 지연(지시 22:31 → 편집 착수 후까지 미등록) — BT13 Critical 선례 패턴 | **수용 · 자진 기록** | BT16 행에 "착수 전 미등록 → 소급 등록(C13 자진 기록)" 명기 |
|
||||||
|
| **Major 4** | ① "하위 완료" 표기 = 에디터 기동·콘솔 미확인 상태의 포장 위험(C23) | **수용** | ① 상태 = "스크립트 컴파일 에러 3건 해소(검증 완료) · 잔여: 에디터 기동 완료 후 콘솔 에러 전수 확인". §1 미검증 목록 보강 |
|
||||||
|
| **Major 5** | `feedback_tool_approval_hook_gap.md` 가 08-21 근본 원인을 "ToolSearch 누락", 대응을 "목록 갱신"으로 기록 — 4회차 재발로 proxy 입증됐는데 미갱신 | **수용** | 근본 원인 = ask 폴백 방향으로 교체 · How to apply "목록 추가로 대응 금지 · 차단 필요 도구만 명시 deny" · 08-21 진단은 이력 1줄 · 게이트 탐지 교훈 병합 · `MEMORY.md` 인덱스 갱신 |
|
||||||
|
| **Major 6** | BT15-Org 완료 행 활성 테이블 잔류 | **수용 · 부분** | 완료 아카이브로 이동 · 즉답 접두 `[완료: 2026-08-24 02:47 · commit: 75e783d · 참조: 공유/대화로그/GodDem/2026-08-23.md §98 · 2026-08-24.md §103]`(커밋 시각·§ 실존 PM 확인). **부분 사유**: 잔여 ①~⑤ "별도 추적처 이관"은 조직에 전용 백로그 추적처가 없어 신설이 본 지시 범위 밖 → 아카이브 행 사후 조치 칸에 원문 보존 |
|
||||||
|
| **Minor 1** | 표현 정밀도("호출 대다수가 PowerShell" · "가드 안으로 이동") | **수용** | §1·§2 문구 정정 |
|
||||||
|
| **Minor 2** | 전역 설정 변경 목록·적용 범위 미기록 | **수용** | §2 조치 2·3 에 30개 전체·적용 범위·bypass 권고 기재 |
|
||||||
|
| **Minor 3** | 대화로그 INDEX 미등재 | **수용** | `공유/대화로그/INDEX.md` 등재 |
|
||||||
|
| Improvement 1 | 대화로그 3종 고정 태그 사문화 | **기록** | PM 귀책 아님 — BT15-Org 잔여 ⑤ 승계 |
|
||||||
|
|
||||||
|
**감사관 미검증 항목(판정에 명시)**: Android 타깃 실컴파일 · bluecell2 와 PD 의 관계 · 앱 승인 카드 표시 여부 · session_health `transcript_path` 추출 실패 원인.
|
||||||
|
|
||||||
|
**매니페스트**: `.claude/manifest/active/2026-09-16_231442.md` (target 8건).
|
||||||
|
|
||||||
|
**집행 결과**
|
||||||
|
- ImmortalSword 로컬 커밋 **`335e16d9c`** — 3파일 경로 지정 스테이징(+20/-0) · `ProjectSettings.asset`(줄바꿈만 변경·PD 측 상태) 제외 · `main...origin/main [ahead 1]` · **push 미실시(PD 확인 대기)**
|
||||||
|
- PD 지시 로그 — BT16-ImmortalSword 활성 등재(소급) · BT15-Org 완료 아카이브 이동. 스크립트로 이동 후 표 검증: 활성 7행·아카이브 10행 소속 정상, 변경 행 파이프 수 8. 기존 `BT5-Dev` 행 파이프 9 는 HEAD 선재(본 건 무접촉)
|
||||||
|
- 감사 게이트 수리 후 `memory/org/feedback_*` Windows 경로 편집이 신 게이트의 매니페스트 범위 검사를 통과 = 공백 ④ 수리가 실사용에서도 작동
|
||||||
Loading…
Reference in New Issue