# Axis 3 Rollback Plan — Finalized (Phase 0 · L1/L2)

- task_id: task-2652
- chair_authorization_id: `CHAIR-AUTH-AXIS-3-PHASE0-20260524-JJONGS-PRETOOLUSE-AUDIT-001`
- ts: 2026-05-24 KST
- status: **FINALIZED_FOR_CHAIR_SIGNATURE**

## 1. chair signature packet field_06 + task-2643 rollback plan 통합

본 plan은 두 단일소스를 통합한다:
- chair signature packet `chair-signature-packet-axis-3-pretooluse-runtime-guard-260524.json` field_06 (L1/L2/chair_rollback_trigger)
- task-2643 산출물 `memory/specs/task_2643_rollback_plan_260523.md` (5 적용 단계 rollback · ENV toggle · 자동 disable)

## 2. L1 Rollback — 30 sec 응답

### L1 trigger 조건 (chair packet verbatim · 3건)
- T1: PreToolUse hook unhandled exception (★ fail-safe로 tool 허용해야 봇 작동 보장 · 단 hook 내부 fail-closed 와 다른 layer)
- T2: 정상 tool 호출 false positive BLOCK 발생 (SP1 fail)
- T3: forbidden path false negative 발생 (SP2 fail)

### L1 action 시퀀스
1. **ENV toggle off** (즉시 hook 비활성화 · 가장 빠른 회복 경로)
   ```
   unset CLAUDE_PRE_TOOL_USE_HOOK_ENABLED
   ```
2. **settings.json rollback** (백업본 restore)
   ```
   cp ~/.claude/settings.json.backup.<applied_ts> ~/.claude/settings.json
   ```
3. **git revert** (Axis 3 적용 commit 이 main 에 반영된 경우)
   ```
   git revert <axis_3_settings_patch_commit>
   ```
4. **PreToolUse 항목 명시 제거** (settings.json 안에 잔존 항목 있을 시)
   - `hooks.PreToolUse` 배열에서 `pre_tool_use_anu_guard` matcher 객체 제거 (claude-code 가 즉시 hook 미spawn)
5. **ANU 회장 보고** (rollback 사실 + 사유 + 사고 sample tool call 박제)

### L1 응답 시간 목표
- **30 sec 이내** ENV toggle off + settings.json rollback 완료
- git revert 는 부가 작업 (push 필요 시 5 min 이내)

## 3. L2 Rollback — 5 min 응답

### L2 trigger 조건 (chair packet verbatim · 2건)
- T4: Axis 3 적용 후 5분 내 첫 dispatch cycle에서 봇 process 차단 발생
- T5: Axis 1/2 regression baseline 변화 (회귀 발생 · PR #145 merge 후 추정 1576+ test count 감소 또는 신규 FAIL)

### L2 action 시퀀스
1. **L1 전체 시퀀스 즉시 실행** (ENV toggle off + settings.json rollback)
2. **Axis 3 live revert PR** 작성 (별도 branch `revert/axis-3-pretooluse-live`)
   ```
   gh pr create --base main --head revert/axis-3-pretooluse-live --title "[REVERT] Axis 3 PreToolUse hook live activation (L2 trigger T4/T5)"
   ```
3. **PreToolUse hooks 등급을 `HARNESS_ENFORCED` → `RUNTIME_GUARDED` 강등** (closeout_grade_auto_classifier 재산정)
4. **회장 verbatim 보고** + rollback PR merge 결정 위임
5. **Axis 1/2 regression 베이스라인 재측정**
   ```
   pytest tests/regression/ -q --tb=no 2>&1 | tail -5
   ```

### L2 응답 시간 목표
- **5 min 이내** L1 + 추가 revert PR draft 작성 완료
- PR merge 는 회장 결정 후 (immediate revert 권한 = CHAIR_ONLY)

## 4. chair_rollback_trigger (verbatim · 별도 권한)

- 회장 verbatim revert signature → 즉시 모든 rollback action 권한 부여 (L1/L2 trigger 없이도)
- 회장 명시 형식: `CHAIR_REVERT_AXIS_3_LIVE_<YYYYMMDD>_<HEAD_SHA>` (예시 · 회장 결정 시 verbatim)
- 회장 sig 수신 시 ANU는 chair signature 우선 적용 + 사후 보고

## 5. 자동 disable trigger 6 조건 (task-2643 rollback plan §3 + 본 audit 확장)

| # | condition | action 권한 | 분류 |
|---|---|---|---|
| 1 | post-activation smoke fail (legit tool call 거부됨) | CHAIR_ONLY (default) · ANU_AUTO_DISABLE_ON_SMOKE_FAIL (chair 사전 승인 시) | L1 |
| 2 | false positive rate > 10% (24h window) | CHAIR_ONLY (default) | L2 |
| 3 | ANU 본체 정상 작업 차단 (PR open / commit / push 정상 차단) | CHAIR_ONLY | L1 |
| 4 | dispatch.py cycle 차단 | CHAIR_ONLY | L2 (T4) |
| 5 | Axis 1/2 regression FAIL 신규 발생 | CHAIR_ONLY | L2 (T5) |
| 6 | hook spawn 실패 (FileNotFoundError / timeout 빈발) | CHAIR_ONLY | L1 (T1) |

## 6. rollback 검증 체크리스트

L1 완료 후:
- [ ] ENV toggle off 후 `claude` 명령어 정상 동작 (PreToolUse hook bypass 확인)
- [ ] Bash tool call 정상 (deny 없음)
- [ ] 백업본 `~/.claude/settings.json.backup.<ts>` 존재
- [ ] hook 적용 직전 commit SHA 기록 (`memory/events/pre_tool_use_anu_guard_rollback_<ts>.json`)
- [ ] 회장 보고 + 사유 명시

L2 완료 후 (L1 추가):
- [ ] revert PR 작성 완료 (gh pr view)
- [ ] PreToolUse hooks closeout grade `RUNTIME_GUARDED` 강등 박제
- [ ] Axis 1/2 regression baseline 동일 확인 (test count + new FAIL 0)
- [ ] dispatch.py sample cycle 정상 통과 (cron registration 성공 확인)

## 7. 영구 disable (last resort)

- `~/.claude/settings.json` 의 `PreToolUse` 섹션 완전 삭제
- 백업본 보존 (감사용 · `~/.claude/settings.json.backup.<ts>.permanent_disable`)
- 재적용 = 회장 별도 verbatim signature
- 재적용 시 사전 신규 fixture 작성 + smoke 재수행 필수

## 8. 회장 verbatim 제약 (task-2643 rollback plan §6)

- live settings.json 직접 수정 = 본 task-2643 범위 외
- rollback plan 자체도 staged (적용 결정 = 별도 task)
- ANU 자동 disable 권한 = 회장 사전 승인 시에만 부여

## 9. forbidden_action_count = 0

본 plan 작성 단계 destructive action 실행 0. rollback 절차 자체는 정적 spec.

끝
