"runtime 에 틀린 문을 발견하지 마. 양쪽에 물어. 뭐가 필요해, 뭘 할 수 있어. 뭐가 움직이기 전에."
runtime 의 놀람을 preflight 의 결정으로
Keychain 이야기는 작업 도중에 실패했어. envelope 이 일을 못 한다는 걸 알아내기 제일 나쁜 자리지. 시스템 레벨 fix 는 그 mismatch 를 operation 도중에 발견하는 게 불가능하게 만드는 거야. mutation 전에 확인해. 도중이 아니라.
executor 는 뭘 할 수 있는지 선언해
모든 executor 는 자기 capability 를 명시적 목록으로 알려. interactive_gui_session, login_keychain, ssh_credentials, sudo_noninteractive, user_approval_available, reboot_survivable, watchfire_callback. 이 executor 가 실제로 어떤 문인지 스스로 밝히는 거야. 짐작이 아니라 선언.
step 은 뭐가 필요한지 선언해
모든 operation step 은 성공에 필요한 capability 를 선언해. 이 OS 업데이트 적용 은 reboot_survivable 이 필요해. 어떤 session 밑에서든 기계를 재시작하니까. 이 토큰 읽기 는 login_keychain 이 필요하고. 요구사항은 step 정의의 일부야. step 이 뭘 하는지 바로 옆에 붙어 있어.
preflight 이 둘을 맞춰
mutation 전에 preflight 이 필요한 걸 가진 것에 대봐. executor 의 envelope 이 step 을 만족하면 돌아. 못 하면, operation 은 어떻게든 밀고 나가며 잘되길 빌지 않아. target 을 needs_attention 으로 옮기거나, 같은 durable operation 을 호환되는 executor 에 위임해. 절대 안 하는 건 credential prompt 반복, secret 을 operation 에 복사, host 에 닿은 게 일할 수 있다는 뜻인 척.