Commit Graph

140 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
이정수 64e91e4786 docs(dev): AskUserQuestion 사실전제 grep 선검증 규칙(#4) 등재 + \u 이스케이프 재발 기록
game-register.jsp 세션에서 orchestrator가 CSS 변수 대체 가능성을 grep
없이 옵션 전제로 제시했다가 재확인 왕복이 발생한 사례를 규칙 4로 명문화.
같은 세션에서 AskUserQuestion \u 이스케이프 손타이핑 실수(규칙 2)도
재발했음을 발원 사례에 추가 — 이번엔 스키마 검증에서 걸렸으나 항상
그렇게 걸리지는 않는다는 점을 명시.

세션 20260701-142000 report.md 기록.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 14:39:06 +09:00
이정수 4d0c2caceb docs(graph): full scope 증분 재생성 — 486+251 고스트 중복 추가 제거
graph-refresh-checker partial-stale 판정(db/seed-dev.sql 로직 변경 +
game-detail.jsp 함수 구조 변경) 대응. .jsp는 graphify 스캔 범위 밖이라
game-register.jsp/game-detail.jsp 자체는 그래프에 반영되지 않으나,
db/seed-dev.sql + 이번 세션 신규 docs 10건은 반영. build_merge 병합
과정에서 기존 그래프의 고스트 중복 486 exact + 251 fuzzy 를 추가로
제거(2089→1477 노드).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 14:36:00 +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
이정수 0205dca0f7 docs(dev): 사용자 의사결정/리포트 컨벤션 4건 workflow-patterns 로 이전 + 재발방지 규칙 등재
3개 독립 리뷰 서브에이전트(감사A/감사B/정책진단)의 수렴 결과에 따라:
- verification-strategies.md 에서 스코프 위반이 명확한 4개 항목(모호한 시각
  결함 다축스캔 선행, 시각 디자인 결정 프리뷰 공동확인, needs_user_verification
  결정분기 구조화, needs_user_verification 이월 시 known pitfall 교차인용)을
  workflow-patterns.md 로 이전 — 전부 "사용자와 어떻게 합의하는가"이지 코드
  정오 검증이 아님.
- design-advisor/orchestrator 운영 규율 성격 항목(SSR 영향맵, scope-fence,
  트레이드오프 확정, multi-worker git diff 교차검증, Test.java 소유태그,
  graphify 스캔범위)은 이번 라운드에서 보류 — ATP 메커니즘 성격이 강해
  별도 판단 필요.
- document-category-classification.md 에 재발방지 규칙 추가: 기존 문서에
  append 하기 전 그 문서의 자기선언 스코프와 먼저 대조하고, 같은 파일 안의
  선례를 정당화 근거로 삼지 않는다.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 12:26:08 +09:00
이정수 15023c0373 docs(dev): freeze 근거확인 + frontend-design fork 위임 패턴도 workflow-patterns 로 이전
verification-strategies.md 에 남아있던 나머지 두 "작업 방식" 패턴
(freeze/동결 분류 판단절차, frontend-design 스킬 fork 위임)을
workflow-patterns.md 로 이전. index.md 목록 설명도 항목 위치에 맞게 정정.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 12:19:17 +09:00
이정수 4c54b9db38 docs(dev): 다중 UI 안 Artifact 시각비교 패턴을 verification 대신 workflow-patterns 로 재배치
검증 전략(verification-strategies.md)은 "코드가 옳은가" L1/L2/L3 판정
레지스트리 범위인데, 직전 커밋(810fa21)에서 사용자 합의 수렴 절차(작업
진행 방식)를 그 안에 잘못 등재했다. 신규 docs/development/workflow-patterns.md
로 옮기고 index.md 목록도 정정.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 12:07:51 +09:00
이정수 810fa211a5 docs(dev): 다중 UI 안 Artifact 시각비교 → AskUserQuestion 선택 수렴 패턴 등재
game-detail.jsp 리뷰 레이아웃 세션(20260701-113509)에서 검증된 워크플로우
— 실제 CSS 토큰을 이식한 Artifact 로 후보 N안을 한 화면 비교 제시 →
AskUserQuestion 으로 확정 → 그 후에만 소스 반영 — 를 재사용 가능한
긍정 패턴으로 verification-strategies.md 에 기록하고 index.md 목록에 반영.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 12:05:32 +09:00
이정수 76a118c4e9 chore(work-session): 리뷰 레이아웃 재구성 세션 보고서 기록
/atp:task 세션 20260701-113509 — Artifact 샘플 제시(4안) → 사용자 선택
(C. 타이틀 내부 통합형 + 요약 그래프-only) → game-detail.jsp 반영(0c8da40)
까지의 결정 로그·검증 결과 기록.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 12:01:27 +09:00
이정수 0c8da405e7 feat(review): 요약 패널 그래프 단독화 + 카드 6축 미터바를 제목행으로 이동
- 요약(상단) 패널: 육각 그래프에 이미 축명/점수 라벨이 표시되므로 옆의
  범례(미터바)를 제거하고 그래프만 중앙 배치 (buildRadarLegend 호출 삭제)
- 리뷰 카드: 컴팩트 육각 아이콘 + sr-only 범례를 걷어내고, 닉네임 옆
  제목행에 6축 미니 세로 미터바(game-reviews__title-meter)를 노출 —
  4개 배치 샘플(Artifact)을 사용자가 검토 후 C안(타이틀 내부 통합형) 선택
- buildRadarLegend/.game-reviews__axis-legend*/.game-reviews__card-radar
  등 완전히 죽은 코드 제거

검증: node --check (스크립트 블록, JSP EL 치환) 통과, docker compose app
재기동 후 /game/3 실제 렌더 확인(요약 그래프 중앙 단독, 카드 6곳 모두
제목행 미터바 노출), 콘솔 에러 없음. 자동화 테스트 대상 아님(순수 뷰/JS,
서버 로직·매퍼 변경 없음).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 11:59:24 +09:00
이정수 f086b12142 docs(dev): AskUserQuestion 비ASCII 리터럴 작성 + 복수대상 스코프확인 규약 추가
세션 회고 반영. 두 교훈 모두 이번 세션에서 실제 재질의 왕복 비용을
발생시킨 구조적 결함:
1. 한글을 \u 코드포인트로 수동 타이핑하다 오타로 2회 깨짐 → 리터럴
   UTF-8 작성 규칙 명문화.
2. "각 그래프"(복수) 지적을 미터바 단수로 임의 축소 해석 → 사용자
   정정("내가 말한건 육각 그래프였어") 발생 → 복수 표현 시 전체
   후보 나열 규칙 명문화.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 11:26:31 +09:00
이정수 7185b4a4ba docs(work-session): graphify full 재생성 보류 기록 — fork/Agent 재귀 금지 충돌
graph-refresh-checker partial-stale 판정(buildHexRadar 시그니처 변경) 후
재생성 시도 — fork 위임이 graphify SKILL 의 서브에이전트 필수 병렬
디스패치 요구와 정면충돌해 무산(248k 토큰 소모, 결과 0). 사용자 확인
후 이번 세션은 open_items 로 이관, 다음 구조적 변경 배치에서 처리.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 11:23:13 +09:00
이정수 a6417dd116 fix(review): 6축 육각 레이더에 축 이름 + 점수 라벨 직접 표시
미터바 픽스와 별개로 실제 지적 대상은 레이더 차트였음 — 육각형만으론
어떤 축인지, 꼭지점이 어떤 점수인지 식별 불가. buildHexRadar 에
withLabels 옵션 추가(요약 레이더만 적용, 리뷰카드 소형 레이더는
밀도 문제로 제외)해 각 축 끝에 이름을, 꼭지점 옆에 점수를 SVG
text로 배치. 동심 그리드도 4단→5단으로 바꿔 0~5점 정수 스케일과
1:1 대응시킴.

구현 중 우측 축 라벨이 옆 범례(dl)와 겹치는 문제 발견 — 원인은
범례가 radar wrapper 내부에 append되는 구조라 `.game-reviews__radar`
자체에 gap이 없었던 것. gap 추가로 해결, 라이트/다크 양쪽 스크린샷
재확인.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 10:41:07 +09:00
이정수 93efe21329 fix(review): 6축 미터바에 1~5 눈금선 오버레이 — 바 끝점 점수 가시성 확보
리뷰 종합 미터바가 끝점 위치만으로는 어느 점수인지 판단 불가하다는
지적. AskUserQuestion 4안 중 눈금선 방식 선택 — CSS ::before +
repeating-linear-gradient(mix-blend-mode: overlay)로 20% 간격 5등분
눈금 추가. JS/마크업 변경 없음.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011h6etRXJLx1xdfxmVcHjBg
2026-07-01 10:28:31 +09:00
이정수 7572e86605 docs(dev): SQL data-only 검증레벨 표 등재 + needs_user_verification known-pitfall 교차인용 규약
retrospective-advisor 회고(세션 20260701-100731) 반영:
- "버그 범주 → L 레벨" 표에 'SQL data-only(DML)' 행 추가 — L1 해당없음
  명시 + L2(API/DB 값 일치) 필수. 매 seed/백필 세션마다 즉흥 재정당화
  하던 스킵 근거를 레지스트리에 고정.
- needs_user_verification 이월 시 최근 세션에 docs화된 렌더 관련
  known pitfall(예: JSP stale 렌더링)과 경로가 겹치면 명시 인용하는
  규약 추가. 직전 세션(20260701-093754)의 JSP 즉시반영 실패 교훈이
  후속 세션에 인용 안 된 사례를 근거로 신설, 이번 report.md 에도
  소급 적용.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-07-01 10:16:33 +09:00
이정수 820d47099a fix(seed): 더미 리뷰 6축 스펙 백필 — game_review_axes 누락 보정
/game/3 더미 리뷰 5건이 6축 리뷰 스펙(GameReviewController.AXIS_KEYS)
도입 이전 데이터라 game_review_axes 행이 0개였음. parseAxes 는 6축
전부 필수라 신규 리뷰는 항상 축을 갖는데, 시드 더미만 예외 상태 —
game-detail.jsp 레이더 차트가 더미 리뷰에 빈 값으로 렌더됐다.

- db/seed-dev.sql: 리뷰 5건 각각 6축(immersion/creativity/controls/
  completeness/sound/visual) INSERT 추가. 평균 반올림이 기존 rating과
  일치하도록 설계 + 리뷰 본문 뉘앙스 반영. 멱등(NOT EXISTS 가드),
  구버전 seed 재실행 시에도 axis 백필되도록 처리.
- 라이브 dev DB(game_id=3)에 즉시 재적용해 백필 완료.

검증: seed-dev.sql 재실행 에러 0 / GET /game/3/reviews 200, 6건 전부
axes 6키 채움 / GET /game/3 200, 레이더 마크업 서빙 확인.
graph-refresh-checker: fresh(재생성 불필요, DML-only 변경).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162BaZnrbiYgWc9JJMZ9Czb
2026-07-01 10:13:42 +09:00
이정수 e3890b3c6f docs(dev): JSP 즉시반영 실패 사례 + 검증 방법 정정
카드 여백 수정 세션에서 JSP CSS 수정이 "저장 즉시 반영" 문서 설명과
달리 컴파일 캐시로 반영 안 되는 사례 발견. 브라우저 스크린샷만으로
검증한 1차 확인이 stale 렌더링을 보고 false pass를 냄(사용자가
재캡처 스샷 대조로 발견). docker compose restart app으로 해소.

향후 JSP 수정 검증 시 curl로 서빙 CSS/마크업을 파일과 직접 대조하는
단계를 local-dev-setup.md 함정 항목으로 추가.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bn6vdHrUHqVzzUfC9da6fS
2026-07-01 09:55:51 +09:00
이정수 6e221d2ae6 fix(redesign): 카드 body 여백 재조정 — 고정 margin 대신 하단 앵커링
직전 커밋(b11546a)에서 늘린 여백이 과도하다는 사용자 피드백.
단순 롤백 대신 frontend-design 원칙 적용:
- .card__likes margin-top 0.45rem(고정) → auto (flex 하단 앵커링)
  제목 1줄/2줄 무관하게 좋아요 줄이 항상 카드 바닥에 정렬
- .card__body padding 0.7·0.75·0.75 → 0.65·0.75·0.7rem 소폭 축소

런타임 스모크: docker compose 컨테이너 기동 상태에서 GET / 200,
브라우저 fork로 라이트/다크 시각 확인 PASS.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bn6vdHrUHqVzzUfC9da6fS
2026-07-01 09:47:31 +09:00
이정수 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