# task-2644 ANU_CALLBACK_COLLECTOR_CONTROL_PLANE — Rollback Plan (260524)

- 본 task: **RUNTIME_GUARDED 까지만**. HARNESS_ENFORCED 는 별도 task.
- 본 rollback plan: HARNESS_ENFORCED 단계에서 live `~/.claude/settings.json` 에 staged hook 을 적용한 뒤 문제 발생 시 사용.
- spec sha256: `b27da557d4245bce476cd63f4ab174aefc8a25d2da07ec2c8d2c83b01ee96153`
- 회장 verbatim ANCHOR-6: "RUNTIME_GUARDED 까지만 본 task · HARNESS_ENFORCED 별도 회장 verbatim signature task".

---

## 0. 적용 전 백업 (HARNESS_ENFORCED 진입 직전 의무)

```
cp ~/.claude/settings.json ~/.claude/settings.json.bak.task-2644.<ISO8601>
sha256sum ~/.claude/settings.json > ~/.claude/settings.json.sha256.task-2644.<ISO8601>
```

- 백업 파일은 절대 worktree 안에 두지 않는다 (forbidden_paths 가 모두 home 외부).
- 백업 위치: `~/.claude/`.

---

## 1. Rollback Trigger (어떤 상황에서 rollback?)

다음 중 하나라도 충족 시 즉시 rollback (회장 verbatim 회장 보고 트리거 6 중 일부):

| ID | Trigger | Source |
|----|---------|--------|
| T1 | collector 세션이 SessionStart hook 으로 시작 못 함 | live smoke test |
| T2 | Stop hook 이 정상 collector 세션을 차단 (false-positive) | live smoke test |
| T3 | UserPromptSubmit hook 이 회장 본 세션의 일반 prompt 를 차단 | live smoke test |
| T4 | hook 실행 시간 P95 > 2s | 성능 측정 |
| T5 | `live settings 적용` 시도 (회장 보고 트리거 4) | runtime telemetry |
| T6 | Critical7 hit 인데 chair_report_emitted=false (보고 누락) | ledger 검증 |
| T7 | merge execution 발생 (보강-3 hardcoded violation) | git log / merge audit |
| T8 | next_action_result=TELEGRAM_SENT 인데 branch != chair-required | invariant 위반 |
| T9 | Stop hook 10 조건 중 false-negative 발생 (위반인데 통과) | 사후 audit |
| T10 | source_attribution 거짓 분류 (received 표현 + 비-inbound source) | source guard log |

---

## 2. Rollback 절차 (3 단계 · 5 분 이내 완료 목표)

### 2.1 즉시 hook 비활성화 (단계 1)

```
cp ~/.claude/settings.json.bak.task-2644.<ISO8601> ~/.claude/settings.json
sha256sum ~/.claude/settings.json | tee /tmp/settings_post_rollback.sha256
diff /tmp/settings_post_rollback.sha256 ~/.claude/settings.json.sha256.task-2644.<ISO8601>
```

- diff 가 empty 면 성공 · 차이 있으면 백업 무결성 손상 → 회장 보고.

### 2.2 활성 collector 세션 graceful kill (단계 2)

- live `COKACDIR_MODE=ANU_CALLBACK_COLLECTOR` 세션을 모두 식별:
  ```
  ps -ef | grep COKACDIR_MODE | grep -v grep
  ```
- 각 PID 에 대해 SIGTERM (절대 SIGKILL 금지) 후 ledger flush 대기 (최대 30s).
- ledger 누락 시 `memory/system/.callback_ledger.jsonl` 마지막 entry 의 callback_id 만 수동 기록.

### 2.3 검증 (단계 3)

```
python3 hooks/stop_anu_callback_collector_verifier.py <<< '{"hook_event_name":"Stop"}'
```
- 출력: `"collector_mode": false, "block": false` 이면 정상 (hook 자체는 staged file 로만 존재).
- live ~/.claude/settings.json 에 본 task 의 hook entry 가 0건이면 rollback 성공.

---

## 3. Rollback 후 의무 (회장 보고 → 박제 → 추후 재시도)

1. `memory/events/task-2644.rollback.<ISO8601>.json` 생성 (rollback trigger / 시점 / sha256 / log 인용).
2. `memory/reports/task-2644.md` rollback 섹션 append.
3. Telegram chair report packet (`telegram_chair_report_packet_template_260524.json` 기반) 발사:
   - next_action_decided: `HOLD_FOR_CHAIR`
   - chair_report_trigger: `live_settings_modification_attempt` 또는 해당 트리거
4. 재시도 전: HARNESS_ENFORCED task 의 spec 을 회장 verbatim 보강 후 재개.

---

## 4. 본 task (RUNTIME_GUARDED) 범위 rollback

본 task 는 **live ~/.claude/settings.json 수정 0** 가 acceptance 조건. 따라서 본 task 의 rollback 은 단순:

```
cd /home/jay/workspace
git worktree remove .worktrees/task-2644-dev1 --force  # ★ 회장 명시 승인 후만
git branch -D task/task-2644-dev1  # ★ 회장 명시 승인 후만
```

- 로컬 commit 만 한 상태이므로 push/PR/merge 위험 0.
- 회장 명시 승인이 없으면 worktree/branch 삭제 금지.

---

## 5. forbidden_paths (rollback 중에도 절대 수정 금지)

- `~/.claude/settings.json` (rollback 외 절대 수정 금지)
- `~/.claude/settings.local.json`
- `/usr/local/bin/cokacdir`
- `.github/**`
- `memory/specs/system_anu_callback_collector_control_plane_spec_260524.md`
- `scripts/finish-task.sh`, `dispatch.py`, `utils/replacement_pr_runner.py`

---

## 6. 회장 보고 트리거 (rollback 시 자동 보고 의무 6)

- Critical7 hit
- credential expansion
- permission expansion
- live settings 적용 시도
- GitHub destructive write
- forbidden target 수정

위 중 하나라도 rollback trigger 가 되면 본 plan 의 §2.1 + §3.3 을 동시 진행.
