"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 을 열 login session 이 없는 거지. git 의 SSH key 는 SSH envelope 이 닿는 데 살았고, gh 의 토큰은 못 닿는 데 살았어. 기계 하나, user 하나, 다른 방 두 개에 든 credential 둘. 근데 이 문은 그중 하나만 열었어.
틀린 fix
반사는 gh auth login 이었어. 재인증하면 auth 실패는 당연히 고쳐지겠지. 안 고쳐져. 구조적으로 credential 을 못 쥐는 envelope 안에서 재인증하면 새로운 실패만 나와. gh auth login 을 백 번 돌려도, headless 문은 새 토큰이 내려앉을 Keychain 을 열 session 이 여전히 없어. 이 반복은 진전처럼 느껴지고 순전히 헛수고야.
맞는 fix
실제로 가진 capability 를 써. SSH transport 는 이미 인증하고 push 했으니 그걸 기대. 아니면 작업이 진짜 Keychain 토큰이 필요하면, login session 이 있는 interactive executor 로 돌려. operation 은 새 credential 이 필요했던 게 아니라, 이미 가진 credential 을 위한 맞는 envelope 이 필요했어. 기계가 누구인지는 그 credential 을 쥘 수 있는지까지 말해주지 않았고, 그 틈이 교훈 전부야.