"'닿을 수 있어' 랑 '바꿔도 돼' 는 다른 문장이야. 둘을 헷갈리는 시스템은 production 에서 깨져."
reachability 는 네트워크 fact, authority 는 capability fact
기계에 SSH session 을 열 수 있다는 건 네트워크가 널 들여보냈다는 거야. 그 session 이 login Keychain 을 unlock 하거나, GUI approval dialog 를 띄우거나, volume owner 로 쓸 수 있는지는 아무것도 안 말해. reachable 이랑 authorized 는 다른 축이고, 초록 연결을 포괄 허가로 다루는 게 실패 한 가족의 뿌리야.
headless 는 절대 가정 안 해
그래서 launchd 나 SSH executor 는 login-Keychain, GUI-session, volume-owner 접근을 가정하면 안 돼. 걘 있을 수도 없을 수도 있는 선언된 capability 지 — 알아서 가져다 쓰는 default 가 절대 아냐. 안전한 자세는: 최소를 가정하고, 실제로 쥔 걸 선언하고, 그게 충분한지 preflight 이 정하게 해.
volume-owner 가 제일 날카로운 경우
제일 명확한 예는 macOS 시스템 업데이트야. 업데이트 executor 는 typed 작업을 stage·resume 할 수 있지만, volume-owner authorization 을 절대 저장하거나 지어내지 않아; bootstrap-token 이랑 interactive-owner 경로는 명시적 capability 로 남아. Apple 규칙을 우회 안 하고, 미래 실행을 쉽게 하려고 credential 을 챙겨두지 않아. envelope 이 권한이 없으면, 정직한 답은 멈추고 그렇게 말하는 거야 — 빠진 권리를 제조하는 게 아니라.
gap 은 처리되지, 덮이지 않아
envelope 이 step 을 못 만족하면, 허용되는 수는 정확히 둘: target 을 needs_attention 으로 보내거나, 호환 executor 에 위임. credential prompt loop 금지. gap 을 건너 밀반입하려고 secret 을 operation 에 복사 금지. host 정체성이 credential 가용성을 대신하게 두기 금지. mismatch 는 보고할 fact 지, 밑으로 굴을 팔 벽이 아냐.