"어느 기계인지는 굳혔어. 이제 operation 이 뭔지를 굳혀. Low 가 네 등 뒤에서 High 로 자라지 못하게."
하나가 아니라 둘이 굳어
durable-operations 트랙은 operation 이 어느 기계를 겨누는지를 굳혔어. 이번엔 operation 이 뭔지를 굳혀. 그 kind 랑 risk class. 둘 다 승인 순간부터 실행 순간까지 가만히 있어야 해. 승인은 특정 집합에 대한 특정 행동에의 동의니까. 나중에 둘 중 하나라도 바뀌면, 그 동의는 처음 뜻하던 게 아니게 돼.
kind 랑 risk 는 domain-bound
kind 는 취향대로 고르는 자유 라벨이 아냐. 고정된 risk class 를 가진 domain 에 묶여. restart_service 는 Medium, migrate_control_plane 은 High. High 짜리 행동을 조용히 Low 로 다시 라벨링해서 절차를 건너뛸 수 없어. (kind → risk) 매핑이 요청마다 고르는 게 아니라 domain 에 한 번 정의되니까.
매 경계에서 다시 확인
(kind, risk) 쌍은 세 경계에서 확인돼. operation 이 정의될 때, delegate 가 claim 할 때, 그리고 시작할 때. delegate 가 restart_service 를 claim 하고 조용히 purge_host_data 를 시작할 순 없어. kind 가 승인된 것과 안 맞는 시작은 거부돼. 승인은 나중에 그 안에서 흘러갈 수 있는 느슨한 카테고리가 아니라, 특정 행동에 딱 붙어.
fail closed, 모든 mode 에서
그리고 어떤 mismatch 든 대응은 어디서나 같아. 거부. 어느 경계의 kind-or-risk mismatch 든 operation 을 fail closed 해. 모든 mutation mode 에서, production 이 잠겼든 활짝 열렸든. 애매함의 기본값은 정지지 절대 진행이 아냐. 불분명한 operation 을 한 번 통과시키는 그때가, 알고 보면 위험한 그거였던 때니까.