# 16. 새 노드 복구 리허설 · 운영자 AI 카드

전용 시험 작업과 이웃 workload 검사를 통과한 경우에만 수행하는 운영 작업입니다.

```ai-prompt
Robot Atlas 16장 복구 리허설을 수행하세요.
ISAAC_REPO/workshop/chapters/16-spot-recovery.md,
infra/isaac/operations.py의 recover와 isaac/state.py의 lease 계약을 먼저 읽으세요.

절차:
1. 실제 GPU 성공을 확인한 환경에서 --recovery-test로 2개 이상 action의 운영자 작업을 만듭니다.
2. owner=operator-validation, operatorRecoveryTest=true를 확인합니다.
3. checkpointCompleted >= 1이고 전체 action 수보다 작은 커밋 경계를 기다립니다.
4. recover의 현재 worker UID·전용 Spot pool·단일 NodeClaim·이웃 workload 검사를 유지합니다.
5. 해당 시험의 NodeClaim과 Pod만 교체하고 저장된 recovery JSON을 읽습니다.
6. 교체 시점의 정확한 checkpointKey 파일을 보관하고 새 노드의 재개를 검증합니다.

성공 근거:
외부 run ID 유지, 시도/worker UID 변화, 다른 노드, 내부 물리 ID/hash 유지,
기존 프레임 prefix 보존과 증가하는 시간, 완료 action 건너뛰기,
복원 후 RTX Ready·지지/안정성 재검사·최종 물리 성공이 모두 필요합니다.
취소·lease 상실 이후 늦은 worker가 성공으로 덮어쓰지 않아야 합니다.
실패하면 상태·산출물·원인을 보존하고 결과를 수정하지 마세요.

시험 범위:
이 recover는 직접 NodeClaim·Pod 교체이며 FIS API나 실제 Spot 통보를 주입하지 않습니다.
actualSpotInterruptionInjected=false를 유지하세요.
Auto Mode는 FIS ec2:SendSpotInstanceInterruptions 등 일부 EC2 작업을 지원하지 않지만
FIS EKS Pod 작업은 지원합니다. 모든 FIS/중단 시험이 불가능하다고 말하지 마세요.
지원되는 FIS Pod 실험도 이 리허설에서 실행한 것으로 간주하지 마세요.

보호:
일반 사용자/일반 operator 작업, 최종·0-action checkpoint, 이웃 workload가 있으면 중단합니다.
PDB·finalizer·소유권 가드를 풀거나 전체 namespace/클러스터를 drain하지 마세요.
기존 GPU01·Jeju·Fargate와 공유 discovery/visibility 설정을 변경하지 마세요.

교체 요청→복원 Ready의 실제 시간과 계측 범위를 보고하세요. 보장 RTO를 만들지 마세요.
```
