bibimbap/.atp/work-session/20260629-100849/implementation/ownership-w4.md

5.0 KiB

phase agent agent_version generated_at workstream
implementation implementation-advisor 1 2026-06-29T13:30:00+09:00 W4-유저 배지/평판

W4 파일 소유권 맵 (충돌 0 — 1파일=1worker, 강결합 그룹만 묶음)

의존: B-SCHEMA → B-DOMAIN(data/enum/매퍼) → {B-SERVICE → B-HOOK/B-MANAGE/B-DISPLAY}. B-PERM 은 B-MANAGE 선행. 시그니처 사전 제공(설계 §신규 함수 시그니처)으로 wave 간 read 의존 제거 → wave 내 병렬 안전.

Wave 1 (병렬 — 상호 독립)

파일 worker id 유형 B-* 의존
docs/badge-ddl.sql migration-writer w-001 create B-SCHEMA -
db/schema.sql migration-writer w-001 modify(append 말미) B-SCHEMA badge-ddl 사본(같은 worker 동기)
src/main/java/.../security/PermissionKeys.java code-writer w-002 modify(enum +1) B-PERM -
src/main/java/.../badge/BadgeKeys.java code-writer w-003 create B-DOMAIN -
src/main/java/.../data/BadgeData.java code-writer w-004 create B-DOMAIN -
src/main/java/.../data/UserBadgeData.java code-writer w-004 create B-DOMAIN -
src/main/java/.../data/UserBadgeKeyRow.java code-writer w-004 create B-DOMAIN -
src/main/java/.../mapper/BadgesMapper.java code-writer w-005 create B-DOMAIN -
src/main/java/.../mapper/UserBadgesMapper.java code-writer w-006 create B-DOMAIN -
src/main/java/.../mapper/UserBadgesQueryMapper.java code-writer w-007 create B-DOMAIN -
src/main/java/.../mapper/ReputationEventsMapper.java code-writer w-008 create B-DOMAIN -

Wave 2 (B-DOMAIN 시그니처 의존 — 프롬프트에 시그니처 명시 → 병렬)

파일 worker id 유형 B-* 의존
src/main/java/.../badge/BadgeCatalogSeeder.java code-writer w-009 create B-DOMAIN BadgeKeys(w-003)·BadgesMapper(w-005) 시그니처
src/main/java/.../badge/ReputationService.java code-writer w-010 create B-SERVICE ReputationEventsMapper(w-008)·BadgeService 시그니처
src/main/java/.../badge/BadgeService.java code-writer w-011 create B-SERVICE BadgeKeys·ReputationEventsMapper·UserBadgesMapper 시그니처

Wave 3 (B-SERVICE 의존)

파일 worker id 유형 B-* 의존
src/main/java/.../controller/api/GameReviewController.java code-writer w-012 modify(append 훅+배지부착) B-HOOK+B-DISPLAY ReputationService·UserBadgesQueryMapper 시그니처
src/main/java/.../controller/api/GameController.java code-writer w-013 modify(append 훅) B-HOOK ReputationService 시그니처
src/main/java/.../controller/BadgeManageController.java code-writer w-014 create B-MANAGE BadgeService·PermissionGate·PermissionKeys.BADGE_MANAGE 시그니처
src/main/webapp/WEB-INF/views/game-detail.jsp code-writer w-015 modify(JS 리뷰 배지 렌더) B-DISPLAY authorBadges 필드명(w-012)
src/main/webapp/WEB-INF/views/profile.jsp code-writer w-016 modify(본인 배지 표시) B-DISPLAY - (profile 은 자체 조회 추가)

Wave 4 (검증 산출물 — 신규 컴포넌트 시그니처 의존)

파일 worker id 유형 의존
src/test/.../BibimbapApplicationTests.java code-writer w-017 modify(@MockBean +5매퍼·+2서비스) 신규 빈 이름
src/test/.../service/BadgeServiceTest.java code-writer w-018 create BadgeService(w-011)
src/test/.../controller/BadgeManageControllerTest.java code-writer w-019 create BadgeManageController(w-014)
src/test/.../controller/api/GameReviewControllerTest.java code-writer w-020 modify(훅 회귀 + 본흐름 불변) GameReviewController(w-012)

불변식 점검

  • 동일 파일 1 worker only: OK.
  • profile.jsp(w-016) ↔ game-detail.jsp(w-015): 별 파일, 충돌 0.
  • GameReviewController(w-012): 훅(B-HOOK) + 배지부착(B-DISPLAY) 한 파일에 통합 → 1 worker 가 전 변경 담당(split 충돌 회피, ownership-w34 선례).
  • BadgeData/UserBadgeData/UserBadgeKeyRow(w-004): 같은 data 디렉토리 POJO 3개 강결합 → 1 worker.
  • 매퍼 4종은 각 1 worker(w-005~008): SQL 독립, 병렬 이득.

설계 편차(grounding 확정)

  • 게임 카드 SSR 배지 부착 보류: 설계 영향맵 line322 "GameController getVisibleGames creator 배지 부착" — 실제 getVisibleGames 호출지점 0(미사용 매퍼). 게임 카드는 WebMvcController hub(listVisibleKeyset/searchVisibleKeyset) + SearchController 가 SSR(index.jsp). 둘 다 W3-4/타 W 산출물 → 작업지시 §금지 "W3-1/3/4/5 산출물 접근 금지". 따라서 게임 카드 배지는 미구현, AC-8/AC-9 는 리뷰 작성자 배지(listReviews JSON+JS) + profile.jsp 로 충족. UserBadgesQueryMapper.listActiveBadgeKeysByUserIds 배치쿼리는 listReviews 에서 N+1 차단 입증.
  • B-HOOK 의 GameController createGame 훅은 작업지시 "GameController append 허용" 명시 대상 → 진행.

planned_workers: 20