#bugfix
61개의 게시물
AdSense 빈 광고 슬롯 숨기기 — unfilled 속성만 믿었다가 망한 이야기
🤖 1486 in / 1658 out / 3144 total tokens AdSense 광고 슬롯이 빈 박스로 렌더링되는 버그를 고쳤다. 로컬 개발 환경이나 미승인 도메인에서는 AdSense가 data-ad-status="unfilled" 속성을 아예 안 붙이는 경우가 있다. 기존 코드는 이 속성값만 검사하고 있어서, 빈 90px 박스가 고스란히 노출
빈 광고 슬롯 hide 조건 robust화 — status + offsetHeight 검사
🤖 1486 in / 1346 out / 2832 total tokens AdSense 빈 슬롯이 로컬 개발환경이랑 미승인 도메인에서 계속 떡하니 노출되는 이슈를 잡았다. 기존엔 data-ad-status==="unfilled"만 체크해서 hide했는데, AdSense가 이 속성을 아예 안 붙이는 케이스가 꽤 있다. localhost, 승인 안 된 도
AdSense 빈 광고 슬롯이 남기는 90px 빈 박스 자동 숨김 처리
🤖 1486 in / 1457 out / 2943 total tokens AdSense가 광고를 내주지 않으면 ins 요소에 data-ad-status="unfilled"를 세팅하는데, 문제는 .ad-container에 잡아둔 min-height: 90px가 그대로 남아서 유저한테 하얀 빈 박스가 보인다는 거다. CLS(Cumulative Layout
AdSense 빈 광고 슬롯 unfilled 상태 자동 감지해서 숨기기
🤖 1486 in / 1782 out / 3268 total tokens AdSense가 광고를 내주지 않으면 ins에 data-ad-status="unfilled"를 세팅하는데, CLS 방지용으로 잡아둔 min-height: 90px 때문에 빈 박스가 고스란히 노출된다. horse-race 페이지에서 접속자/준비 사이 ad-lobby 슬롯이 광고 미
자유 모드 방 만들기 버튼이 방 생기면 사라지던 회귀 수정
🤖 1555 in / 1444 out / 2999 total tokens 자유 모드에서 방이 하나라도 존재하면 방 만들기 버튼이 화면에서 완전히 증발하던 버그를 수정했다. 원인은 단 3줄이었다. 회귀 경로가 재밌다. 커밋 171465b에서 freeCreateRoomBox 내부 버튼과 헤더 버튼이 중복이라 판단해 헤더 쪽을 숨겼다. 그 뒤 커밋 d1f
z-index 80인 오버레이에 버튼이 묻혀서 클릭 안 되던 버그 수정
🤖 1391 in / 1414 out / 2805 total tokens 대시보드 오버레이(z-index: 80)가 열리면 탑바의 Bell, ThemeSwitcher 버튼이 가려져 클릭이 안 되는 버그를 잡았다. 오버레이가 전체 화면을 덮는 구조인데, 탑바 액션 버튼 컨테이너에 z-index 값을 아예 지정하지 않아서 발생한 문제다. 원인 파악은 빨
새소식 버튼을 토글로 고침 — state setter 함수 패턴
🤖 1294 in / 1091 out / 2385 total tokens 새소식(Bell) 버튼을 누를 때마다 열기/닫기가 토글되도록 고쳤다. 기존엔 setUpdatesOpen(true)만 호출해서 한 번 열면 다시 닫을 수 없었다. 변경은 단 한 글자 수준이다. setUpdatesOpen(true)를 setUpdatesOpen(o = !o)로 바꿨
AdSense 광고 46개 슬롯이 전혀 노출되지 않았던 진짜 이유 — push() 누락
🤖 5487 in / 1662 out / 7149 total tokens 광고가 한 개도 안 나오더라. 페이지 소스엔 <ins class="adsbygoogle" 태그가 분명히 있는데, 브라우저 개발자 도구를 열어보면 전부 data-ad-status="none" 상태. AdSense 계정은 정상이고, 슬롯 ID도 맞고, 스크립트 로드도 되는데 왜 광고
free.html 도메인 오타 수정 — lamdice.kr → lamdice.com
🤖 1430 in / 1386 out / 2816 total tokens 존재하지도 않는 도메인을 SEO 메타 태그에 박아넣고 한동안 방치해뒀다. free.html의 og:url, canonical, JSON-LD url이 전부 lamdice.kr을 가리키고 있었다. 실제 운영 도메인은 lamdice.com인데 말이다. 변경 자체는 단순 문자열 치환
자유서버 다이스 자동 진입 시 sessionStorage 누락으로 모달 뜨던 P0 버그 수정
🤖 1738 in / 1579 out / 3317 total tokens dice 자유서버 진입 시 서버 선택 모달이 매번 뜨던 P0 버그를 잡았다. 원인은 단순했다. dice-game-multiplayer.html의 IIFE가 sessionStorage.diceSession를 확인해서 자유서버 로비로 자동 진입하는 구조인데, 진입 로직에서 diceA
자유서버 dice 진입 시 세션 누락으로 모달 뜨던 P0 수정 + 멀티탭 자동검증 추가
🤖 1738 in / 1690 out / 3428 total tokens 자유서버에서 /free/dice → /game 경로로 진입할 때, 주사위 게임 페이지가 diceActiveRoom만 보고 서버 선택 모달을 띄우던 버그를 고쳤다. 원인은 단순했다. dice-game-multiplayer.html의 IIFE가 판별 기준을 sessionStorage
목업 정합성 깨진 거 다 고치고 previewRoute 응답 파싱 버그 잡았다
🤖 2023 in / 1846 out / 3869 total tokens v2 페이지에서 경로 요약 카드가 통째로 안 보이던 문제를 고쳤다. 원인은 단순했다. /api/directions 응답을 data.route로 읽고 있었는데, 실제 응답 구조는 res.success && res.data였다. 목업 데이터 만들 때는 잘 보였는데 진짜 API 붙이니
SearchOverlay에 SavedRoute 타입 임포트 누락 수정
🤖 1270 in / 881 out / 2151 total tokens 모바일 검색 오버레이 컴포넌트에서 SavedRoute 타입을 임포트하지 않아 발생하던 타입 에러를 고쳤다. SearchOverlayProps 인터페이스에 SavedRoute 관련 prop이 추가됐는데, 정작 타입 정의를 임포트하는 걸 깜빡했다. TypeScript는 당연히 이걸
모바일 경로 편집기가 주소 있는데도 닫혀 있던 버그 수정
🤖 1639 in / 1135 out / 2774 total tokens 모바일에서 출발지/도착지가 이미 설정된 상태로 검색 오버레이를 열면, 경로 편집 에디터가 접혀 있어서 사용자가 한 번 더 탭해야 하는 문제가 있었다. 초기 상태만 놓고 보면 사소해 보이지만, 매번 열어야 하는 UX는 반복 사용 시 체감 꽤 거슬린다. SearchOverlay 컴
모바일 키보드 검색 버튼이 아무 동작도 안 하던 버그 수정
🤖 1953 in / 1859 out / 3812 total tokens 모바일에서 주소 입력 후 키보드의 '검색' 키를 눌러도 아무 일이 안 일어났다. 하단 '경유지 찾기' 버튼을 직접 터치해야만 검색이 실행됐다. 네이버맵이나 카카오맵 쓰던 사용자 입장에선 자연스럽게 키보드 검색 키를 누르고, 아무 반응 없으면 '버그인가?' 싶은 체감이 된다. 원
모바일 검색 오버레이 footer가 화면 전체를 먹어버리던 버그 수정
🤖 1727 in / 1618 out / 3345 total tokens 모바일 검색 오버레이에서 하단 검색 CTA 버튼이 의도보다 훨씬 큰 히트박스를 갖고 있었다. 화면 상단의 뒤로가기, 테마 토글 버튼이 터치되지 않아 원인을 추적했다. 범인은 animate-slide-up와 gpu-accelerate 클래스 조합이었다. Intercom의 keyb
모바일 검색 오버레이가 반투명이어서 지도가 비치던 버그 수정
🤖 1734 in / 1746 out / 3480 total tokens iPhone Safari에서 검색 오버레이를 열면 뒤에 지도, 홈 shell, 카테고리 버튼, 하단 prompt가 다 비친다. 오버레이가 반투명 창문이 돼버린 셈이다. 원인은 두 가지였다. 첫째, --bg-primary CSS 변수가 현재 테마에 더 이상 존재하지 않는 lega
검색 로딩 데드락 원인 찾아서 수정함
🤖 1858 in / 1943 out / 3801 total tokens 검색 버튼 누르고 아무 응답 없으면 로딩 스피너가 영원히 도는 버그를 잡았다. 원인은 두 가지였다. response.() 파싱에서 멈추는 경우가 있었고, 사용자가 취소해도 타이머가 남아서 상태 복구가 안 됐다. search-store.ts에서 runSearch() 호출부를 a
BRIDGE_COLUMNS undefined로 캐릭터가 증발한 버그 고침 + 다리 복원 이펙트 추가
🤖 1975 in / 1734 out / 3709 total tokens beginPlayer에서 return 처리할 때 BRIDGE_COLUMNS라는 서버 전용 상수를 클라이언트 IIFE 내부에서 그대로 참조하고 있었다. 당연히 undefined고, layout.tileCenter(undefined - 1, 'top')은 NaN을 뱉는다. moveA
채팅 입력 중 스페이스가 게임을 시작해버리는 버그 수정
🤖 8669 in / 1262 out / 9931 total tokens 캔버스 keydown 핸들러가 채팅 input 포커스 상태까지 무분별하게 반응하던 문제를 고쳤다. 호스트가 채팅창에 "안녕하세요" 라고 치려다 스페이스 한 번 눌렀는데 event.preventDefault() 가 먼저 실행돼 띄어쓰기가 안 되고, 심지어 bridge-cross:
채팅 입력 중 스페이스바 먹통 문제 수정
🤖 1475 in / 1196 out / 2671 total tokens 채팅창에 글을 쓰는데 스페이스가 안 눌린다. 알고 보니 전역 keydown 핸들러가 채팅 input까지 가로채서 발생한 문제다. 호스트가 채팅 중 스페이스를 누르면 게임이 시작되는 대참사도 같이 발견했다. 원인은 단순하다. IIFE 안에서 window.addEventListen
HTML onclick에서 호출하던 전역 함수가 없어서 준비 버튼이 묵음이었던 버그 수정
🤖 1464 in / 1247 out / 2711 total tokens 준비 버튼을 클릭해도 아무 반응이 없었다. 콘솔을 열어보니 ReferenceError: toggleReady is not defined. HTML의 onclick="toggleReady()"가 가리키는 전역 함수가 js 파일에 정의돼 있지 않았다. 모듈화 구조에서는 DOM 이벤
모바일 맵 컨트롤 토큰 스타일이 안 보이던 버그 수정
🤖 1670 in / 1444 out / 3114 total tokens 모바일에서 맵 위에 떠 있는 설정 버튼이 배경이랑 싹 섞여서 안 보였다. 흰색 배경(bg-white)을 backdrop-blur 기반 반투명 스타일로 교체해서 맵 위에서도 시인성 확보. 문제 원인은 단순했다. 맵 타일 위에 버튼을 올렸는데, 배경이 하얀색이라 밝은 타일 위에서는
memradar 3.4.1 패치 릴리즈 — 토큰 툴팁 위치 수정
🤖 1398 in / 1394 out / 2792 total tokens 세션 헤더에 표시되는 토큰 사용량 툴팁이 이상한 곳에 렌더링되던 버그를 잡았다. 3.4.0에서 추가한 기능이었는데, 위치 계산 로직에 오프셋이 빠져 있어서 화면 밖으로 튀어나가는 현상이 있었다. 변경 자체는 단순한데, 이번 커밋은 패치 버전업만 포함하고 있다. 실제 UI 수정은
claude --resume 플래그 하이픈 하나 빠진 거 고침
🤖 1285 in / 1336 out / 2621 total tokens 하이픈 하나 때문에 복구 커맨드가 안 돌아갈 뻔한 이슈를 잡았다. claude -resume을 claude --resume으로 수정한 건데, 단일 하이픈 -resume은 CLI에서 r, e, s, u, m, e 각각을 개별 플래그로 파싱하려 든다. 즉 -r -e -s -u -m
경마 다시보기가 실제 결과와 달랐던 이유 — speedSeeds 동기화 누락
🤖 2447 in / 1570 out / 4017 total tokens 경마 다시보기를 틀면 실제 경주 결과랑 완전히 다른 순위가 나오는 버그가 있었다. 원인은 단순했다. calculateHorseRaceResult에서 생성한 speedSeeds를 다시보기 record에 안 넘겨주고 있었다. 재생할 때 새 시드로 시뮬레이션을 돌려버리니 당연히 결과가
경마 시드 편향 수정 — 특정 레인이 자꾸 이기던 문제 고쳤다
🤖 2508 in / 2000 out / 4508 total tokens 경마에서 특정 레인이 유독 자주 1등 하더라. 원인을 파고들어보니 speedChangeSeed랑 initialSpeedFactor를 계산할 때 레인 인덱스 기반 의사난수 공식이 있었는데, 이게 편향을 만들고 있었다. Math.random() 기반으로 바꿔서 레인 간 격차를 없앴다
경마 거리 인디케이터가 화면 밖에서 렌더링되던 버그 수정
🤖 1438 in / 1737 out / 3175 total tokens 트랙 너비가 7350px인 경마 게임에서 우측 거리 인디케이터가 right: 2px로 배치돼 있었다. 트랙 컨테이너 자체가 7350px짜리 너비를 가지니까 right: 2px는 트랙의 오른쪽 끝에서 2px 떨어진 지점, 즉 화면 밖 7000px 넘게 떨어진 곳에 요소가 붙어 있던
마지막 슬라이드 대시보드 프롬프트 실수 터치 방지 위해 2.5초 딜레이 추가
🤖 1453 in / 1422 out / 2875 total tokens 마지막 슬라이드에서 대시보드 열겠냐는 프롬프트가 너무 빨리 떠서, 사용자가 무의식적으로 클릭해버리는 문제가 있었다. 슬라이드 넘기는 화살표 클릭하려다 프롬프트 버튼을 눌러버리는 케이스. UX에서 말하는 accidental trigger 문제다. 해결책은 단순하다. 마지막 슬라이
경마 미니맵 때문에 레이스 트랙이 화면 밖으로 튀어나가던 버그 고침
🤖 1613 in / 1284 out / 2897 total tokens 경주 트랙 컨테이너에 overflow: visible을 줬더니 모바일에서 트랙이 무한히 늘어나는 버그가 발생했다. 원인은 간단하다. 미니맵을 position: absolute로 띄워놓고 트랙 컨테이너 안에 넣어두니, 미니맵이 컨테이너 밖으로 빠져나가면서 overflow: visi
경마 레이스 트랙이 모바일에서 삐져나가던 버그 고침
🤖 1613 in / 1564 out / 3177 total tokens 모바일에서 경마 레이스 트랙이 컨테이너 영역을 뚫고 늘어나던 버그를 잡았다. 원인은 미니맵 배치 때문에 overflow: visible로 풀어놓았던 게 화근이었다. 변경 내용은 단순하다. race-track-container의 overflow를 다시 hidden으로 되돌리고,
ranking-shared.js 경마 탈것 이름 매핑 누락 4종 추가
🤖 1421 in / 1221 out / 2642 total tokens 경마 미니게임에서 knight, dinosaur, ninja, crab 네 가지 탈것이 영어명 그대로 노출되고 있었다. VN 객체에 매핑이 빠져 있어서 발생한 문제다. 기존에는 car, rocket, bird, horse 같은 기본 탈것들만 한글 매핑이 되어 있었는데, 이후 업
tutorial-shared.js 경로 깨진 거 고치고 죽은 md 참조 지움
🤖 1727 in / 1053 out / 2780 total tokens 정적 에셋 경로가 깨져서 튜토리얼 스크립트가 404 떨어지던 걸 잡았다. 말 경주, 주사위 멀티플레이어 HTML에서 /tutorial-shared.js를 /js/shared/tutorial-shared.js로 수정했다. 언젠가 디렉토리 구조 정리하면서 파일 옮겨놓고 호출 쪽을 안
SHARED-MODULES.md 파일의 script src 경로를 실제 디렉토리 구조에 맞게 수정
🤖 1307 in / 1217 out / 2524 total tokens 문서에 적힌 script 태그 경로가 실제 파일 위치랑 달라서 수정했다. 공유 모듈 파일들을 /js/shared/ 하위로 이동한 적이 있는데, 문서 업데이트를 깜빡했던 것. 변경 자체는 단순하다. 기존에 /chat-shared.js, /ready-shared.js, /order
영어 버전 Hashnode/DEV.to 발행 막아둔 거 풀었다
🤖 991 in / 1095 out / 2086 total tokens 영어 버전을 Radar Blog에서만 발행한다고 가정하고 Hashnode랑 DEV.to는 무조건 스킵하게 해뒀는데, 이게 아니었다. 플랫폼별로 영어 버전 발행 여부를 따로 설정할 수 있어야 하는데 하드코딩으로 막아버린 셈이다. version.language === "en" &&
DEV.to 태그에서 하이픈 제거 — 영숫자만 남기기
🤖 686 in / 770 out / 1456 total tokens DEV.to API가 태그에서 특수문자를 받아주지 않는다. 하이픈이 포함된 태그를 넘기면 422 에러. 그래서 태그 정규화 함수를 추가했다. sanitizeTag 함수를 만들어 태그를 소문자로 변환하고, 하이픈은 제거, 나머지 특수문자도 싹 걷어냈다. 결과적으로 영숫자만 남도록 처
SSR 환경에서 window 참조 오류 수정
🤖 330 in / 771 out / 1101 total tokens Tutorial 컴포넌트의 onDestroy 훅에서 발생하던 SSR 오류를 수정했다. SvelteKit은 서버 사이드 렌더링 시 window 객체가 존재하지 않는다. onDestroy 내부에서 조건 없이 window의 이벤트 리스너를 제거하려다 보니 서버 환경에서 참조 오류가 발생
db init() ALTER TABLE 쿼리 분리
🤖 392 in / 625 out / 1017 total tokens 데이터베이스 초기화 함수에서 ALTER TABLE 문을 별도 쿼리로 분리했다. 기존에는 CREATE TABLE 여러 개와 ALTER TABLE이 하나의 큰 템플릿 리터럴에 묶여 있었다. 이걸 한 번에 실행하는 방식이었는데, 일부 DB 드라이버나 설정에서 multi-statement
캘린더 요일 순서 수정
🤖 470 in / 530 out / 1000 total tokens 캘린더의 요일 표시 순서를 월요일 시작에서 일요일 시작으로 변경했다. 기존에는 getDay()로 구한 일요일(0)을 보정해 6으로 치환했는데, 이 로직을 제거했다. 요일 헤더 배열도 '월','화','수','목','금','토','일'에서 '일','월','화','수','목','금','
Svelte 반응형 블록이 입력값을 계속 초기화하던 문제 해결
🤖 488 in / 615 out / 1103 total tokens RecordModal에서 시간 입력값이 수정되지 않던 버그를 고쳤다. 원인은 reactive 블록의 과도한 반응이었다. $records가 변경될 때마다 입력 필드들이 초기화되어, 사용자가 타이핑하는 값을 덮어써버렸다. Svelte의 $: 반응문은 의존하는 모든 값이 바뀔 때 실행되
v0.27.2: AddressInput & MultiStopSelector 버그 수정
🤖 1056 in / 729 out / 1785 total tokens AddressInput 컴포넌트에서 hintId가 정의되지 않아 발생하던 ReferenceError를 해결했다. 스크린 리더용 힌트 ID를 동적으로 생성하도록 수정했고, 이제 testId가 있을 때만 hintId를 생성한다. MultiStopSelector에서는 문법 에러와 누락
BottomQuickBar 렌더링 조건 완화로 검색창 항상 표시
🤖 413 in / 643 out / 1056 total tokens 모바일 환경에서 BottomQuickBar가 너무 제한적으로 노출되던 문제를 수정했다. 기존엔 즐겨찾기와 최근 검색이 모두 비어있을 때만 검색창이 표시됐다. 사용자가 즐겨찾기를 등록하거나 최근 검색이 쌓이면 검색창이 사라지는 UX상 좋지 않은 동작이었다. 관련 조건을 제거해 검색
캐시 키 버그 수정과 검증 강화
🤖 1694 in / 858 out / 2552 total tokens 버그 하나가 캐시를 오염시키고 있었다. 반경 2km로 재검색했는데 1km 결과가 튀어나오는 현상. 원인은 bufferDistance가 캐시 키에 포함되지 않아서였다. SearchCacheKey 인터페이스에 bufferDistance?를 추가하고 generateCacheKey 함수에
v5.16.0 — 통계 정확성 버그 4건 + API 방어 코드 3건 수정
🤖 2083 in / 677 out / 2760 total tokens v5.16.0은 통계 계산 정확성을 크게 개선했다. 474개 테스트 통과. _sampleAdequacy()가 전체 runs 대신 실제 유효 샘플(cleanTimes.length) 기준으로 계산하도록 수정했다. NaN이 섞인 데이터에서 샘플 충분성 판단이 잘못되던 문제를 해결했다.
v5.15.0 — API 안정성 버그 3건 수정
🤖 1405 in / 936 out / 2341 total tokens API 안정성 버그 3건을 수정하고 버전을 5.15.0으로 올렸다. onProgress 콜백에서 NaN/Infinity score가 그대로 전달되던 문제를 Number.isFinite 체크로 null 반환하도록 수정했다. runParallel()에 runs나 parallel이 1
v5.13.0 — Infinity 버그 수정과 changelog 대규모 보충
🤖 693 in / 669 out / 1362 total tokens v5.13.0 릴리스 준비를 마쳤다. package.json 버전을 5.12.0에서 5.13.0으로 올렸고, 누락돼 있던 changelog 9개 버전(v5.5.0~v5.13.0)을 한 번에 추가했다. 147줄이 추가된 changelog 중 핵심은 SmartBot의 Infinity
SmartBot Infinity 버그 수정과 453개 테스트 통과
🤖 1338 in / 1055 out / 2393 total tokens SmartBot이 Infinity 난이도를 만나면 영구 정지하거나 확률이 음수가 되는 버그를 잡았다. 원인은 Number.isNaN()이 Infinity를 걸러내지 못한 것. Number.isFinite()로 교체하니 깔끔히 해결됐다. 4개 메서드에 동일 패턴 적용. 브랜치 커
v5.12.0 — NaN/Infinity 방어 7건, 테스트 9건 추가
🤖 2937 in / 692 out / 3629 total tokens 수치 계산 중 발생하던 NaN/Infinity 누출 문제를 7곳에서 수정했다. 439개 테스트 전부 통과. FunMeter는 이제 result.levels에 cleanLevels를 반환한다. 기존엔 times, scores만 정제했는데 levels도 누출되고 있었다. SmartB
NaN/Infinity 방어 로직 확장 및 안정성 강화
🤖 2937 in / 1587 out / 4524 total tokens FunMeter의 결과 객체에 cleanLevels을 반환하여 데이터 누수를 방지. MLBot의 버킷 수가 0 이하일 때 즉시 에러를 발생시키고, SmartBot의 난이도 계산 시 NaN 체크를 추가했다. FlappyBird와 RhythmTap 어댑터는 파이프 간격과 봇 정확도를
v5.11.0 — 버그 4종 소탕 + 타입 정리
🤖 1931 in / 822 out / 2753 total tokens 이번 버전은 꼼꼼한 디버깅 세션이었다. 총 4개의 버그를 잡았고, TypeScript 타입 정리까지 마무리했다. 테스트 6개 추가로 총 430개 전부 통과. SmartBot에서 getScore()가 NaN이나 Infinity를 뱉을 때 _scoreHistory에 그대로 들어가던
v5.10.0 — 크리티컬 버그 5종 + 측정 정확도 3종 수정
🤖 3211 in / 1154 out / 4365 total tokens 이번 릴리스는 안정성에 집중했다. 424개 테스트 전부 통과하며, SmartBot의 NaN 방어, MLBot 생존 보상 정책, CLI 파서 boolean 처리 등 핵심 이슈를 해결했다. SmartBot에서 난이도 계산 시 NaN이 들어오면 _actionCooldown이 NaN이
radar_fun_meter v5.9.0 — Critical 버그 5건 긴급 수정
🤖 1550 in / 822 out / 2372 total tokens v5.9.0에서 치명적인 버그 5건을 수정하고 TypeScript 타입 정의 4건을 동기화했다. BrowserGameAdapter의 dynamic import를 require로 교체했다. --url 모드에서 ESM/CJS 호환성 문제가 있었는데, 동적 로딩 방식을 통일하니 깔끔히
v5.6.0 — NaN/Infinity 방어로 분석 로직 강화
🤖 1534 in / 751 out / 2285 total tokens scores와 levels 배열에 NaN/Infinity가 섞여 들어가면 통계값이 망가지는 문제를 수정했다. times 배열에는 이미 필터링이 있었는데, scores와 levels는 누락되어 있어 동일 패턴으로 방어코드를 추가했다. FunMeter.js의 _analyze 메서드에
v5.4.0 — maxSeconds 버그 수정과 타입 정리
🤖 1592 in / 595 out / 2187 total tokens CLI runner에서 --maxSeconds 옵션이 무시되던 버그를 잡았다. ML/serve/일반 모드 세 곳 모두 하드코딩된 60이 변수를 참조하도록 수정했다. 이제 사용자가 지정한 시간 제한이 실제로 FunMeter에 전달된다. HumanLikeBot에서도 커스텀 게임 사용
v5.3.0 — 버그 5건 수정 + 코드 품질 개선
🤖 1518 in / 766 out / 2284 total tokens 이번 버전은 찌꺼기 버그들을 쓸어담은 정기 청소 릴리즈다. off-by-one, 인자 순서, 중복 정리, 입력 검증까지 놓치던 것들을 꼼꼼히 채웠다. RhythmTapAdapter에서 frameCount = 6060을 로 수정했다. 3600프레임째에 게임이 종료되어야 하는데, =
v5.2.0 — 핵심 버그 5건 수정 + 패키지 설정 개선
🤖 2464 in / 1200 out / 3664 total tokens v5.2.0 릴리즈. 핵심 버그 5건을 수정하고 패키지 설정을 개선했다. RhythmTapAdapter에서 input==='action'일 때 외부 봇 탭이 정상 반영되도록 했다. StackTowerAdapter는 _drop()의 minBlockWidth 체크를 push 전으로
v5.1.0: StackTower 이중 드롭·FunMeter Division by Zero 수정
🤖 1567 in / 768 out / 2335 total tokens 집중적으로 버그를 잡은 업데이트다. 총 6개 버그를 수정했고 테스트 7개를 추가해 전체 362개 테스트가 통과한다. StackTowerAdapter는 _dropped 플래그 초기화가 reset에서 빠져 있어 연속 게임 시 이전 상태가 남았다. 수동 drop 후 auto-drop이
v5.1.0 출시: 주요 모듈 버그 수정 및 테스트 커버리스 강화
🤖 1567 in / 1820 out / 3387 total tokens StackTowerAdapter의 드롭 로직 누락과 레벨 과다 카운팅 현상을 수정한다. FunMeter는 데이터가 하나일 때 발생하는 0으로 나누기 오류와 결과 필드 누락을 방지한다. 또한 Optimizer의 예외 처리 로직을 개선하여 flowOptions가 올바르게 복원되도록
v4.9.1 — 통계 보정과 물리 공식, 그리고 타입 정의
🤖 1582 in / 703 out / 2285 total tokens FunMeter의 표준편차 계산이 드디어 제대로 됐다. N 대신 N-1로 나누는 Bessel 보정을 적용했다. 표본으로 모집단을 추정할 때 필수적인 수정이다. 이제 통계적 신뢰도가 올라갔다. FlappyBirdBot의 futureY 예측도 정확해졌다. 기존엔 속도만 곱했는데, 등
모바일 확대 방지 처리
🤖 711 in / 566 out / 1277 total tokens 테트리스 게임을 모바일에서 플레이할 때 화면이 확대되는 문제를 해결했다. 실수로 핀치 줌이나 더블탭을 하면 게임 몰입도가 깨지는데, 이걸 막아달라는 피드백이 있었다. 세 가지 레이어로 방어했다. 먼저 viewport 메타태그에서 확대 자체를 차단하고, CSS에서는 touch-act
GitHub Gist로 결과 공유 기능 추가하고 TTY 버그도 잡았다
🤖 747 in / 508 out / 1255 total tokens radar_fun_meter v2.3.1에서 Gist 공유 기능을 추가했다. 이제 --share 플래그로 분석 결과를 GitHub Gist에 업로드할 수 있고, --view=<id로 저장된 Gist를 터미널에서 바로 조회할 수 있다. Gist 관련 로직은 gistReporter.js