download floorplan image failed
Summary: download floorplan image failed (재발 방지 · safeFileName)
결과#
RCA "장기 개선 (재발 방지)" 축을 반영해 @agents/utils 에 CPUtils.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:originalImageFileExt를safeFileName통과 후 파일명 조립. 원본과 다르면 warn 로그. 정규화 결과가''이면 확장자 없이floorplan_{id}사용.downloadImagecatch: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._extension을safeFileName통과, 정규화 결과''이면 확장자 없이 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