Commit Graph

122 Commits

Author SHA1 Message Date
이정수 6b24386623 docs(dev): 시각 프리뷰 공동확인 + 정적 html charset 교훈
세션 20260701-083240 회고 반영.
- 시각 디자인 결정은 앱 정적경로(/css/) 프리뷰 서빙으로 사용자·에이전트 공동 확인
  (텍스트 diff 예측 한계). 결정 후 프리뷰 삭제.
- 정적 .html(DefaultServlet)도 meta charset 필수 — §299 의 정적파일 짝.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-07-01 09:34:26 +09:00
이정수 b11546a7af fix(redesign): 게임 카드 위계·여백 강화 (변경안 B)
시각 프리뷰 비교 후 사용자 선택(B). 카드 body 위계 또렷하게.
- .card__game-name 13px/600 → 15px/700, line-height 1.35→1.25 (제목 지배력↑)
- .card__likes 600/--text → 500/--text-muted, margin-top 0.15→0.45rem (stat 약화·분리)
  + 좋아요 카운트 <b> 래핑 → --accent 골드 강조 (숫자 시선)
- .card__body padding 0.5·0.625·0.625 → 0.7·0.75·0.75, gap 0.2→0.15rem

런타임 스모크: 재기동 후 GET / 200, 라이트/다크 육안 PASS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-07-01 09:33:36 +09:00
이정수 661e570069 chore(graph): 클린 풀 재생성 메타 갱신 + 타세션 work-session 리포트 추적
- docs/graph/index.md: source_commit 360078a→20789a2, 2089노드/4719엣지/128커뮤니티,
  고스트 중복(452 exact+244 fuzzy) 제거. "재생성 요청 중" 해소.
- ADR-0010: 직전 세션들(103443/105459/143405/160000/170024) 미커밋 work-session
  리포트 추적 편입(housekeeping, 코드 변경 없음).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 19:24:58 +09:00
이정수 20789a2922 docs(changes): UI 다축평가 비율·가시성 수정 사례 추가
세션 20260630-175023 을 changes 사례로 문서화. 다축 멀티에이전트
평가(6 에이전트)로 모호 시각어휘를 13건 결함으로 확장한 패턴 기록.
verification-strategies.md 교훈과 양방향 교차링크. graphify-out/ gitignore.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 19:24:08 +09:00
이정수 5158a1a55a chore(atp): 세션 20260630-175023 ended_at 기록
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 18:29:18 +09:00
이정수 c688aa67d8 docs(dev): 모호 시각어휘 다축 스캔 선행 교훈 + 세션 회고
세션 20260630-175023 회고 반영.
- verification-strategies.md: "모호 시각 결함 어휘는 단일 결정축 협소화
  전 다축 스캔 선행" 레슨 추가 + §4.4 item5 선행게이트 강화 권고.
- work-session 보고서 + 회고 섹션.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 18:29:10 +09:00
이정수 9489365fa2 fix(redesign): 카드 4:3 비율·검색바 정렬·다크 고스트버튼 가시성 외 13건
직전 리디자인에서 미해결된 2건(이미지#2 카드 비율, 이미지#3 필터 초기화
가시성)을 다축 UI/UX 평가로 13건 결함으로 확장해 일괄 수정.

비율/레이아웃:
- .card__media aspect-ratio 4/5→4/3 + .card__img object-position:center
  (가로형 웹게임 스크린샷 cover 크롭 ~55%→~25% 완화)
- .search-section 풀폭화 + .search-stack 컬럼 wrapper 신설로 검색행과
  상세검색 패널 우측 끝선 정렬(검색바 "혼자 짧음" 해소)
- .card-grid 고정 N열 → auto-fill(minmax 11rem)로 소량 카드 좌측쏠림 완화
- recruit .recruit-hero__titles max-width·검색 입력 max-width 48rem로 폭 균형

가시성/대비:
- .btn-ghost color: var(--color-on-accent)→var(--color-text)
  (다크 #3A2E15 on #222018 ≈1.1:1 → ≈13:1, WCAG AA 충족)
- 다크 --color-border 0.08→0.20(비텍스트 3:1), .sort-label 대비·위계 보강
- .btn:disabled 하드코딩색 → 토큰화

일관성/위계:
- recruit eyebrow mono/uppercase 통일, 빈상태 시 히어로 CTA 보조강등
  (화면당 골드 CTA 1개), .empty-state 패딩 clamp화

런타임 스모크: bibimbap-app 재기동 후 / + /recruit 200,
라이트/다크 양 화면 육안 검증 PASS. errer.jsp(JSTL) 무관·현재 200.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 18:24:56 +09:00
이정수 cf1e7cea62 fix(redesign): 골드 토큰 통일·클래스 충돌 정리
리디자인 검토에서 발견된 디자인 일관성 결함 수정.

- bibimbap.css: --color-accent #D4A853→#e8a54b(light+dark),
  --color-accent-press #C79A40→#d8973a. 앱 전역 브랜드 골드
  (#e8a54b, header/footer/modal/26파일)와 어긋나 모든 페이지에
  골드 2종이 공존하던 문제 해소. + .btn/.chip/.link/a focus-visible 링.
- profile.jsp: 페이지-로컬 .profile-* 를 source of truth 채택,
  합집합으로 붙은 중복 bibimbap 유틸(btn/avatar/thumb/meta/game-row
  /profile-head/card/section-*) 제거 → override 모호성 소멸.
- recruit-form.jsp: bibimbap 와 충돌하던 로컬 클래스(field/form-grid
  /req/count/preview-card/form-actions) rf- prefix rename. ID·JS 무변경.
- index.jsp: 중복 <link bibimbap.css> 제거(theme-init 가 전역 로드).

L1 mvnw package exit 0. L2 dev bind-mount 라이브 스모크 /·/login
/signup/terms/recruit/posts/error HTTP 200 + JSP 에러 0. 인증 게이트
페이지(recruit-form/profile) 렌더는 needs_user_verification.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 17:46:32 +09:00
이정수 d379a1c353 docs(dev): 정적 include jspf pageEncoding 교훈 추가
브라우저 리뷰에서 빈상태 파편 mojibake 발견(fix a4d163d). 정적
include 파편은 부모 pageEncoding 미상속 → 자체 UTF-8 선언 필수.
JSP 검증 섹션에 재현성 교훈 추가.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:56:00 +09:00
이정수 a4d163db5e fix(redesign): 빈상태 파편 UTF-8 인코딩 깨짐 수정
posts-empty/recruit-empty.jspf가 <%@ include file %>(정적 include)로
삽입되는데 파편에 pageEncoding 미선언 → Jasper가 기본 ISO-8859-1로
읽어 한글 mojibake. 정적 include는 파일별 인코딩이 독립 결정되므로
각 파편에 <%@ page pageEncoding="UTF-8" %> 추가. 브라우저 스모크로
빈상태 한글 정상 렌더 확인.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:53:18 +09:00
이정수 8d52b1082f docs(dev): JSP 변경 런타임 스모크 의무 교훈 추가
회고 교훈 jsp-runtime-smoke-gate 반영. JSP 사전컴파일 미설정이라
WAR 빌드 PASS가 EL/taglib 오류를 은닉 → JSP 변경 시 런타임 스모크
의무 + 디자인 이식 stray taglib grep 체크. 근거: errer.jsp JSTL
taglib 결함(세션 20260630-160000).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:44:57 +09:00
이정수 f87aeee34b docs(changes): 비주얼 레이어 리디자인 변경 로그
bibimbap.css 신설 + 9단위 JSP 비주얼 이식 결과·하드제약 준수·
L1/L2 검증·errer JSTL taglib 결함 수정·needs_user_verification 기록.
docs/changes/index.md 링크 추가.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:42:42 +09:00
이정수 8c86e8c4e1 docs(graph): index.md 메타 갱신 — source_commit 360078a
리디자인 비주얼 레이어 반영. 뷰 fragment 2종(posts-empty/recruit-empty
.jspf)·공유 bibimbap.css·docs 신규 노드 + posts-list/recruit-list
include 엣지 2건 반영. last_generated_at·Scopes 표 갱신.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:40:16 +09:00
이정수 360078a369 fix(redesign): errer.jsp 미사용 JSTL taglib 제거
errer 비주얼 이식 시 디자인서 딸려온 javax JSTL taglib
(http://java.sun.com/jsp/jstl/core) 1줄이 stray로 남아 Jakarta EE
환경에서 미해소 → /error 500(JasperException). 본문은 순수 scriptlet
분기라 JSTL 미사용 → 해당 taglib 제거. 로컬 재기동 스모크로 /error 200 확인.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:36:59 +09:00
이정수 239d33c218 feat(redesign): 모집 작성 필수표시/글자수/sticky 미리보기
recruit-form.jsp에 .req 필수표시(4곳), summary 글자수 카운터
(.count/#sc, 독립 oninput), .preview-card sticky 외형 추가.
제출은 기존 AJAX(fetch /recruit/new)+BibimbapCsrf.headers·필드명
10종(projectName 등) 보존, render() 미리보기 IIFE 무손실.
디자인 name=title·/recruit·CSRF누락 form 미채택.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:26:59 +09:00
이정수 e998847139 feat(redesign): 프로필 헤더/내 게임 행 비주얼 레이어
profile.jsp에 .profile-head·.game-row·.avatar·.card 외형 클래스 적용.
모델은 기존 scriptlet(session attr·myGames getName/getThumbnailUrl) 보존,
디자인 ${user.*} EL 미채택. submitNickname/uploadAvatar AJAX +
BibimbapCsrf.headers·JS참조 id 불변. 미존재 라우트(공개토글
/games/{id}/visibility, /profile/edit)는 비노출.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:25:02 +09:00
이정수 d618087d0b feat(redesign): 에러페이지 empty-state 외형 + 코드 분기
errer.jsp에 디자인 SVG 아이콘·.empty-state 외형 이식,
403/404/기타 3분기 확장. status_code scriptlet 코드읽기 방식과
isErrorPage·requestUri/message 상세 블록 보존(errorData EL 미채택).
뷰명 errer 유지.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:22:09 +09:00
이정수 29182a3124 feat(redesign): 약관 sticky 목차 + 조항 카드 구조
terms.jsp에 .terms grid + .terms-toc sticky 목차(앵커 #a1~#a10)
신규 추가, h2→h3 변환·section id 부여. 조항 본문 텍스트는 무손실
보존(전문 유지), 구조 래핑만. 자체 head/include 보존.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:22:09 +09:00
이정수 f266aeef9b feat(redesign): 로그인/회원가입 비주얼 마크업 이식
비번 보기 토글(.pw-field/.pw-toggle), 강도막대(.pw-meter),
일치표시(.form-ok), 에러 슬롯(.form-error) DOM/클래스 추가.
제출은 기존 AJAX(fetch /login·/signup)+CSRF 이중방어(_csrf hidden
+ BibimbapCsrf.headers) 그대로 보존, 필드 name·id 불변.
토글/강도/일치는 인라인 onclick/oninput 별도 스코프 — submit 무간섭.
/password/reset 링크는 라우트 미존재로 비노출.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:18:19 +09:00
이정수 5f0652edda feat(redesign): 홈 히어로/정렬칩/게임 그리드 비주얼 레이어
index.jsp에 히어로 섹션·sort-bar 칩·game-grid/game-card 외형 이식.
모델 EL은 기존 scriptlet(getName/getCreator/getThumbnailUrl) 보존,
디자인 title/author·/games/new 미채택. 정렬칩은 SearchController가
바인딩하는 sort 파라미터(latest/likes/views) 사용. 기존 head·검색폼·
include 전부 보존.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:13:52 +09:00
이정수 45fdfb640e feat(redesign): 빈상태 파편 2종 + 목록 페이지 include
fragments/posts-empty.jspf·recruit-empty.jspf 신설(.empty-state).
CTA href 실제 라우트로 교정(/posts/new·/recruit/new 단수).
posts-list·recruit-list 빈 분기에 include. recruit-list는 서버
초기 빈상태=파편 / 클라필터 0건=기존 #recruit-empty div 역할 분리,
필터 JS 무수정.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:13:52 +09:00
이정수 0390da6ae8 feat(redesign): 공유 bibimbap.css 도입 + theme-init 단일 link
리디자인 산출물 css를 src/main/webapp/css/bibimbap.css로 신설.
폰트는 system fallback 보강(외부 CDN 0, Pretendard 로컬 우선).
다크 오버라이드 블록 추가 — header.jsp data-theme=dark 토큰 차용해
body 컴포넌트와 header/footer 다크모드 정합.
theme-init.jsp(23개 페이지 공통 include)에 link 1줄 추가.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 16:07:25 +09:00
이정수 74e7ea1a32 docs(redesign): 클로드 디자인 산출물 반영 검토 + 새 세션용 핸드오프 프롬프트
외부 디자인 툴 산출물(리디자인 zip: 7 JSP + bibimbap.css + 3 jspf + error.jsp)을
전수 검토하고 우리 실제 코드와 design↔reality 매핑을 확정. 코드 변경 없음(검토 세션).

핵심: 산출물은 라우트(/games 복수 vs 실제 /game 단수), 폼 제출(classic POST vs
JSON API+AJAX), CSRF(전무 vs CsrfTokens/_csrf/window.BibimbapCsrf), contextPath
(${ctx} vs ${pageContext.request.contextPath}), include(common/ 가정 vs 평면),
에러(web.xml/error.jsp vs errer 뷰), css 디렉토리(없음) 가 모두 불일치 →
파일 통째 교체 금지, 공유 bibimbap.css 신설 + 비주얼 레이어 이식으로 결론.

산출물: artifacts/handoff-prompt.md (새 세션 작업 프롬프트 + 매핑표 + 하드 제약 + 순서).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 15:52:54 +09:00
이정수 925eb73a62 test(seed): 관리자 테스트 계정 추가 (admin@bibimbap.local)
기존 tester 계정은 USER 용으로 유지하고,
admin@bibimbap.local / test1234! (role=ADMIN) 를 seed-dev.sql 에 추가.
screenshot-guide.md 계정 표를 용도·role 포함 2행으로 확장.
teardown 은 %@bibimbap.local 전체 삭제라 수정 불필요.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 14:36:31 +09:00
이정수 aa55524191 docs(screenshot): 인증 흐름 추가 변경 기록 및 교차 링크
- docs/changes/2026-06-30-screenshot-guide-auth.md 신규 작성
- docs/changes/index.md 링크 추가
- docs/development/screenshot-guide.md 변경 이력 섹션 추가
- .atp/work-session/20260630-141415/ 세션 보고서 포함

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 14:32:15 +09:00
이정수 872f51c91c docs(screenshot): 테스트 계정 정보 + 전체 실행 명령 추가
tester@bibimbap.local / test1234! — seed-dev.sql user3

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 14:29:11 +09:00
이정수 6e6d6b2b46 fix(docs): 로그인 nav 감지 expect_navigation으로 교체 + 오류 stdout 출력
wait_for_url lambda → expect_navigation 컨텍스트 매니저로 교체.
로그인 실패 오류 메시지를 stderr 아닌 stdout에도 출력.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 14:26:07 +09:00
이정수 5dd639fd7a feat(docs): 스크린샷 가이드 — 인증 후 세부 화면 캡처 추가
로그인 전 7장만 캡처하던 스크립트를 확장:
- SCREENSHOT_EMAIL/PASSWORD env var로 인증 세션 획득
- 로그인 후 홈·프로필·게시글폼·모집폼 캡처
- game-detail 리뷰·댓글 composer hidden 제거 후 캡처
- AJAX 로그인 흐름(fetch + window.location) wait_for_url 대응

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-06-30 14:22:20 +09:00
이정수 9098325e7c docs(dev): Playwright 헤드리스 스크린샷 가이드 추가
- screenshot-guide.py: 로컬 Chrome 헤드리스로 7개 주요 페이지 캡처
- 출력 경로: /tmp/bibimbap-screenshots/ (Claude Design 연동용)
- index.md 링크 추가

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017mhnv7hDExHaXUmbaYAxZd
2026-06-30 14:10:34 +09:00
이정수 5eb6f3950e chore(atp): work-session 20260630-123347 보고서 2026-06-30 12:36:58 +09:00
이정수 a499fd9f33 docs(guidelines): 확실성 우선 원칙 추가 — 빠름보다 검증된 경로 선택 2026-06-30 12:36:30 +09:00
이정수 3726ce54f2 docs(retro): 세션 20260630-113258 회고 교훈 3건 docs 반영
- CLAUDE.md: 정적 CSS/JS Tomcat DefaultServlet 서빙 경로 규약 추가
- security-remediation-checklist: B5 recruit-form CSRF 폴백 갭 (P0) 추가
- verification-strategies: graphify 스캔 범위 JSP/CSS/JS 미포함 교훈 추가
- report.md: ended_at 기록

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-30 12:11:04 +09:00
이정수 770d3922e2 docs(graph): full scope graphify 재생성 — frontend 분석 + PostsMapper 반영 (5e0f76b)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-30 12:06:00 +09:00
이정수 5e0f76b7c1 docs(analysis): JSP 프론트엔드 컴포넌트 중복·유지보수 검토
- CSS 디자인 토큰 23개 파일 중복, JS 유틸 8중복,
  recruit-form CSRF 폴백 갭, 날짜 함수 편재 발견
- 권고: global.css 중앙화(P0), bibimbap-utils.js(P1),
  recruit-form CSRF 수정(P0-보안), bibimbap-date.js(P2)
- work-session 아티팩트: research + design recommendations 포함

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-30 11:53:15 +09:00
이정수 327fe1df25 test(posts): null cursor 회귀 테스트 추가 (168671b)
listPublishedKeyset 에 cursor=null·categoryId=null 전달 시
posts-list 뷰 정상 반환 검증.
isNull() matcher 로 null 파라미터가 매퍼에 실제 전달됨을 명시.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-30 11:31:23 +09:00
이정수 db816e10fc docs(dev): MyBatis null 캐스트 규약 + docker-compose override --build 함정 기록
verification-strategies.md: MyBatis annotation SQL에서 nullable 파라미터를
#{p} IS NULL 조건으로 사용 시 ::bigint/::timestamptz 명시 캐스트 필수 규약 추가.
컴파일·L1 MockBean 테스트로 탐지 불가 — 코드리뷰 rg 체크 항목 포함.

local-dev-setup.md: docker-compose.override.yml 존재 시 `docker compose up --build`
(base 명시 없이)는 override 의 build: !reset null 로 무효화된다는 경고 추가.
로컬 Java 변경 반영은 `docker compose restart app` 으로 충분함을 명시.

근거: 세션 20260630-105459 포스팅 500 버그 수정 회고.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-30 11:23:24 +09:00
이정수 168671bc14 fix(posts): PostgreSQL untyped NULL 파라미터 500 + category_id UPDATE 누락
listPublishedKeyset SQL에서 #{categoryId}/#{cursorCreatedAt} IS NULL 조건 사용 시
PostgreSQL이 바인드 파라미터 타입을 결정하지 못해
PSQLException: could not determine data type of parameter $1 → 500 발생.
파라미터에 ::bigint / ::timestamptz 명시 캐스트 추가로 수정.

update() SQL에서 category_id = #{categoryId} 컬럼 누락 — 카테고리 변경이
DB에 반영되지 않는 데이터 정합성 버그 함께 수정.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-30 11:16:52 +09:00
이정수 8a3eea54ce chore(dep): NVD API key 환경변수 연동 profile 추가
NVD_API_KEY 환경변수 존재 시 nvd-api-key 프로파일 활성화,
dependency-check에 키 전달 → rate limit 완화 (5 → 50 req/30s).
환경변수 없으면 프로파일 비활성 — 기존 동작 유지.
2026-06-30 10:44:55 +09:00
이정수 fa9a888c5b docs(graph): src+docs scope → full 단일 scope 통합
src↔docs 교차 엣지 단절 문제로 분리 scope 폐기.
merge-graphs로 2038노드/4685엣지 full 그래프 생성.
규모 비대화 시 재검토 노트 work-session에 기록.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-30 10:32:51 +09:00
이정수 2c48184fa7 chore(atp): retrospective 섹션 + memory_candidates 기록
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 19:24:33 +09:00
이정수 7047e06791 docs(verification): 회고 교훈 2건 반영 (20260629 세션)
- 버그범주 표: HTTP 상태/예외 매핑 변경 → L1 + 런타임 스모크 의무
- 구조교훈: HTTP 상태변경 런타임 스모크(전역 핸들러 가림 주의) + multi-worker advisor 산출 git diff 교차검증

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 19:24:22 +09:00
이정수 f6617a951d chore(atp): report 종료섹션(검증/graph_refresh/user_signals)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 19:19:17 +09:00
이정수 b5b2e6d5d3 docs(graph): src scope 재생성 메타 갱신 (source_commit 31dc2ff)
abstracts(4클래스)·GameCatalog 노드 제거 + GameController 404/ResponseStatusException
엣지·ApiExceptionControllerAdvice 핸들러 반영(1840노드/4403엣지/79커뮤니티).
docs scope 는 코드구조 무관·우선순위 낮음으로 차기 일괄 재생성 표기.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 19:19:17 +09:00
이정수 31dc2ff964 chore(atp): work-session 20260629-175705 기록(B2·B4·FE 3트랙)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 19:10:42 +09:00
이정수 aae7629562 docs: B2·B4·FE 반영 + OWASP/multipart 가이드·dev prefetch 노트
- security-remediation-checklist §B2·§B4 완료조건 [x] 갱신
- 신규: owasp-dependency-check-guide, multipart-size-risk, changes/work-log 기록
- local-dev-setup: SNAPSHOT→GA 후 online plugin prefetch 함정 노트
- analysis: 제거된 dead code(abstracts/GameCatalog/header.jspf) stale 정정

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 19:10:42 +09:00
이정수 4f4811eb73 feat(ui): 검색영역 접이식 정리 + 다크모드 입력 대비·터치타깃 개선
- index: 고도화검색을 <details> 접이식으로(prefill 시 open) → 검색 진입점 위계 정리
- 다크모드 입력 테두리 대비 강화(border rgba(255,255,255,0.26)): login·signup·index·game-detail
- 체크박스 터치타깃 1.15rem(login·signup), summary 44px

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 19:10:42 +09:00
이정수 e51ab0136c chore(deps): Spring Boot 3.5.16 고정 + 세션쿠키·로그 하드닝 + OWASP DC
- spring-boot 3.5.14-SNAPSHOT → 3.5.16(GA), spring-snapshots repo/pluginRepo 제거
- OWASP dependency-check-maven 12.2.2 plugin(executions 없음=빌드 phase 비bind)
- 세션쿠키: base http-only=true·same-site=lax / application-live.properties secure=true
- MyBatis 로그 TRACE→WARN(base), application-dev.properties 만 TRACE

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 19:10:42 +09:00
이정수 d143a5cedd fix(game): 없는 게임 ID 404 전환 + 프로토타입 dead code 제거
- abstracts/(4파일)·GameCatalog·fragments/header.jspf 삭제(외부참조 0 확인)
- GameController.gameDetail(): GameCatalog fallback(redirect/정적뷰) 제거 →
  DB 미존재 게임 ID = HTTP 404(ResponseStatusException)
- ApiExceptionControllerAdvice: ResponseStatusException 핸들러 추가(404 status
  보존 — 기존 Exception 핸들러가 500으로 가리던 것 수정)
- 회귀 가드 gameDetailThrowsNotFoundWhenGameMissing 추가

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 19:10:23 +09:00
이정수 5e8816ed4a fix(test): BibimbapApplicationTests에 GameLikesMapper @MockBean 보강
GameController 가 GameLikesMapper 를 주입받으나(B3 좋아요 영속화) 테스트
컨텍스트 @MockBean 목록에 누락돼 contextLoads 가 NoSuchBeanDefinitionException
으로 실패하던 사전결함 수정.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 19:10:23 +09:00
이정수 4c16d16dd9 docs(game): game_likes UNIQUE 제약 dev DB 적용 완료 반영
중복 0 점검 후 ALTER TABLE ADD CONSTRAINT uq_game_likes_game_user UNIQUE(game_id,user_key)
를 dev DB(bibimbap-db/schema dev)에 적용, pg_constraint 검증. B3 체크리스트 [~]→[x].
별도 prod DB 는 배포 시 동일 마이그레이션 적용 필요.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 17:42:46 +09:00