배경
packages/orchestrator/src/service.test.ts가 워커 프로세스를 하드코딩된 가짜 pid(4100, 4101, 4102, 4103, 4105, 4411 …)로 만들고, 서비스는 isRunProcessRunning → isProcessRunning(pid)로 실제 OS 프로세스 존재 여부를 확인합니다. 해당 pid를 가진 프로세스가 실행 중인 머신에서는 워커가 "살아 있음"으로 판정되어 다음 테스트가 환경 의존적으로 실패합니다:
service.test.ts:1894 — 완료된 워커의 레코드가 retry_queued여야 하는데 running으로 남음
service.test.ts:3667 — 위의 결과로 retry-scheduled verbose 로그 누락
2026-08-29 09:58Z 기준 이 머신에서 pid 4102가 살아 있는 node_repl 프로세스였고, 에이전트의 pnpm test 게이트가 #721/#732/#749 등 서로 무관한 이슈에서 반복 실패해 Backlog로 되돌아갔습니다(코드 리뷰 에이전트 4건도 동일 재현, main 기준). CI(GitHub 러너)는 pid 충돌이 없어 통과 — 로컬 전용 플레이크.
수정
- 테스트에서 실제 pid 대신
isProcessRunning/resolveProcessIdentity를 주입 가능하게(이미 vi.spyOn(service, "isRunProcessRunning") 패턴이 :517에 있음) 하거나, 가짜 pid를 확실히 존재하지 않는 값으로 생성(예: 자식 프로세스를 spawn 후 종료시켜 얻은 pid, 또는 process.pid와 무관한 2^22 이상의 범위는 macOS에서 무효이므로 사용 불가 — 주입 방식 권장).
- 동일 패턴을 쓰는 다른 테스트(
dispatch.test.ts, recovery 관련)도 점검.
- changeset 불필요(테스트만).
완료 기준
- 가짜 pid와 같은 번호의 프로세스가 살아 있어도(테스트에서
isProcessRunning을 true로 스텁해 재현) 해당 테스트들이 결정적으로 통과.
pnpm --filter @gh-symphony/orchestrator test 10회 연속 통과(이 머신).
관련: #721, #732, #749(에이전트 게이트 차단), #758(같은 부류의 테스트 결정성). Epic #651. 영향도: 상 (로컬 에이전트 파이프라인 전면 차단).
배경
packages/orchestrator/src/service.test.ts가 워커 프로세스를 하드코딩된 가짜 pid(4100, 4101, 4102, 4103, 4105, 4411 …)로 만들고, 서비스는isRunProcessRunning → isProcessRunning(pid)로 실제 OS 프로세스 존재 여부를 확인합니다. 해당 pid를 가진 프로세스가 실행 중인 머신에서는 워커가 "살아 있음"으로 판정되어 다음 테스트가 환경 의존적으로 실패합니다:service.test.ts:1894— 완료된 워커의 레코드가retry_queued여야 하는데running으로 남음service.test.ts:3667— 위의 결과로retry-scheduledverbose 로그 누락2026-08-29 09:58Z 기준 이 머신에서 pid 4102가 살아 있는
node_repl프로세스였고, 에이전트의pnpm test게이트가 #721/#732/#749 등 서로 무관한 이슈에서 반복 실패해 Backlog로 되돌아갔습니다(코드 리뷰 에이전트 4건도 동일 재현, main 기준). CI(GitHub 러너)는 pid 충돌이 없어 통과 — 로컬 전용 플레이크.수정
isProcessRunning/resolveProcessIdentity를 주입 가능하게(이미vi.spyOn(service, "isRunProcessRunning")패턴이 :517에 있음) 하거나, 가짜 pid를 확실히 존재하지 않는 값으로 생성(예: 자식 프로세스를 spawn 후 종료시켜 얻은 pid, 또는process.pid와 무관한 2^22 이상의 범위는 macOS에서 무효이므로 사용 불가 — 주입 방식 권장).dispatch.test.ts,recovery관련)도 점검.완료 기준
isProcessRunning을 true로 스텁해 재현) 해당 테스트들이 결정적으로 통과.pnpm --filter @gh-symphony/orchestrator test10회 연속 통과(이 머신).관련: #721, #732, #749(에이전트 게이트 차단), #758(같은 부류의 테스트 결정성). Epic #651. 영향도: 상 (로컬 에이전트 파이프라인 전면 차단).