# HARNESS_LIVE_ACTIVATION_RISK_CLASSIFICATION (task-2647)

- version: v1
- recorded_at: 2026-05-24
- live_change_count: 0
- chair_signature_required: true

## 1. Risk Tier 정의

- **CRITICAL**: 봇 전체 차단 가능 / 데이터 손실 / 회장 보고 차단 → 회장 verbatim 별도 서명 필수
- **HIGH**: 특정 기능 차단 / hooks 발화 실패 / live 운영 영향 큼 → 활성화 전 smoke 통과 + 30분 모니터링
- **MEDIUM**: 회피 가능 / 부수 효과 발생 / rollback 시간 5분 이내 → smoke 통과만 요구
- **LOW**: 추가 코드만 / 기존 동작 영향 0 / additive → 일반 PR 머지 절차

## 2. Per-axis Risk

### 2.1 축 1 — task-2646 helper (LOW ~ MEDIUM)

**전체 등급: LOW**

| 모듈 | 등급 | 사유 | 완화책 |
|---|---|---|---|
| utils/callback_registration.py | LOW | 신규 파일, 기존 코드 import 0 | helper.selftest 6/6 PASS gate |
| utils/callback_authority_validator.py | LOW | standalone validator | 4-rule gate test 124 PASS |
| utils/callback_source_cross_checker.py | LOW | standalone cross-checker | ANCHOR-3/4 regression |
| schemas/callback_*_v1.json | LOW | schema 파일 (실행 0) | jsonschema validate |
| dispatch.py (shim 39줄) | MEDIUM | 기존 dispatch.py 수정 (re-export) | 기존 함수 영향 0 검증 (정밀 diff review) |
| tests/ | LOW | test 추가 | 별도 |

**위험 요인**:
- dispatch.py 수정이 유일한 OVERLAP. 단순 re-export shim이므로 기존 동작 영향 0이나, import order 변경 가능성. PR review에서 명시 검증.

**완화 평가**: 본 축은 additive · 기존 코드 import 0 · backward-compat 자명. 활성화 즉시 위험 LOW.

### 2.2 축 2 — task-2644+1 control plane v2 (MEDIUM ~ HIGH)

**전체 등급: HIGH** (settings.json 3 hook entry 활성화 시)

| 모듈 | 등급 | 사유 | 완화책 |
|---|---|---|---|
| hooks/session_start_anu_callback_collector_v2.py | HIGH | 모든 새 세션마다 발화 (timeout 10초) | timeout gate · selftest · 30분 모니터링 |
| hooks/stop_anu_callback_collector_verifier_v2.py | HIGH | 모든 세션 종료 시 발화 · 정상 종료 차단 가능 | dry-run 8 fixture · timeout 10초 hard limit |
| hooks/user_prompt_submit_hook_callback_inbox_v2.py | MEDIUM | 매 prompt 발화 (timeout 5초) · 사용자 인지 가능 | dry-run + timeout hard limit |
| utils/callback_collector_helper_integration.py | MEDIUM | 축 1 helper 3종 동적 import → fail-closed | helper 부재 시 fail-closed 검증 |
| utils/callback_adjudicator_v2.py | LOW | classification 함수 (실행 무중단) | regression 6 test |
| utils/callback_next_action_runner_v2.py | MEDIUM | branch_of() decision 분기 (11 enum) | branch_invariant test · merge_execution_hardcoded_zero |
| utils/source_attribution_guard_v2.py | LOW | text classification only | regression 11 test |
| schemas/*_v2.json | LOW | schema 파일 | jsonschema validate |
| settings.json 3 hook entry | HIGH | hook 발화 정책 변경 | backup + L1 rollback (~30초) |

**위험 요인**:
- SessionStart hook timeout(10초) 시 세션 시작 자체가 지연/실패할 수 있음
- Stop verifier hook이 정상 세션 종료를 차단할 수 있음 (finish-task.sh 영향)
- next_action_runner_v2의 dispatch_via_helper 호출이 무한 루프 가능 (branch_invariant test로 차단)
- 축 1 helper 미존재 시 helper_integration이 fail-closed → 봇 핵심 callback 등록 중단

**완화 평가**: hook 활성화 전 dry-run 필수 + 30분 soak + L1 rollback (settings.json entry 제거) 즉시 가능. 그러나 매 hook 발화의 부작용을 사전 100% 예측 불가 → HIGH 유지.

### 2.3 축 3 — task-2643 PreToolUse runtime guard (HIGH ~ CRITICAL)

**전체 등급: HIGH (ENV gate OFF 시 LOW · ON 시 HIGH)**

| 모듈 | 등급 | 사유 | 완화책 |
|---|---|---|---|
| hooks/pre_tool_use_anu_guard.py | HIGH | 모든 Bash tool 호출 사이 발화 · timeout 5초 · fail-closed deny | ENV gate · timeout · 5 forbidden pattern 정확성 |
| schemas/watcher_contract_v1.json | LOW | schema 파일 | validation test |
| schemas/watcher_dead_letter_v1.json | LOW | schema 파일 | validation test |
| utils/closeout_grade_auto_classifier.py | LOW | classification only | regression test |
| utils/pr_open_watcher_wrapper.py | MEDIUM | dry-run 가능 watcher · LiveCallViolationError | dry_run gate · ANU owner 검증 |
| settings.json PreToolUse Bash matcher | HIGH | Bash 호출 차단 가능 | L1 ENV unset · L2 entry 제거 |
| ENV `CLAUDE_PRE_TOOL_USE_HOOK_ENABLED` | LOW (자체) · HIGH (활성화 영향) | gate 변수 | unset 즉시 비활성 |

**위험 요인 (CRITICAL 가능성)**:
- 5 forbidden pattern 정의에 false positive 발생 시 정상 Bash 차단 → 봇 작업 전체 멈춤
- 특히 GROUP_4_SEMANTIC_WAIT (wait/poll/until/monitor/gemini/ci 키워드 + GH API) 가 광범위 → 정상 PR review 명령 오인 가능
- fail-closed exception handler (lines 234-244)가 deny 반환 → exception 발생 시 모든 Bash 차단
- hook timeout 5초 초과 시 claude-code가 hook 실패로 간주 → tool 차단

**완화 평가**:
- ENV gate `CLAUDE_PRE_TOOL_USE_HOOK_ENABLED=unset` 으로 즉시 무중단 비활성 가능 → L1 30초
- settings.json entry 제거로 hook 등록 자체 차단 → L2 5분
- false positive 0 검증을 위해 30분 soak + 별도 fixture 추가 권장
- 활성화 ENV gate OFF 상태로 settings.json만 머지하고 ENV ON은 별도 회장 verbatim 추가 서명 권장

### 2.4 Cross-axis Combination Risk

| 조합 | 등급 | 사유 |
|---|---|---|
| 축 1 + 축 2 동시 활성화 | MEDIUM | 축 2가 축 1 helper 의존 → 축 1 먼저 활성화 강제 |
| 축 2 + 축 3 동시 활성화 | HIGH | settings.json 2개 entry 동시 추가 · PreToolUse가 Stop hook subprocess 검사 가능성 (단, Stop은 Bash가 아니므로 일치 안 함) |
| 축 1 + 축 3 동시 활성화 | MEDIUM | import 의존 0 · settings.json 단일 entry만 추가 |
| 3축 동시 활성화 | HIGH | 모든 settings.json 변경 + helper import + PreToolUse 충돌 가능 |

**권장**: 순차 활성화 (축 1 → 축 2 → 축 3) · 동시 활성화 금지

## 3. Risk Summary Matrix

| 차원 | 축 1 | 축 2 | 축 3 |
|---|---|---|---|
| 코드 모듈 | LOW | MEDIUM (helper integration) ~ HIGH (hooks) | HIGH (PreToolUse hook) |
| Schema 파일 | LOW | LOW | LOW |
| settings.json 변경 | 없음 | HIGH (3 entry 추가) | HIGH (1 entry + ENV gate) |
| ENV 변수 | 없음 | 있음 (ANU_WORKSPACE_ROOT — 비-차단) | 있음 (CLAUDE_PRE_TOOL_USE_HOOK_ENABLED — 차단 gate) |
| Rollback L1 | 불가 (~5분 L2만) | ~30초 (entry 제거) | ~30초 (ENV unset) |
| 전체 등급 | **LOW** | **HIGH** | **HIGH** |

## 4. 회장 서명 요구 사항 (axis별)

- 축 1: 표준 PR merge 서명 (LOW)
- 축 2: PR merge + settings.json hook entry 추가 별도 verbatim (HIGH)
- 축 3: PR #146 merge + settings.json + ENV gate 별도 verbatim (HIGH) + 30분 soak 후 final activation 추가 verbatim 권장

## 5. 본 task에서 한 일 / 안 한 일

- ✅ 3축 risk 등급 분류
- ✅ 모듈별 sub-risk 정리
- ✅ cross-axis 조합 위험 평가
- ❌ 실 활성화 → 0 (위험 노출 0)
- ❌ false positive 측정 → 0 (smoke 실행 부재)

끝
