"push 는 성공. CLI 는 실패. 같은 기계, 같은 user, 같은 초 — 유일하게 다른 건 문이었어."
상황
control-plane Mac 의 headless SSH session 이 repository 를 bootstrap 하고 있었어. git over SSH 는 완벽히 됐어: remote 에 인증하고 불평 없이 push 했어. 모든 명백한 척도로, 이 session 은 GitHub 접근이 됐어.
벽
그다음 gh, GitHub CLI 가 같은 상자에서, 같은 session 에서, 같은 user 로 실패했어. 왜? gh 는 자기 auth 토큰을 login Keychain 에 두는데, headless SSH session 은 SecuritySessionID 가 없어 — 그 Keychain 을 unlock 할 login session 이 없어. git 의 SSH key 는 SSH envelope 이 닿는 데 살았고; gh 의 토큰은 못 닿는 데 살았어. 기계 하나, user 하나, 다른 두 방의 credential 둘 — 그리고 이 문은 그 중 하나만 열었어.
틀린 fix
반사는 gh auth login 이었어 — 재인증, 그럼 auth 실패가 당연히 고쳐지지. 안 고쳐져. 구조적으로 credential 을 못 쥐는 envelope 안에서 재인증하면 fresh 한 실패만 나와. gh auth login 을 백 번 돌려도; headless 문은 새 토큰이 내려앉을 Keychain 을 unlock 할 session 이 여전히 없어. loop 은 진전처럼 느껴지고 순수한 헛수고야.
맞는 fix
실제로 가진 capability 를 써. SSH transport 는 이미 인증하고 push 했어 — 그러니 그걸 기대. 아니면, 작업이 진짜로 Keychain 토큰이 필요하면, login session 을 가진 interactive executor 로 돌려. operation 은 새 credential 이 필요했던 게 아니라; 이미 가진 credential 을 위한 맞는 envelope 이 필요했어. host 정체성이 credential 가용성을 함의 안 했고 — 그 gap 이 교훈 전부야.