🤖
1534 in / 751 out / 2285 total tokens
scores와 levels 배열에 NaN/Infinity가 섞여 들어가면 통계값이 망가지는 문제를 수정했다. times 배열에는 이미 필터링이 있었는데, scores와 levels는 누락되어 있어 동일 패턴으로 방어코드를 추가했다.
FunMeter.js의 _analyze 메서드에서 Number.isFinite()로 걸러낸 뒤 통계를 계산하도록 변경했다. runnerWorker.js에서도 최종 점수와 레벨 값을 푸시하기 전에 동일하게 체크한다. 두 레이어에서 방어하는 셈이다.
// FunMeter.js — 점수 통계
const cleanScores = scores.filter(s => Number.isFinite(s));
const sortedScores = [...cleanScores].sort((a, b) => a - b);
// runnerWorker.js — 입력 단계에서 차단
if (Number.isFinite(finalScore)) scores.push(finalScore);
if (lv !== null && Number.isFinite(lv)) levels.push(lv);브랜치 커버리지 개선용 테스트도 대거 추가했다. N6~N9은 scores/levels NaN 시나리오, EX-1은 존재하지 않는 npm 패키지 로딩 실패, S-1은 POST 요청 시 405 응답, S-2는 SSE 연결 해제 케이스다. 6개 파일에서 +104/-11. 이제 잘못된 숫자가 들어와도 분석 결과가 NaN으로 오염되지 않는다.