igame

요약. igame: 자율 개선 회차 24회, 릴리즈 11건. 최근 릴리즈 v0.7.13 (자산 1개). 건강 D 14일: 릴리즈 11, 실패 0, 경고 7, 회귀 1

현황

저장소
https://github.com/hkjang/igame
마지막 회차
2026-09-12 17:20 KST — 🚀 릴리즈 merged PR #16, released v0.7.13
최근 릴리즈
v0.7.13 — released · 자산 1개 (이전 v0.7.12: 1개) 전체 릴리즈 →

회차 이력

일시프로젝트결과
2026-09-12 17:20igame배포 준비 완료 merged PR #16, released v0.7.13
21파일 +1679/−16 · 테스트 5 — feat: let administrators attach a visit tracking snippet under a nonce-based CSP
2026-09-11 02:41igame검토 대기 review held, PR open PR #15
38파일 +1071/−83 · 테스트 없음 — docs: publish the user and administrator guides with real screen captures
2026-09-10 20:33igame배포 준비 완료 merged PR #14, released v0.7.11
3파일 +166/−2 · 테스트 1 — fix: count the session still open against the daily play limit
2026-09-10 13:41igame배포 준비 완료 fix-round: merged PR #13, released v0.7.10
4파일 +512/−626 · 테스트 없음 — fix: clear the advisories that fail the release audit
2026-09-10 12:50igame릴리즈 진행 중 merged PR #12, released v0.7.9, ASSETS MISSING (release workflow FAILED), queued for fix
6파일 +272/−17 · 테스트 2 — fix: close the target's sessions when an admin resets a password
2026-09-09 15:47igame검토 대기 review held, PR open PR #11
5파일 +209/−14 · 테스트 1 — fix: stop an unreadable play policy from lifting itself
2026-09-09 15:41igame실행 오류 hold: budget
2026-09-09 09:20igame검토 대기 approved PR #10
2026-09-09 08:40igame검토 대기 approved PR #10
2026-09-09 08:25igame검토 대기 guarded files, PR open PR #10
4파일 +130/−3 · 테스트 1 — fix: stop a failed settings read from erasing the stored OIDC and AI secrets
2026-09-09 01:49igame배포 준비 완료 merged PR #9, released v0.7.8
3파일 +141/−11 · 테스트 1 — fix: stop group rankings from listing an organization the policy hides
2026-09-08 21:39igame배포 준비 완료 assets-only, assets for v0.7.7, asset conflict
2026-09-08 20:31igame검증 실패 verify failed: 실패한 검증: cd web && npm run build --silent (exit 1)
3파일 +105/−4 · 테스트 1 — fix: refuse an allowed origin the CSP header would drop
2026-09-07 01:26igame검증 실패 verify failed: secrets in diff
4파일 +157/−2 · 테스트 1 — fix: count the session in progress against the daily play limit
2026-09-06 15:21igame릴리즈 진행 중 merged PR #8, released v0.7.7, ASSETS MISSING
2파일 +68/−3 · 테스트 1 — fix: stop /assets/ from listing every bundle file
2026-09-05 03:23igame릴리즈 진행 중 merged PR #7, released v0.7.6, ASSETS MISSING
2026-09-04 08:18igame릴리즈 진행 중 merged PR #6, released v0.7.5, ASSETS MISSING
2026-09-04 07:20igame병합 완료 merged PR #5, release failed
2026-09-03 22:53igame변경 없음 no change
2026-09-03 14:47igame배포 준비 완료 merged PR #4, released v0.7.4
2026-09-03 08:37igame배포 준비 완료 merged PR #3, released v0.7.3
2026-09-03 02:56igame배포 준비 완료 merged PR #2, released v0.7.2
2026-09-02 20:47igame병합 완료 merged PR #1, release missing
2026-09-02 14:20igame변경 없음 no change

비용·사용량

최근 30세션
시각프로젝트단계시간비용토큰 입력/출력종료
16:58igame릴리즈4분24$1.781.6M / 12Ksuccess
16:52igamereview3분16$1.28777K / 12Ksuccess
16:48igame개선20분94$11.5214.4M / 84Ksuccess
04:10igame릴리즈5분34$1.921.7M / 15Ksuccess
02:41igamereview6분38$2.742.5M / 24Ksuccess
02:34igame개선26분165$14.9621.0M / 84Ksuccess
20:08igame릴리즈5분33$1.821.7M / 12Ksuccess
20:01igamereview3분28$1.23865K / 12Ksuccess
19:57igame개선7분42$2.492.1M / 31Ksuccess
13:20igame릴리즈5분33$1.701.6M / 12Ksuccess
13:14igamereview5분32$1.05823K / 14Ksuccess
13:09igame개선9분58$3.013.2M / 26Ksuccess
12:28igame릴리즈3분32$1.741.6M / 9Ksuccess
12:25igamereview6분38$2.372.3M / 22Ksuccess
12:18igame개선8분72$3.884.4M / 32Ksuccess
15:46igame개선5분44$2.212.0M / 23Ksuccess
08:24igame개선4분33$1.551.3M / 15Ksuccess
01:27igame릴리즈5분31$1.661.4M / 11Ksuccess
01:18igamereview2분17$0.86489K / 8Ksuccess
01:15igame개선5분40$2.262.0M / 20Ksuccess
21:39igame자산2분11$0.53288K / 4Ksuccess
20:31igame개선2분8$6.66809K / 9Ksuccess
01:26igame개선6분58$3.363.7M / 24Ksuccess
15:01igame릴리즈3분35$2.112.0M / 12Ksuccess
14:55igamereview2분15$0.47240K / 6Ksuccess
14:53igame개선3분19$1.02650K / 12Ksuccess

아이디어 백로그 — 대기 14 / 전체 15

에이전트가 회차마다 재평가한다. 가치 높고 위험 낮은 대기 항목이 다음 회차 후보다.
아이디어가치/위험/크기상태메모갱신
dev 의존성 권고가 CI에서는 보고만 되고 릴리즈에서만 빨개지는 구조적 공백4/2/S대기ci.yml의 audit 게이트는 --omit=dev이고 dev 권고는 step summary에만 적힌다. release.yml은 dev 포함 --audit-level=low라 태그를 자를 때가 되어서야 처음 빨개진다. main 스케줄 잡이 dev 권고를 이슈로 올리거나, 같은 엄격한 audit을 non-blocking 잡으로 PR에서도 돌려 요약에 남기기. 워크플로 정책 변경이라 판단이 필요하다.2026-09-12
동점일 때 rank 번호와 행 순서가 어긋날 수 있음3/1/S대기catalog.go:882·910, defense.go:1757·1781, realmguard.go:1813·1845·1938에서 row_number() OVER(ORDER BY score DESC)와 바깥 ORDER BY score DESC LIMIT이 유일하지 않은 키로 따로 정렬된다. realmguard.go:1877만 created_at을 tiebreaker로 쓴다. 양쪽 ORDER BY에 u.id 같은 결정적 tiebreaker를 더하면 된다. make test-db로 검증 가능.2026-09-12
잘린 감사 로그 CSV가 완전한 것처럼 내려감3/1/S대기auditexport.go의 주석이 '완전해 보이는 부분 export는 없느니만 못하다'고 밝히는데 구현은 반대다. 200을 먼저 쓰고 Scan 실패나 rows.Err()는 서버 로그만 남기고 break 한다. 마지막 줄에 명시적 truncation 표식을 남기거나 스트리밍을 중단하는 방향.2026-09-12
cmd/igame 기동/종료 경로 테스트 보강3/1/M대기커버리지 13.7%. 시그널 처리와 graceful shutdown 경로가 비어 있다. ListenAndServe 실패 시 goroutine 안에서 os.Exit(1)을 불러 defer db.Close()를 건너뛰는 점도 함께 볼 것.2026-09-12
Migrate 체크섬 불일치·트랜잭션 경계의 통합 테스트3/2/M대기internal/api의 IGAME_TEST_DSN 하네스와 make test-db가 있으므로 같은 규약으로 internal/database에 테스트를 추가하면 된다. make test-db는 ./internal/api/...만 돌리므로 타깃 범위도 함께 넓혀야 한다.2026-09-12
세션 생성 실패 시 클라이언트가 무조건 연습 모드로 넘어가는 정책 정리3/2/S대기useGameRuntime.start는 알 수 없는 오류를 전부 '연습 모드로 계속합니다'로 흡수한다. play_policy_denied와 play_policy_unavailable은 예외지만, 서버가 500을 내는 동안에도 허용 시간대 밖에서 게임 화면이 열린다. 정책 스위치가 켜진 배포에서만 막을지 결정이 필요하다.2026-09-12
방문 추적 관리 화면 캡처를 관리자 가이드에 추가2/1/S대기scripts/guide-capture에 /admin/tracking 장면을 더하고 IGAME_GUIDE_CAPTURE_DISPOSABLE=yes 전용 배포에서 재캡처해야 한다. 이번 회차는 문서와 PDF만 갱신했고 캡처 도구는 파괴적이라 돌리지 않았다.2026-09-12
게임에 묶이지 않은 전역 업적은 클라이언트에서 해금될 수 없음2/1/S대기content.go가 JOIN game_sessions gs ON gs.game_id=a.game_id인데 achievements.game_id는 nullable이라 NULL은 절대 매치되지 않는다. 관리자가 client_unlockable 전역 업적을 새로 만들 때만 드러난다.2026-09-12
csrfProtection이 igk_가 아닌 Bearer 값에도 검사를 건너뜀2/1/S대기api.go csrfProtection은 Authorization: Bearer 접두사만 보고 통과시키지만 authenticate는 igk_로 시작하지 않는 값을 무시하고 세션 쿠키로 인증한다. 이 서비스에 CORS 핸들러가 없어 브라우저로는 악용되지 않으므로 심층 방어 정리. origin_test.go 하네스로 DB 없이 테스트 가능.2026-09-12
listUsers만 검색어를 TrimSpace 하지 않는 불일치 정리2/1/S대기admin.go listUsers는 r.URL.Query().Get("q")를 그대로 쓰는데 감사 로그 목록과 카탈로그는 TrimSpace 한다. 붙여넣기한 공백 하나로 결과가 비는 것처럼 보인다.2026-09-12
자정을 넘겨 열려 있는 세션은 어느 날의 한도에도 잡히지 않음2/2/S대기playAllowed의 합계는 started_at>=dayStart로 걸러지므로 23:50에 열어 두고 닫지 않은 세션은 어제 몫도 오늘 몫도 세지 않는다. GREATEST(started_at,dayStart)로 자르되 열린 세션 상한(cleanupOnce의 24시간)을 함께 정해야 한다.2026-09-12
끝난 세션에 계속 result를 덧붙일 수 있음2/2/S대기finishGameSession(catalog.go:493)의 UPDATE는 status IN ('active','finished')를 받아들이고 result=result||$4로 병합한다. 재시도를 멱등하게 만들려는 의도라면 두 번째 호출은 기존 result를 보존해야 한다. 점수는 scores.session_id UNIQUE로 따로 보호된다 — 의도 확인이 먼저다.2026-09-12
<input type="time">으로는 24:00을 입력할 수 없는 점 정리2/2/S대기서버는 창의 끝에서 24:00을 받아들이지만 설정 화면의 time 입력은 23:59까지만 낼 수 있어 자정까지 덮는 창을 UI에서 만들 수 없다. 프런트엔드 변경이라 node_modules가 있는 환경이 필요하다(이번 회차에도 npm ci 설치가 가능함을 확인했다).2026-09-12
방문 추적 설정을 다른 인스턴스에 즉시 전파2/2/M대기tracking 설정은 다른 설정과 같이 5초 TTL 캐시를 타므로 다중 인스턴스에서는 최대 5초 동안 한쪽만 스니펫을 붙인다. 차단 신고 목록도 인스턴스별 메모리라 프록시 뒤 여러 인스턴스에서는 신고가 흩어진다. 표준이 메모리 저장을 명시하므로 필요할 때만 검토.2026-09-12
캠페인 tracking-2026-09 — 관리자가 화면에서 붙이는 방문 추적 스크립트와 nonce 기반 CSP5/2/L완료internal/tracking 패키지, web.HandlerWith 훅, securityHeaders의 nonce·출처·report-uri, /momento/* 프록시, csp-report 수신과 /admin/tracking 화면, ADMIN_GUIDE 3.3과 PDF 재생성. 기본값 꺼짐이며 끄면 정책이 바이트 단위로 원복됨을 테스트가 확인한다. docker PostgreSQL + 가짜 수집기로 실제 흐름을 curl로 검증했다.2026-09-12

교훈 (깨졌던 변경)

원장 (에이전트가 남긴 기록)

2026-09-02

2026-09-03

2026-09-03 (2)

2026-09-03 (3)

2026-09-04

2026-09-04 (2)

2026-09-05

2026-09-08

2026-09-09

2026-09-09

2026-09-10

← 대시보드 · 교훈 모음