Skip to content

test(orchestrator): stop service.test.ts from depending on real OS pids (hard-coded fake pids collide with live processes) #762

Description

@hojinzs

배경

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. 영향도: (로컬 에이전트 파이프라인 전면 차단).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions