ES /docs

download floorplan image failed

Summary: download floorplan image failed (재발 방지 · safeFileName)

결과#

RCA "장기 개선 (재발 방지)" 축을 반영해 @agents/utilsCPUtils.safeFileName 공통 sanitize 유틸을 신설하고 refinement/preprocessor 두 hotspot 에 적용, downloadImage catch 는 원본 Error 를 logger 에 직접 전달하도록 정리했다. Blind validator 는 첫 시도에 APPROVED, vitest 및 두 hotspot 패키지 build 모두 통과.

Pull Requests#

Repo PR Branch
cupixworks PR 88937 feature/TSLA-13633

변경 내용#

  • applications/agents/packages/utils/src/cputils.ts: CPUtils.safeFileName(input) 신설 — path.basename 으로 경로 성분 제거, 슬래시/역슬래시/제어문자/공백을 _ 로 치환, leading dot 무력화, 64자 상한. undefined/'''' 반환.
  • applications/agents/packages/utils/src/cputils.spec.ts: safeFileName 회귀 스펙 (정상 확장자, slash/backslash, 공백/제어문자, undefined/'', path traversal, leading dots, 길이 상한) 추가.
  • applications/agents/packages/cupix-capture-refinement-agent/src/model/cpfloorplan.ts:
    • setDefaultLocalPaths: originalImageFileExtsafeFileName 통과 후 파일명 조립. 원본과 다르면 warn 로그. 정규화 결과가 '' 이면 확장자 없이 floorplan_{id} 사용.
    • downloadImage catch: JSON.stringify(error) 제거, error 를 splat 인자로 logger 에 직접 전달 (fix logger native Error handling). floorplan id / localImageFilePath 를 컨텍스트로 함께 로깅.
  • applications/agents/packages/cupix-capture-preprocessor-agent/src/model/cpfloorplan.ts: getBimFloorplanFilePath 에서 this._extensionsafeFileName 통과, 정규화 결과 '' 이면 확장자 없이 id 만 사용.

Scope Notes#

  • 범위 밖 (별도 트랙): RCA "즉시 조치" / "단기 개선" 섹션의 서버 데이터 정규화(tesla 쪽 floorplan file_extension / meta.name 스키마 검증) 는 이 PR 에서 다루지 않음. Server-side 조사 필요.
  • 감사 결과: refinement-agent 외 preprocessor-agent 에도 동일 hotspot 확인해 함께 반영. 다른 agent 패키지(cpbim.ts, cpcluster.ts 등) 에서는 외부 값을 파일 경로로 concat 하는 지점을 grep 으로 확인했으나 이번 fingerprint 와 동일한 위험 지점은 두 곳뿐.

Cleanup#

bash
cd $REPOS_DIR/cupixworks
git worktree remove /home/ec2-user/error-sweeper/.worktrees/0ccbf0f7-6dcc-4b2a-869f-00a871bd78c7/cupixworks