"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 이 required 를 available 에 비교해. executor 의 envelope 이 step 을 만족하면, 돌아. 못 하면, operation 은 절뚝이며 앞으로 가며 빌지 않고 — target 을 needs_attention 으로 옮기거나, 같은 durable operation 을 호환 executor 에 위임해. 절대 안 하는 건 credential prompt loop, secret 을 operation 에 복사, host 에 닿은 게 일을 할 수 있다는 걸 함의한 척.