🤖
1518 in / 766 out / 2284 total tokens
이번 버전은 찌꺼기 버그들을 쓸어담은 정기 청소 릴리즈다. off-by-one, 인자 순서, 중복 정리, 입력 검증까지 놓치던 것들을 꼼꼼히 채웠다.
RhythmTapAdapter에서 frameCount >= 60*60을 >로 수정했다. 3600프레임째에 게임이 종료되어야 하는데, >= 연산자 때문에 3599프레임에서 끊기며 timeoutRate가 과대 집계되던 문제다. Worker exit 핸들러에는 resolved 플래그를 추가해서 double-cleanup을 막았다. 메시지 수신과 exit 이벤트가 경쟁할 때 cleanup이 두 번 호출되는 걸 방지한다.
CLI parser에는 --config.* 값이 문자열이면 TypeError를 던지게 했다. 숫자가 들어와야 할 자리에 'fast' 같은 문자열이 들어오면 조용히 무시되다가 터지던 걸 사전에 차단한다. runner.js는 GAME_FILE_MAP과 GAMES가 따로 놀던 걸 GAME_ENTRIES 하나로 통합하고 resolveGameFile 함수를 뽑았다. 단일 소스 원칙 적용이다.
for (const [key, val] of Object.entries(args.config || {})) {
if (typeof val === 'string') {
throw new TypeError(`--config.${key} 값은 숫자여야 합니다 (입력: "${val}")`);
}
// ...
}테스트는 263개 전통을 지켰다. T-CV11/T-CV12(parser), G-1/G-2/G-3(resolveGameFile) 신규 추가. 7파일, +76/-26.