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 옵션 조정으로, 기능적 계약 미변경.