Commit Graph

17 Commits

Author SHA1 Message Date
이정수 6154826a82 docs(changes): edit-mode WebGL zip 비필수 표시 육안 확인 완료
admin 소유 게임이 dev 시드에 없어 DB에 임시 row를 직접 INSERT해
/game/{id}/edit 방문 확인 후 즉시 DELETE로 원복(잔존 0건). "게임 이름
*"는 유지, "WebGL zip"은 editMode에서 * 미표시 — 코드 로직과 일치
확인. needs_user_verification 항목 1건 해소.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 15:44:05 +09:00
이정수 86b052813d feat(fe): game-register.jsp 리디자인 누락분 보강 + 재발방지 체크리스트
/game/new 가 2026-06-30 9단위 리디자인 목록에서 빠져 있던 것을 사용자가
지적해 발견. 실사용 스샷 대조 결과 레이아웃/토큰은 이미 sibling(recruit-form
등)과 일치해, 필수(*) 표시 2건 + 미리보기 eyebrow 라벨만 recruit-form.jsp
패턴 재사용으로 보강(단일 JSP, 로직 무변경). 로컬 CSS 토큰 전지역 통합은
sibling 관례와 갈라지므로 이번 세션 범위에서 제외, 별도 과제로 이월.

재발방지: frontend-redesign-coverage-checklist.md 신설(뷰 파일 23개 전수
상태표) + workflow-patterns.md 에 "전 페이지 반영 서술은 실제 파일 전수와
대조 필요" 패턴 등재.

L1 362/362 GREEN. L2 로그인 후 라이트/다크 육안 확인(known JSP stale
렌더링 함정 회피 위해 docker compose restart 후 재대조).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 14:25:47 +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
이정수 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
이정수 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
이정수 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
이정수 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
이정수 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
이정수 ee9487e118 docs(game): 좋아요 실환경 스모크 PASS 반영
사용자 검증: 로그인 좋아요 클릭 → 탐색 목록 카운트 반영 확인(docker compose dev).
changes/security 체크리스트의 "실환경 스모크 미수행" → 완료로 갱신.
잔여: game_likes UNIQUE 마이그레이션 운영 적용(사용자 확인 게이트).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 17:38:20 +09:00
이정수 fa6a301fb5 fix(game): 좋아요 서버 영속화 — 상세 토글이 explore 카운트에 반영되도록
좋아요가 서버에 저장되지 않고 브라우저 localStorage 에만 토글되어
explore/상세가 읽는 games.like_count 컬럼이 갱신되지 않던 버그 수정.

- POST /game/{id}/like 토글 엔드포인트 신설 (CSRF→로그인→존재 게이트, @Transactional)
- GameLikesMapper: findByGameAndUser/deleteByGameAndUser 추가 (addGameLike 재사용)
- GamesMapper: incrementLikeCount/decrementLikeCount(GREATEST 0)/getLikeCount 추가
- game_likes row 변경 + games.like_count ±1 단일 트랜잭션 동기화
- 상세 addGameModel 이 로그인 사용자 기존 좋아요 여부(liked) 모델 주입
- game-detail.jsp 좋아요 버튼을 localStorage→fetch POST 로 교체
- explore 5개 조회 쿼리 무변경 (컬럼 갱신으로 자동 반영)
- game_likes UNIQUE(game_id,user_key) schema 반영 + 마이그레이션 작성 (DB 미적용)
- GameLikeControllerTest 7건 (회귀 AC-1 포함)

검증: L1 PASS (컴파일 + 7/7 + 컨트롤러 회귀 219/219). L2(dev DB) skip.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 16:09:54 +09:00
이정수 a4866b6420 docs(w4): 배지표시·하드닝 변경이력 + L3 배포후 체크리스트 + 회고 교훈 3건
- changes 2026-06-29-w3-w4: 후속 세션(배지 배선·하드닝 b1/b2·DDL 적용완료·L3 이월) 기록
- maintenance/post-deploy-verification-checklist.md 신설: L3 deferred 5기능 +
  b2 자산 수동이전 절차(static/profile/8 → ~/.bibimbap/uploads)
- verification-strategies: 교훈 3건(needs 결정분기 구조화·표시배선 후행 독립트랙
  실증·런타임 의존 L1/L3 레이어 분리)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 15:01:27 +09:00
이정수 31554f8886 docs(w3-w4): W3(잔여)+W4 변경이력·구현추적 + 회고 교훈 4건 반영
- docs/changes/2026-06-29-w3-w4-features.md 신규 — W3-1/3-4/3-3/3-5/W4 5기능 변경(테이블·컨트롤러·매퍼·보안게이트·검증 347/347 + 커밋 35f1dc3~305cc73) + needs_user_verification
- docs/changes/index.md 링크 추가
- work-log 풀설계 요약 구현추적 갱신 — "W3(잔여)·W4 설계만(미구현)" → 11기능 전부 구현 완료 + 교차링크
- verification-strategies.md 회고 교훈 4건 append: (1) 보안 거부 테스트 차별 입증(vacuous 회피) (2) 보안핵심 verification+adversarial 병렬 (3) 표시면 의존 scope-fence 예외 (4) 설계 트레이드오프 1차 결론 못박기 + 프로토콜 개선 권고 5건

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 12:54:50 +09:00
이정수 b222b0106c docs(jam): W2 게임잼 변경 이력 기록 + 설계 구현추적 갱신
- docs/changes/2026-06-24-w2-jam-platform.md 신규 — W2-1~6 전체 변경(테이블·컨트롤러·게이트·보안·검증 190/190 + 커밋 ccf1e42~a74bf74)
- docs/changes/index.md 링크 추가
- work-log 풀설계 요약에 W2 구현 완료 추적 한 줄 + 교차 링크

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 14:19:14 +09:00
이정수 21892c8a03 fix(reviews): game_review_stats 집계 버그 2건 수정 + W3-2 L3 검증 완료
W3-2 댓글/리뷰 고도화 검증 부채(DDL 적용·L1 회귀·L3 브라우저 스모크) 해소 중
서버 집계의 실버그 2건을 발견·수정. 둘 다 L1 @MockBean 사각으로 누출됨.

BUG-1 game_review_stats 뷰 fan-out
- LEFT JOIN game_review_axes 직접 조인 → 리뷰가 axes 행수(최대 6)만큼 복제,
  COUNT(*)/AVG(rating) 왜곡(다축 리뷰 1건에 review_count 11/avg 2.8, 실제 6/3.5).
- 축 평균은 서브쿼리 game 단위 선집계 후 LEFT JOIN(MAX), 리뷰 단위 집계는
  game_reviews 단독 산출로 수정. docs/game-reviews-ddl.sql + db/schema.sql 동기.

BUG-2 GameReviewStatsMapper alias 케이스 폴딩
- 따옴표 없는 AS gameId/avgRating/reviewCount → Postgres 소문자 폴딩 →
  buildSummary의 camelCase Map 조회 null → summary 항상 null("아직 평가 없음" 오표시).
- alias 3개 큰따옴표로 케이스 보존.

검증
- mvn test 43/43 GREEN(수정 후 무회귀).
- 수정 후 dev 실게임: 뷰 review_count 6/avg 3.5, summary={avgRating:3.5,reviewCount:6,axes}.
- L3 스모크 12항목 전수 PASS(XSS 미실행·재방문 영속·다축6행·SVG레이더·집계·
  페이지네이션·키보드·C1/C2/C4·B2·A2). changes 문서 §L3 결과 + security checklist B3 갱신.
- 권고: game_review_stats L2 contract 테스트 신설(L1 mock 사각 차단) — 이월.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 17:54:19 +09:00
이정수 b9d836d5f4 feat: W3-2 댓글/리뷰 고도화 — 다축 평점·육각형 레이더·페이지네이션·집계뷰
W3-2 코어 위에 FINAL SPEC 전체 구현 (resumed_from 20260618-145152).

- 다축 평점: game_review_axes(6축·리뷰당6행) + overall 자동평균/수동(is_rating_manual)
- 육각형 SVG 레이더(요약+카드, frontend-design 폴리시), 6축 radiogroup(roving tabindex)
- A1 commentView 통일 / A2 하이브리드 작성자명+탈퇴자 마스킹(QG-2) / A3 edited·updated_at
- B1 페이지네이션(limit+1 hasMore) + sort 화이트리스트(@SelectProvider, ${} 미사용)
- B2 본문 최소10자 / B3 TextNormalizer 정규화
- C3 game_review_stats 집계뷰(W3-2 일반 DDL, 잼평가 동결 무관). 클라 평균계산 폐기
- DDL 멱등 ALTER/CREATE (game-reviews-ddl.sql + db/schema.sql 동기화)

검증: ./mvnw test 43/43 GREEN(회귀0). DDL 적용·L3 스모크 = 사용자 환경.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 12:29:21 +09:00
이정수 e98c437765 feat: W3-2 댓글/리뷰 분리 구현
기존 game_comments(닉네임 자유입력, localStorage 전용)를 서버 영속화 +
로그인 연동으로 전환하고, 별점 5점 + 서술 평가 형태의 game_reviews 도메인 신설.

- 댓글 서버 영속화: localStorage → DB game_comments. user_id NULL FK 비파괴 추가,
  content 200자 앱레벨 검증. 레거시 nickname 레코드 보존(비마이그레이션, QG-2).
- game_reviews 신설: 게임당 1회(partial UNIQUE), rating CHECK(1~5), soft-delete.
- 권한: 작성자 본인 OR ROLE_ADMIN. 비로그인 쓰기 401, CSRF 미검증 403.
- GameController.deleteGame 에 리뷰 cascade soft-delete 추가.
- GameCommentController(C1~C4) / GameReviewController(R1~R5) 신규.
- 컨트롤러 단위 테스트 추가, BibimbapApplicationTests 매퍼 @MockBean 보강.
- 보안 체크리스트 댓글 항목 충족 마킹, 좋아요 항목은 범위 밖 미결 유지.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019tHAb6XYHWDPzb82FNKugo
2026-06-18 14:35:24 +09:00
이정수 33a4465e0e docs: ATP 문서 체계 도입 및 프로젝트 종합 분석 추가
docs/ 카테고리 트리(adr·analysis·architecture 등)와 ATP 워크플로 문서를 신규 추가하고,
4축(아키텍처·보안·품질·도메인) read-only 종합 분석을
docs/analysis/2026-06-16-project-analysis.md 로 기록한다.

- 신규 분석 문서 + docs/analysis/index.md 링크
- 기존 docs 2건(db-update-query-generator, user-signup-schema)에 교차링크 추가
- CLAUDE.md 프로젝트 지침, .atp/work-session 분석 세션 기록, .serena 프로젝트 설정 포함

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 12:18:56 +09:00