Skip to content

fix(runners): 러너 연결 오류 전수 수정 — codex 신규기기 회귀·grok 거짓 연결·자가치유 누락 - #301

Merged
beyondworks merged 3 commits into
mainfrom
fix/runner-verify-sweep
Aug 26, 2026
Merged

fix(runners): 러너 연결 오류 전수 수정 — codex 신규기기 회귀·grok 거짓 연결·자가치유 누락#301
beyondworks merged 3 commits into
mainfrom
fix/runner-verify-sweep

Conversation

@beyondworks

Copy link
Copy Markdown
Owner

배경(곰대장 제보 2026-08-26)

"클로드·그록·제미나이 다 연결됨인데 크루 영입 실패." 화면 오류는 Grok 400이 Claude 상표로 오표기된 것(#299에서 표기 수정). 유건 지시로 러너 연결 오류를 적대적 전수조사(두 검수 에이전트 + 직접 요청 캡처). 결과: 우리 코드 결함이 겹친 것, 사용자 환경 탓 아님.

확정 원인(제보 = C1 + D1/D2 겹침)

  • C1 CRITICAL(내 v0.1.46 회귀): withCodexLock가 락 부모 ~/.argo/tools를 락 에서 생성 → gemini/npx를 먼저 안 써본 신규 기기에서 mkdir ENOENT를 "락 보유자 있음"으로 오해 → 120초 헛돌다 "codex 조달이 다른 프로세스에서 진행 중" 거짓 문구로 영구 실패. 개발 PC엔 ~/.argo/tools가 있어 재현 불가 → 신규 사용자에게만 발현(제보 형태와 정확히 일치). 실측: main 120,151ms → 수정 3ms.
  • D1 CRITICAL: grok verify가 xAI 400("Incorrect API key")을 통과로 판정 → "not even a key"도 "연결됨" 초록불. gemini(400)·glm(200바디)를 이미 닫은 같은 구멍의 세 번째(불변식 전수 수색 누락 — 제 규칙 위반).
  • D2 HIGH: grok 400이 AUTH_ERR_RE에 안 걸려 채팅 자가치유(러너 교체) 미발동 → 다른 러너 연결돼도 채팅 턴 사망(영입은 게이트가 달라 살아나는 비대칭).

수정

  • C1: 락 부모를 락 밖에서 선생성 + mkdir 실패 코드 분기(EEXIST만 대기, EACCES/EPERM은 원인 즉시 표면화).
  • D1: grok verify에 400 바디 판정(Incorrect API key/invalid-argument는 무효, Model not found는 유효로 — 모델 오류 시 유효 키 오거절 방지).
  • D2: AUTH_ERR_RE에 incorrect api key·bad credentials(문구 기준만 — 상태코드 전체 금지).
  • D5(보안): claude runnerCredEnv에 ANTHROPIC_BASE_URL 고정(타 4러너와 대칭 — 회사 키가 호스트 env의 프록시로 새던 표면). D9: grok 모델 존재 실측 확정 주석.

검증

  • 회귀 테스트 4묶음(codex 신규기기 120초 헛돎·grok verify 400·AUTH_ERR_RE 문구·오분류 방지), npm test 948/943·0 fail, next build 통과.
  • C1 라이브: main 120s vs 수정 3ms 대조 실측.

후속(같은 전수조사에서 나온 백로그, 별도 PR)

검수가 실측·정적으로 확인한 나머지: C2(codex OAuth 저장 무검증), C3(OAuth scope 벤더 불일치), C4(codex 갱신본 미회수), C5(셸 잡음→CLI 미발견 오분류), D3(기기코드 verify 없음), D4(verify=/v1/models vs turn=/v1/messages 통일), D6(kimi/openrouter base 변수 불일치), D7(antigravity 바이너리만으로 초록), D8(저장 후 재검증 없음), D11(온보딩 시드 무검증). 백로그 문서로 정리 예정.

C1(CRITICAL 회귀): withCodexLock가 락 부모(~/.argo/tools)를 락 안에서 만들어, gemini/npx를 먼저
  안 써본 신규 기기에서 mkdir ENOENT→'다른 프로세스 진행 중' 거짓 문구로 120초 후 영구 실패.
  부모를 락 밖에서 선생성 + mkdir 실패 코드 분기(EEXIST만 대기). 실측 120,151ms→3ms.
D1(CRITICAL): grok verify가 xAI 400(Incorrect API key)을 통과로 판정 → 'not even a key'도 초록불.
  gemini(400)·glm(200바디)와 같은 계열의 세 번째 구멍(불변식 전수 수색 누락). 400 바디 판정 추가.
D2(HIGH): grok 400 문구가 AUTH_ERR_RE 미매치 → 채팅 자가치유(러너 교체) 미발동. incorrect api key
  ·bad credentials 추가(상태코드 전체는 금지 — 모델 오류 오분류 방지).
D5(보안): claude runnerCredEnv에 ANTHROPIC_BASE_URL 고정 — 호스트 env 상속으로 회사 키가 제3자로
  나가던 표면 차단(타 4러너와 대칭). D9: grok 모델 존재 실측 확정 주석.
회귀 테스트: codex 신규기기(120초 헛돎)·grok verify 400·AUTH_ERR_RE 문구/오분류 방지.
@beyondworks
beyondworks merged commit 4dd8a3a into main Aug 26, 2026
2 checks passed
@beyondworks
beyondworks deleted the fix/runner-verify-sweep branch August 26, 2026 09:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant