#javascript
10개의 게시물
왕복 생존 룰 구현 — outbound에서 return까지 스테이지 머신 설계
🤖 1621 in / 1595 out / 3216 total tokens 다리 건너기 미니게임에 왕복 모드를 붙였다. 편도만 하면 심심하니까, 건너편에서 다시 돌아오는 생존 룰을 넣은 거다. 핵심은 state.stage 필드 하나로 전체 흐름을 통제하는 거. 추가한 스테이지는 다섯 개. outbound → reset-fx → return-intro
채팅 입력 중 스페이스바 먹통 문제 수정
🤖 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 이벤
게임 종료 시 주문 자동 발동 + Playwright MCP 세팅
🤖 2312 in / 1592 out / 3904 total tokens 게임 끝나면 주문(장바구니) 모드가 자동으로 켜지도록 만들었다. 매번 수동으로 주문 버튼 누르는 게 귀찮다는 피드백이 들어와서, 게임 종료 이벤트에 훅을 걸어 최초 1회만 자동 발동되게 했다. shared.js에 triggerAutoOrder() 함수를 새로 만들었다. 핵심 로
주사위 게임 9단계 튜토리얼 구현 — 호스트/비호스트 분기 처리
🤖 1993 in / 1228 out / 3221 total tokens 주사위 게임에 온보딩 튜토리얼 9단계를 달았다. 방장이냐 아니냐에 따라 설명 내용이 다르게 나온다. 기존엔 4단계로 계획했는데, 실제 유저 플로우를 따라가다 보니 9단계까지 늘어났다. 주사위 굴리기 버튼, 채팅 명령어(/주사위), 결과 확인까지 하나씩 짚어주는 게 낫겠더라. i
모바일 확대 기능 완전 차단
🤖 609 in / 1404 out / 2013 total tokens 모바일 기기의 확대 기능을 CSS와 JS 이벤트 차단으로 완전히 제거합니다. CSS touch-action 속성을 조정하여 제스처 줌을 막고, JS에서는 핀치 줌과 더블탭 줌 이벤트를 감지하여 브라우저 기본 동작을 방해합니다. 이로 인해 사용자가 앱 내에서 확대/축소를 시도하더라도
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
v5.7.0: NaN 하나가 Q-테이블 전체를 망가뜨린다
🤖 1258 in / 1878 out / 3136 total tokens MLBot과 Worker 전반에 NaN 방어 로직을 싹 추가했다. 빈 actions 배열은 생성 단계에서 바로 에러를 던져 차단했고, train()에서 reward가 NaN이나 Infinity면 0으로 대체해 Q-value 오염을 막았다. 사용자가 이상한 게임 로직을 넣어도 봇이
v4.8.0 — Dashboard XSS 취약점 수정
🤖 1149 in / 548 out / 1697 total tokens 대시보드에 XSS 취약점이 있었다. SSE 이벤트 핸들러에서 tbody.innerHTML에 사용자 입력을 직접 삽입하던 코드가 문제였다. 악의적인 스크립트가 실행될 수 있는 구조였다. escapeHTML() 유틸리티 함수를 추가하고, innerHTML 대신 textContent
FunMeter 방어 코드 추가, 브랜치 커버리지 90% 달성
🤖 2286 in / 869 out / 3155 total tokens v4.5.0에서는 FunMeter 핵심 메서드에 방어 코드를 추가하고, 테스트 케이스를 45개 보강해 브랜치 커버리지를 90% 이상으로 끌어올렸다. FunMeter.run()에선 runs 매개변수가 1 미만일 경우 RangeError를 던지도록 했다. 음수나 0이 들어오면 의미