ES /docs

GraphicsMagickManager::execute | error: Command failed: gm convert -verbose -debug All -log "%t [NaN

Fix Plan: GraphicsMagickManager::execute stderr 캡처 및 로그 포맷 오염 제거

Changes#

cupixworks: applications/agents/packages/cupix-tesla-thumbnail-agent/src/process/graphics-magick.process.ts#

  • What: child_process.execSync(command, { stdio: 'ignore' }){ stdio: ['ignore', 'ignore', 'pipe'], maxBuffer: 64 * 1024 * 1024 } 로 변경하고, 내부 try/catch 로 execError.stderr 의 tail(8KB) 을 잘라 원본 에러 메시지에 병합한 enriched Error 를 throw. 바깥 catch 는 기존과 동일한 로그 출력 유지. floorplan-agent 의 TSLA-13179 패턴과 동일.
  • Why: 현재 stdio: 'ignore' 는 gm 의 stderr 를 폐기하여, 실패 시 Node 가 만든 상투적 Command failed: ... 문자열만 남고 실제 gm 실패 사유(예: 지원 불가 PNG 청크, dimension 초과 등)를 진단할 수 없다. pipe 시 실패한 자식의 stderr 가 error.stderr 에 담긴다. tail-only 는 대용량 verbose 출력의 로그 폭발을 방지.
  • Lines: 75-92 근방

cupixworks: applications/agents/packages/cupix-tesla-floorplan-agent/src/process/graphics-magick.process.ts (SKIP)#

  • Status: 이미 develop 에 반영됨 (TSLA-13179, fb1ea71d2 — "capture gm convert stderr tail on failure"). RCA 는 master 기준으로 이 파일을 지목했지만 develop 에는 stderr tail capture 가 이미 존재. thumbnail-agent 의 신규 변경은 이 develop 패턴에 그대로 정렬.

cupixworks: applications/agents/packages/cupix-tesla-thumbnail-agent/src/manager/graphics-magick.manager.ts#

  • What: logger.error('GraphicsMagickManager::execute | error:', error)logger.error('GraphicsMagickManager::execute | error: %s', error instanceof Error ? error.stack ?? error.message : String(error)) 로 변경. 동일 파일 내 terminate 의 로그도 같은 패턴으로 수정.
  • Why: winston 의 splat formatter 가 첫 인자 문자열을 format string 으로 해석하여 두 번째 인자(error) 의 error.message 내부 %d 를 소비, NaN 으로 치환한다 (Datadog 로그의 [NaN] 정체). 명시적 %s 지정자와 미리 문자열화한 stack/message 를 넘기면 안전하다. sibling 파일 app.ts:29,41 이 이미 이 패턴('... %s', error instanceof Error ? error.message : ...) 을 사용 중이라 컨벤션 일치.
  • Lines: 41, 61

cupixworks: applications/agents/packages/cupix-tesla-floorplan-agent/src/manager/graphics-magick.manager.ts#

  • What: thumbnail-agent manager 와 동일한 로그 포맷 수정 (line 41 execute catch, line 61 terminate catch).
  • Why: 동일 패턴, 동일 오염 위험.
  • Lines: 41, 61

Acceptance Criteria#

  • grep -rn "stdio: 'ignore'" applications/agents/packages/cupix-tesla-thumbnail-agent applications/agents/packages/cupix-tesla-floorplan-agent 결과가 0건.
  • grep -rn "logger.error('GraphicsMagickManager" applications/agents/packages/cupix-tesla-thumbnail-agent applications/agents/packages/cupix-tesla-floorplan-agent 결과가 splat 대신 %s 지정자를 사용.
  • 두 process 파일 catch 블록이 error.stderr 존재 시 이를 로그에 포함.
  • pnpm exec eslint 가 변경된 4개 파일에 대해 경고/에러 없이 통과.
  • pnpm typecheck (또는 tsc --noEmit) 가 두 패키지에서 통과.

Tests#

  • 기존 테스트: 두 패키지 모두 unit test 부재 (memory/services/cupixworks-any-floorplan-agent.md 확인). @agents/base 및 인접 spec 파일에 회귀 영향 없음.
  • 신규 테스트: 추가하지 않음. 변경은 로깅/stdio 옵션 조정으로, 기능적 계약 미변경.