fix: geny-executor 2.64.8~2.65.2 이식 — 턴이 멈추던 두 경로 포함 (2.69.0) - #1
Merged
Conversation
XGEN 은 2.64.7 에서 갈라져 독자적으로 가지만, **같은 뿌리에서 온 결함은 여기에도 그대로 있다.** 해당 파일들을 전수 대조한 결과 갈라진 이후의 차이는 포매팅뿐이었고, 아래 넷은 전부 미이식이었다. **2.65.2 — 끝난 CLI 가 제 stdout 으로 턴을 붙잡는다.** 파이프의 EOF 는 마지막 writer 가 닫을 때 온다. CLI 가 띄운 MCP 자식이 stdout 을 물려받아 살아남으면 readline() 은 아무도 다시 쓰지 않을 파이프에서 영원히 막힌다. proc.wait() 도 구조가 안 된다 — asyncio 는 자식 종료 + 모든 파이프 해제를 둘 다 봐야 완료시키는데, 누수된 FD 가 바로 그 두 번째 조건을 막는다. 완전한 답을 만들어 놓고 턴이 멈춘다. **2.65.1 — 죽은 핫스페어가 이후 모든 턴을 세운다.** returncode 는 장부일 뿐이라 거둬지기 전까지 None 이고, 죽은 프로세스가 영원히 건강한 스페어로 읽힌다. kill(pid, 0) 으로 커널에 직접 묻는다. **2.65.0 — 노트를 지워도 색인 행이 남는다.** 부팅 전방 스캔으로는 못 잡는다 — 존재하는 파일을 훑는 루프는 없는 파일을 방문하지 않아서 쌓이기만 한다. **2.64.8 — DocGuide(path=)**. XGEN 의 토픽 집합에 맞춰 손으로 적용했다(이쪽은 edit2docs 패키지명과 토픽 목록이 갈라져 있어 통째 복사가 맞지 않았다). 재현 테스트를 함께 가져왔다. `test_cli_leaked_stdout.py` 는 프로드 실패 형태를 정확히 재현한다 — 완전한 답, 정상 종료(rc=0), FD 를 쥔 자식 하나. 이식 전 리비전에서 4건 중 3건이 실패하는 것을 확인했다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
왜
XGEN 은
geny-executor2.64.7 에서 갈라져 독자적으로 가지만, 같은 뿌리에서 온 결함은 여기에도 그대로 있다.해당 파일들을 전수 대조했다 — 갈라진 이후의 차이는 포매팅뿐이었고, 아래 넷은 전부 미이식 상태였다. 버전 번호가 2.68.1 로 Geny(2.65.2)보다 커서 최신처럼 보이지만, 그 번호는 개명·CI·의존성 정리로 오른 것이다.
무엇 (앞의 둘은 프로덕션에서 턴이 멈춘다)
🔴 2.65.2 — 끝난 CLI 가 제 stdout 으로 턴을 붙잡는다
파이프의 EOF 는 마지막 writer 가 닫을 때 온다. CLI 는 MCP 서버를 자식으로 띄우고 그 자식들이 stdout 을 물려받으므로, 하나라도 CLI 보다 오래 살면
readline()이 영영 오지 않을 바이트를 기다린다.proc.wait()로도 못 푼다 — asyncio 는 자식 종료 와 모든 파이프 해제를 둘 다 봐야 완료로 치는데, 누수된 FD 가 정확히 그 두 번째 조건을 막는다. 완전한 답을 만들어 놓고 턴이 멈춘다.🔴 2.65.1 — 죽은 핫스페어가 이후 모든 턴을 세운다
returncode는 장부일 뿐이다. 거둬지기 전까지 None 이라 죽은 프로세스가 영원히 "건강한 스페어" 로 읽히고, 턴은 죽은 파이프에 프롬프트를 건넨다.kill(pid, 0)으로 커널에 직접 묻는다.🟠 2.65.0 — 노트를 지워도 색인 행이 남는다
부팅 전방 스캔으로는 못 잡는다 — 존재하는 파일을 훑는 루프는 없는 파일을 방문하지 않아서 쌓이기만 한다. Geny 프로드 볼트 하나가 색인의 36% 가 고아였다.
🟡 2.64.8 —
DocGuide(path=)이쪽만 통째 복사가 맞지 않았다 (XGEN 은 edit2docs 패키지명과 토픽 목록이 갈라져 있다). 손으로 적용했고,
fmt=를 모르는 구버전 엔진에서는 조용히 예전 동작으로 돌아간다.검증
pytest4747 passed, 15 skippedtest_cli_leaked_stdout.py이식 — 프로드 실패 형태를 정확히 재현한다(완전한 답, rc=0, FD 를 쥔 자식 하나). 이식 전 리비전에서 4건 중 3건이 실패하는 것을 확인했다ruff check+ruff format --check클린🤖 Generated with Claude Code