{
 "_note": "Role x ideal-skill BLUEPRINT. Written as what each role NEEDS, independent of current inventory (treat the catalog as empty). Every skill is need:true (a spec to define, not yet authored). cross = Codex-designed cross-cutting roles.",
 "version": 11,
 "domains": {
  "common": {
   "name": "공통 (기획·리서치)",
   "desc": "어떤 프로젝트든 먼저 부르는 사람들 — 무엇을 왜 만들지 + 어떻게 지을지 큰 틀을 정한다.",
   "roles": [
    {
     "id": "c-researcher",
     "icon": "🔬",
     "name": "리서처",
     "duty": "무엇을 만들지, 사실이 맞는지 캐낸다.",
     "skills": [
      {
       "skill": "c-researcher-01",
       "name": "시장 신호 리서치",
       "when": "트렌드·수요·경쟁 신호로 기회를 포착할 때",
       "need": true
      },
      {
       "skill": "c-researcher-02",
       "name": "경쟁·벤치마크 분석",
       "when": "유사 제품의 강약점·포지셔닝을 비교할 때",
       "need": true
      },
      {
       "skill": "c-researcher-03",
       "name": "사용자 문제 정의",
       "when": "누구의 어떤 문제인지 한 문장으로 못박을 때",
       "need": true
      },
      {
       "skill": "c-researcher-04",
       "name": "딥 팩트체크 리서치",
       "when": "주장·수치를 다출처·인용으로 검증할 때",
       "need": true
      },
      {
       "skill": "c-researcher-05",
       "name": "컨셉 후보 점수화",
       "when": "여러 아이디어를 가치·실현성으로 줄세울 때",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "c-planner",
     "icon": "📋",
     "name": "기획 디렉터",
     "duty": "프로젝트 전체 기획·설계·게이트를 세운다.",
     "skills": [
      {
       "skill": "c-planner-01",
       "name": "비전 원페이저",
       "when": "무엇을·왜·누구에게를 한 장으로 정리할 때",
       "need": true
      },
      {
       "skill": "c-planner-02",
       "name": "PRD 작성",
       "when": "기능을 수용기준·비목표와 함께 명세할 때",
       "need": true
      },
      {
       "skill": "c-planner-03",
       "name": "전체 블루프린트",
       "when": "화면·데이터·플로우 전체 설계를 세울 때",
       "need": true
      },
      {
       "skill": "c-planner-04",
       "name": "MVP 범위 컷",
       "when": "Prototype/MVP/V1/Later로 범위를 자를 때",
       "need": true
      },
      {
       "skill": "c-planner-05",
       "name": "우선순위 결정",
       "when": "가치·노력·리스크로 무엇부터 할지 정할 때",
       "need": true
      },
      {
       "skill": "c-planner-06",
       "name": "리스크 등록부",
       "when": "불확실성·의존성·실패 모드를 목록화할 때",
       "need": true
      },
      {
       "skill": "c-planner-07",
       "name": "게이트 체크",
       "when": "구현에 넘기기 전 준비도를 점검할 때",
       "need": true
      },
      {
       "skill": "workflow-translator",
       "name": "워크플로우 트랜슬레이터",
       "when": "막연·거친 개발 요청('대충 만들어줘')을 구현 전 구체 계획으로 변환할 때",
       "need": true
      }
     ],
     "rank": 2
    },
    {
     "id": "c-architect",
     "icon": "🏛️",
     "name": "아키텍트·테크리드",
     "duty": "기술 스택·모듈 경계·데이터 흐름의 최종 결정자.",
     "skills": [
      {
       "skill": "c-architect-01",
       "name": "기술 스택 선택",
       "when": "엔진·언어·프레임워크·호스팅을 고를 때 (1차 기본: 게임=Unity · 앱=Flutter · 웹=Next.js/Cloudflare)",
       "need": true
      },
      {
       "skill": "c-architect-02",
       "name": "모듈 경계 설계",
       "when": "의존 방향·인터페이스로 결합도를 관리할 때",
       "need": true
      },
      {
       "skill": "c-architect-03",
       "name": "데이터 흐름 설계",
       "when": "클라-서버-DB 경계와 상태 소유권을 정할 때",
       "need": true
      },
      {
       "skill": "c-architect-04",
       "name": "빌드·환경 전략",
       "when": "리포 구조·CI·배포 타깃을 잡을 때",
       "need": true
      },
      {
       "skill": "c-architect-05",
       "name": "기술 리스크·트레이드오프",
       "when": "확장성·비용·유지보수를 저울질해 결정할 때",
       "need": true
      },
      {
       "skill": "c-architect-06",
       "name": "코드 표준·리뷰 게이트",
       "when": "네이밍·테스트·리팩터 기준을 세울 때",
       "need": true
      },
      {
       "skill": "klv:first-packet",
       "name": "첫 작업 패킷",
       "when": "구현 넘기기 전 Phase-0 계획전용 패킷을 끊을 때",
       "need": true
      },
      {
       "skill": "klv:ssot-index",
       "name": "SSoT 인덱싱·압축",
       "when": "기존 문서가 흩어졌을 때 SSoT로 압축·색인할 때",
       "need": true
      }
     ],
     "rank": 2
    }
   ]
  },
  "cross": {
   "name": "횡단 실무 (모든 프로젝트 공통)",
   "desc": "게임·웹·앱 무엇이든 출시·운영까지 가려면 필요한 공통 역할. 1인 개발에선 한 사람이 여러 역할 겸임 가능.",
   "research": "Codex 리뷰 반영: 백엔드+DB·인프라+보안·게임 프로듀서+디자이너를 통합(1인 조정비용↓), 빠졌던 아키텍트·릴리즈매니저·UX라이터 추가. 최적 팀 6~10역할 — 청사진은 능력 단위라 분리돼 보여도 런타임은 겸임으로 압축.",
   "roles": [
    {
     "id": "x-server",
     "icon": "🗄️",
     "name": "서버·데이터 엔지니어",
     "duty": "API·인증·서버로직·결제를 데이터 모델·정합성과 한 몸으로 책임진다. (백엔드는 항상 DB를 함께 설계)",
     "skills": [
      {
       "skill": "x-server-01",
       "name": "API+데이터 모델 동시 설계",
       "when": "클라/서버 경계를 잡을 때 — 엔드포인트와 그 뒤 스키마를 같이 정한다",
       "need": true
      },
      {
       "skill": "x-server-02",
       "name": "도메인 데이터 모델링",
       "when": "유저·주문·결제·이벤트 엔티티 초기 설계",
       "need": true
      },
      {
       "skill": "x-server-03",
       "name": "인증·권한 구현",
       "when": "회원·유료·관리자 + 데이터 접근 정책까지",
       "need": true
      },
      {
       "skill": "x-server-04",
       "name": "서버 비즈니스 로직",
       "when": "클라 조작 차단 + 트랜잭션 경계 설정",
       "need": true
      },
      {
       "skill": "x-server-05",
       "name": "트랜잭션·정합성 설계",
       "when": "결제·재화·보상을 원자적으로 보장할 때",
       "need": true
      },
      {
       "skill": "x-server-06",
       "name": "스키마 마이그레이션",
       "when": "운영 DB 구조 변경 (롤백 가능)",
       "need": true
      },
      {
       "skill": "x-server-07",
       "name": "쿼리·인덱스 최적화",
       "when": "응답 지연·비용 클 때 (N+1 포함)",
       "need": true
      },
      {
       "skill": "x-server-08",
       "name": "캐시 전략",
       "when": "읽기 부하·지연 줄일 때 (Redis·CDN·TTL)",
       "need": true
      },
      {
       "skill": "x-server-09",
       "name": "결제·웹훅 연동",
       "when": "유료화 붙일 때 (멱등성·정산 데이터)",
       "need": true
      },
      {
       "skill": "x-server-10",
       "name": "백그라운드 작업",
       "when": "푸시·정산·보상 지급 (큐·재시도)",
       "need": true
      },
      {
       "skill": "x-server-11",
       "name": "백업·개인정보 분리",
       "when": "손실 대비·규정 준수 (PITR·PII 익명화·탈퇴)",
       "need": true
      },
      {
       "skill": "x-server-12",
       "name": "API·데이터 테스트",
       "when": "서버 변경 회귀 + 데이터 품질 검증",
       "need": true
      },
      {
       "skill": "x-server-13",
       "name": "리더보드·점수 검증·악용 방지",
       "when": "온라인 랭킹/점수 제출 시 서버 검증·조작 탐지·비정상 기록 필터",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "x-platform",
     "icon": "⚙️",
     "name": "플랫폼·보안 엔지니어",
     "duty": "CI/CD·컨테이너·시크릿·권한·취약점·롤백을 함께 책임진다.",
     "skills": [
      {
       "skill": "x-platform-01",
       "name": "CI 파이프라인",
       "when": "PR 품질 게이트 (lint·test·build + 보안 스캔)",
       "need": true
      },
      {
       "skill": "x-platform-02",
       "name": "CD 배포 자동화",
       "when": "반복 배포 안정화 (staging·prod·승인)",
       "need": true
      },
      {
       "skill": "x-platform-03",
       "name": "컨테이너·환경 분리",
       "when": "일관 실행 + 테스트/운영 격리",
       "need": true
      },
      {
       "skill": "x-platform-04",
       "name": "비밀·시크릿 관리",
       "when": "시크릿이 코드에 안 섞이게 (Secret Manager·Vault)",
       "need": true
      },
      {
       "skill": "x-platform-05",
       "name": "권한·접근 정책",
       "when": "최소권한 — 관리자·유료·PII 보호",
       "need": true
      },
      {
       "skill": "x-platform-06",
       "name": "취약점·의존성 점검",
       "when": "OWASP·SCA·알려진 CVE 대응",
       "need": true
      },
      {
       "skill": "x-platform-07",
       "name": "관측성·알람",
       "when": "장애·침해 탐지 (로그·메트릭·트레이스)",
       "need": true
      },
      {
       "skill": "x-platform-08",
       "name": "롤백·인시던트 대응",
       "when": "배포 실패·침해 시 복구 (canary·feature flag)",
       "need": true
      },
      {
       "skill": "x-platform-09",
       "name": "인프라 코드화·비용",
       "when": "재현 가능 클라우드(Terraform) + 운영비 모니터링",
       "need": true
      },
      {
       "skill": "x-platform-10",
       "name": "E2E·통합 테스트",
       "when": "핵심 플로우를 자동으로 검증할 때",
       "need": true
      },
      {
       "skill": "x-platform-11",
       "name": "스모크 테스트",
       "when": "배포 직후 기본 동작을 확인할 때",
       "need": true
      },
      {
       "skill": "x-platform-12",
       "name": "릴리즈 자동 검증 게이트",
       "when": "배포 전 자동 통과 기준을 걸 때",
       "need": true
      },
      {
       "skill": "x-platform-13",
       "name": "크래시·로그 재현",
       "when": "운영 장애를 테스트로 재현할 때",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "x-liveops",
     "icon": "📈",
     "name": "라이브옵스 · 운영",
     "duty": "이벤트·CS·리텐션·푸시·공지.",
     "skills": [
      {
       "skill": "x-liveops-01",
       "name": "운영 이벤트 설계",
       "when": "리텐션 올릴 때 (출석·시즌·할인·보상)",
       "need": true
      },
      {
       "skill": "x-liveops-02",
       "name": "원격 설정 관리",
       "when": "앱 업데이트 없이 운영값 조정",
       "need": true
      },
      {
       "skill": "x-liveops-03",
       "name": "공지 시스템 운영",
       "when": "사용자에게 변경 전달 (앱내공지·점검·노트)",
       "need": true
      },
      {
       "skill": "x-liveops-04",
       "name": "푸시 캠페인 구성",
       "when": "재방문·이벤트 안내 (세그먼트·딥링크)",
       "need": true
      },
      {
       "skill": "x-liveops-05",
       "name": "CS 이슈 triage",
       "when": "사용자 지원 처리 (분류·계정조회·보상)",
       "need": true
      },
      {
       "skill": "x-liveops-06",
       "name": "운영툴 어드민 설계",
       "when": "수동 운영 (유저검색·지급·차단·로그)",
       "need": true
      },
      {
       "skill": "x-liveops-07",
       "name": "장애 커뮤니케이션",
       "when": "장애·데이터 오류 시 (공지·보상·사후보고)",
       "need": true
      },
      {
       "skill": "x-liveops-08",
       "name": "리텐션 캠페인 운영",
       "when": "생애주기별 개입 (이탈위험·신규·결제유저)",
       "need": true
      },
      {
       "skill": "x-liveops-09",
       "name": "콘텐츠 캘린더 관리",
       "when": "운영 일정 충돌 방지",
       "need": true
      },
      {
       "skill": "x-liveops-10",
       "name": "헬프센터·FAQ 구축",
       "when": "사용자 셀프서비스 지원을 만들 때",
       "need": true
      },
      {
       "skill": "x-liveops-11",
       "name": "티켓·환불·계정복구 프로세스",
       "when": "사용자 문제를 끝까지 처리하는 흐름이 필요할 때",
       "need": true
      },
      {
       "skill": "x-liveops-12",
       "name": "SLA·응대 매크로",
       "when": "응대 기준·표준 답변을 세울 때",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "x-analytics",
     "icon": "📊",
     "name": "애널리틱스",
     "duty": "이벤트 설계·퍼널·대시보드·A/B.",
     "skills": [
      {
       "skill": "x-analytics-01",
       "name": "이벤트 택소노미 설계",
       "when": "분석 로그 처음 설계 (네이밍 규칙)",
       "need": true
      },
      {
       "skill": "x-analytics-02",
       "name": "핵심 지표 정의",
       "when": "목표·대시보드 (DAU·retention·ARPU·LTV·churn)",
       "need": true
      },
      {
       "skill": "x-analytics-03",
       "name": "퍼널 분석 구성",
       "when": "이탈 구간 찾기 (가입·튜토리얼·결제 전환)",
       "need": true
      },
      {
       "skill": "x-analytics-04",
       "name": "코호트 분석",
       "when": "사용자 품질 평가 (가입일·채널·결제별)",
       "need": true
      },
      {
       "skill": "x-analytics-05",
       "name": "대시보드 제작",
       "when": "매일 상태 보기 (Metabase·Amplitude)",
       "need": true
      },
      {
       "skill": "x-analytics-06",
       "name": "A/B 테스트 설계",
       "when": "UI·가격·보상·온보딩 검증",
       "need": true
      },
      {
       "skill": "x-analytics-07",
       "name": "어트리뷰션 분석",
       "when": "마케팅 효율 판단 (광고·스토어·바이럴)",
       "need": true
      },
      {
       "skill": "x-analytics-08",
       "name": "데이터 검증 쿼리",
       "when": "지표 이상할 때 (클라로그 vs 서버원장)",
       "need": true
      },
      {
       "skill": "x-analytics-09",
       "name": "프라이버시 준수 분석",
       "when": "개인정보 규정+분석 (동의·익명화·삭제)",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "x-marketing",
     "icon": "📣",
     "name": "마케팅 · 스토어",
     "duty": "ASO·스토어 자산·런치·리뷰 대응.",
     "skills": [
      {
       "skill": "x-marketing-01",
       "name": "ASO 키워드 설계",
       "when": "스토어 등록 전 (이름·부제·키워드·카테고리)",
       "need": true
      },
      {
       "skill": "x-marketing-02",
       "name": "스토어 카피 작성",
       "when": "스토어 페이지 (전환 중심 설명·노트)",
       "need": true
      },
      {
       "skill": "x-marketing-03",
       "name": "스토어 이미지 기획",
       "when": "설치 전환율 (스크린샷 순서·미리보기 영상)",
       "need": true
      },
      {
       "skill": "x-marketing-04",
       "name": "런치 체크리스트 운영",
       "when": "출시 직전 (사전예약·심사·가격·지역)",
       "need": true
      },
      {
       "skill": "x-marketing-05",
       "name": "리뷰 대응",
       "when": "출시 후 평판 (긍정·부정 답변·평점 회복)",
       "need": true
      },
      {
       "skill": "x-marketing-06",
       "name": "캠페인 메시지 제작",
       "when": "유입 캠페인 (광고·랜딩·이메일·푸시·SNS)",
       "need": true
      },
      {
       "skill": "x-marketing-07",
       "name": "크리에이티브 테스트",
       "when": "설치단가·전환 개선 (썸네일·소재·CTA)",
       "need": true
      },
      {
       "skill": "x-marketing-08",
       "name": "경쟁 앱 리서치",
       "when": "시장 진입 전략 (포지셔닝·가격·리뷰)",
       "need": true
      },
      {
       "skill": "x-marketing-09",
       "name": "커뮤니티 초기 운영",
       "when": "초기 유저 기반 (Discord·SNS·피드백)",
       "need": true
      },
      {
       "skill": "x-marketing-10",
       "name": "런치 자산 제작",
       "when": "트레일러·캡슐 이미지·스크린샷 등 스토어 전환 자산 실제 제작",
       "need": true
      },
      {
       "skill": "klv:gtm",
       "name": "GTM·유통 전략",
       "when": "UA훅·ASO·kill/scale 게이트로 유통 경로를 설계할 때",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "x-monetization",
     "icon": "💰",
     "name": "수익화 매니저",
     "duty": "무엇을 얼마에 어떻게 팔지 결정한다. (결제 배관 아닌 비즈니스)",
     "skills": [
      {
       "skill": "x-monetization-01",
       "name": "가격·패키지 설계",
       "when": "얼마에·어떤 묶음으로 팔지 정할 때",
       "need": true
      },
      {
       "skill": "x-monetization-02",
       "name": "구독·인앱상품 설계",
       "when": "구독 티어·소비/비소비 아이템을 짤 때",
       "need": true
      },
      {
       "skill": "x-monetization-03",
       "name": "Paywall·오퍼 설계",
       "when": "언제·어디서 결제를 띄울지 정할 때",
       "need": true
      },
      {
       "skill": "x-monetization-04",
       "name": "프로모션·환불 정책",
       "when": "첫구매·시즌·번들·환불 규칙을 만들 때",
       "need": true
      },
      {
       "skill": "x-monetization-05",
       "name": "수익성 모델",
       "when": "LTV·CAC·ARPU로 팔 만한지 판단할 때",
       "need": true
      },
      {
       "skill": "x-monetization-06",
       "name": "무료↔유료 경계 설계",
       "when": "F2P 밸런스·페이투윈 방지를 잡을 때",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "x-compliance",
     "icon": "⚖️",
     "name": "법무·컴플라이언스",
     "duty": "약관·개인정보·정책·라이선스로 출시·법적 리스크를 막는다.",
     "skills": [
      {
       "skill": "x-compliance-01",
       "name": "약관·개인정보처리방침 작성",
       "when": "ToS·Privacy Policy가 필요할 때",
       "need": true
      },
      {
       "skill": "x-compliance-02",
       "name": "동의·추적 고지",
       "when": "GDPR·쿠키·앱 추적 권한을 처리할 때",
       "need": true
      },
      {
       "skill": "x-compliance-03",
       "name": "스토어 정책 사전 검토",
       "when": "앱스토어·플레이 심사 리젝을 예방할 때",
       "need": true
      },
      {
       "skill": "x-compliance-04",
       "name": "라이선스·저작권 검토",
       "when": "에셋·폰트·OSS 라이선스를 확인할 때",
       "need": true
      },
      {
       "skill": "x-compliance-05",
       "name": "연령·청소년 보호",
       "when": "등급·아동 데이터·결제 제한이 필요할 때",
       "need": true
      },
      {
       "skill": "x-compliance-06",
       "name": "데이터 삭제·열람 요청 대응",
       "when": "탈퇴·열람·이동권을 처리할 때",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "x-release",
     "icon": "🚀",
     "name": "릴리즈 매니저",
     "duty": "출시 가능 여부를 통합 판정하고 롤아웃·롤백을 결정한다.",
     "skills": [
      {
       "skill": "x-release-01",
       "name": "출시 준비도 게이트",
       "when": "빌드·QA·자산·정책을 통합 체크리스트로 점검할 때",
       "need": true
      },
      {
       "skill": "x-release-02",
       "name": "빌드 승인·서명",
       "when": "버전·서명·배포 패키지를 확정할 때",
       "need": true
      },
      {
       "skill": "x-release-03",
       "name": "스토어·플랫폼 제출",
       "when": "메타데이터·심사·정책 대응 (리젝 포함)",
       "need": true
      },
      {
       "skill": "x-release-04",
       "name": "단계적 롤아웃",
       "when": "canary·코호트·중단기준으로 점진 출시할 때",
       "need": true
      },
      {
       "skill": "x-release-05",
       "name": "롤백·핫픽스 결정",
       "when": "장애 시 되돌리기·패치 경로를 판단할 때",
       "need": true
      },
      {
       "skill": "x-release-06",
       "name": "릴리즈 노트·핸드오프",
       "when": "변경·알려진 이슈·운영 인계를 정리할 때",
       "need": true
      }
     ],
     "rank": 2
    },
    {
     "id": "x-writer",
     "icon": "✍️",
     "name": "UX 라이터·콘텐츠",
     "duty": "사용자가 읽는 모든 문장(온보딩·문구·카피·공지)을 책임진다.",
     "skills": [
      {
       "skill": "x-writer-01",
       "name": "보이스·톤 가이드",
       "when": "제품 인격·용어를 통일할 때",
       "need": true
      },
      {
       "skill": "x-writer-02",
       "name": "온보딩·튜토리얼 문구",
       "when": "첫 사용 동선의 카피를 쓸 때",
       "need": true
      },
      {
       "skill": "x-writer-03",
       "name": "마이크로카피",
       "when": "버튼·빈상태·에러·확인 문구를 다듬을 때",
       "need": true
      },
      {
       "skill": "x-writer-04",
       "name": "스토어·랜딩 카피",
       "when": "제목·설명·스크린샷 문구를 쓸 때",
       "need": true
      },
      {
       "skill": "x-writer-05",
       "name": "공지·릴리즈·푸시 문구",
       "when": "운영 커뮤니케이션을 쓸 때",
       "need": true
      },
      {
       "skill": "x-writer-06",
       "name": "현지화 준비",
       "when": "문자열 분리·번역 가능 구조로 만들 때",
       "need": true
      }
     ],
     "rank": 3
    }
   ]
  },
  "game": {
   "name": "게임",
   "desc": "게임 하나를 만들 때 소집하는 도메인 팀 (+횡단 실무 탭의 역할도 함께).",
   "roles": [
    {
     "id": "g-director",
     "icon": "🎬",
     "name": "게임 디렉터",
     "duty": "컨셉·코어루프·밸런스·범위·일정을 한 손으로 본다. (프로듀서+디자이너 통합)",
     "skills": [
      {
       "skill": "g-director-01",
       "name": "게임 컨셉 원페이저",
       "when": "핵심 재미·타깃·차별점을 한 장으로",
       "need": true
      },
      {
       "skill": "g-director-02",
       "name": "코어루프 설계",
       "when": "가장 작은 행동-보상-진행 루프를 잡을 때",
       "need": true
      },
      {
       "skill": "g-director-03",
       "name": "FTUE·첫 5분 설계",
       "when": "첫인상(훅·첫 승리·첫 선택)을 짤 때",
       "need": true
      },
      {
       "skill": "g-director-04",
       "name": "기능 PRD",
       "when": "기능 하나를 수용기준·비목표로 못박을 때",
       "need": true
      },
      {
       "skill": "g-director-05",
       "name": "진행·메타 설계",
       "when": "장기 동기(레벨·수집·랭킹)를 설계할 때",
       "need": true
      },
      {
       "skill": "g-director-06",
       "name": "경제·밸런스 설계",
       "when": "획득·소비·난이도/보상 곡선을 잡을 때",
       "need": true
      },
      {
       "skill": "g-director-07",
       "name": "라이브 밸런스 튜닝",
       "when": "출시 후 지표·플레이 데이터를 보고 보상·난이도·경제 곡선을 다시 조정할 때",
       "need": true
      },
      {
       "skill": "g-director-08",
       "name": "콘텐츠 설계",
       "when": "레벨·스테이지·이벤트를 기획할 때",
       "need": true
      },
      {
       "skill": "g-director-09",
       "name": "MVP 우선순위·범위",
       "when": "Prototype/MVP/V1/Later로 자를 때",
       "need": true
      },
      {
       "skill": "g-director-10",
       "name": "로드맵·게이트",
       "when": "마일스톤 + 구현 넘기기 전 준비도 점검",
       "need": true
      }
     ],
     "rank": 2
    },
    {
     "id": "g-ux",
     "icon": "🎨",
     "name": "UX·UI 디자이너",
     "duty": "화면 흐름·목업·UI 완성도를 책임진다.",
     "skills": [
      {
       "skill": "g-ux-01",
       "name": "화면 인벤토리·플로우",
       "when": "필요한 화면과 이동 흐름을 정의할 때",
       "need": true
      },
      {
       "skill": "g-ux-02",
       "name": "와이어프레임·목업",
       "when": "화면별 레이아웃·상태를 그릴 때",
       "need": true
      },
      {
       "skill": "g-ux-03",
       "name": "UI 컴포넌트 시스템",
       "when": "버튼·패널·HUD 규칙을 표준화할 때",
       "need": true
      },
      {
       "skill": "g-ux-04",
       "name": "피드백·게임필 설계",
       "when": "타격감·연출·사운드 큐를 설계할 때",
       "need": true
      },
      {
       "skill": "g-ux-05",
       "name": "온보딩 UX",
       "when": "튜토리얼·첫 동선을 설계할 때",
       "need": true
      },
      {
       "skill": "g-ux-06",
       "name": "접근성·가독성",
       "when": "대비·폰트·컬러블라인드를 점검할 때",
       "need": true
      },
      {
       "skill": "klv:ui-review",
       "name": "UI 휴리스틱 리뷰",
       "when": "game-ui 트랙으로 HUD·FTUE·상점 화면을 점검할 때",
       "need": true
      },
      {
       "skill": "klv:image-plan",
       "name": "이미지 제작 계획",
       "when": "Codex 이미지·에셋을 샘플先 생성·승인 추적할 때",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "g-client",
     "icon": "🛠️",
     "name": "게임 클라 (Unity)",
     "duty": "Unity로 구현·씬·성능·빌드를 책임진다.",
     "skills": [
      {
       "skill": "g-client-01",
       "name": "Unity 프로젝트 스켈레톤",
       "when": "씬·매니저·폴더·플레이스홀더 뼈대를 세울 때",
       "need": true
      },
      {
       "skill": "g-client-02",
       "name": "코어루프 구현",
       "when": "플레이 가능한 최소 루프를 구현할 때",
       "need": true
      },
      {
       "skill": "g-client-03",
       "name": "Unity UI 구현",
       "when": "uGUI·UI Toolkit·TextMeshPro로 화면을 만들 때",
       "need": true
      },
      {
       "skill": "g-client-04",
       "name": "ScriptableObject 데이터 아키텍처",
       "when": "설정·밸런스·콘텐츠를 SO로 구조화할 때",
       "need": true
      },
      {
       "skill": "g-client-05",
       "name": "Input System·카메라",
       "when": "신 Input System으로 조작·뷰를 짤 때",
       "need": true
      },
      {
       "skill": "g-client-06",
       "name": "Addressables·세이브",
       "when": "에셋 로딩·진행 저장/복원을 다룰 때",
       "need": true
      },
      {
       "skill": "g-client-07",
       "name": "Unity 프로파일러 최적화",
       "when": "드로콜·GC·배칭·메모리를 줄일 때",
       "need": true
      },
      {
       "skill": "g-client-08",
       "name": "Unity 모바일 빌드",
       "when": "Android/iOS·IL2CPP·플레이어 설정·빌드 자동화",
       "need": true
      },
      {
       "skill": "g-client-09",
       "name": "Steamworks 통합",
       "when": "Steam SDK·업적·클라우드 세이브·리더보드·디포 업로드·Steam Deck 검증",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "g-qa",
     "icon": "🧪",
     "name": "QA·테스터",
     "duty": "빌드·플레이를 검증하고 버그를 잡는다.",
     "skills": [
      {
       "skill": "g-qa-01",
       "name": "테스트 계획",
       "when": "무엇을 어떻게 검증할지 정할 때",
       "need": true
      },
      {
       "skill": "g-qa-02",
       "name": "플레이테스트 설계",
       "when": "실사용 피드백을 구조적으로 받을 때",
       "need": true
      },
      {
       "skill": "g-qa-03",
       "name": "회귀 테스트",
       "when": "변경이 기존을 깨지 않았는지 볼 때",
       "need": true
      },
      {
       "skill": "g-qa-04",
       "name": "버그 트리아지",
       "when": "버그를 심각도·우선순위로 분류할 때",
       "need": true
      },
      {
       "skill": "g-qa-05",
       "name": "디바이스 호환",
       "when": "여러 기기·해상도에서 검증할 때",
       "need": true
      }
     ],
     "rank": 3
    }
   ]
  },
  "web": {
   "name": "웹앱",
   "desc": "웹앱/SaaS 하나를 만들 때 소집하는 도메인 팀 (+횡단 실무).",
   "roles": [
    {
     "id": "w-pm",
     "icon": "🎬",
     "name": "프로덕트 매니저",
     "duty": "주요 워크플로우·범위를 정의한다.",
     "skills": [
      {
       "skill": "w-pm-01",
       "name": "핵심 워크플로우 정의",
       "when": "사용자가 끝내야 할 일을 정의할 때",
       "need": true
      },
      {
       "skill": "w-pm-02",
       "name": "페이지·라우트 인벤토리",
       "when": "필요한 화면·경로를 나열할 때",
       "need": true
      },
      {
       "skill": "w-pm-03",
       "name": "MVP 범위 컷",
       "when": "대시보드·관리자 범위 과잉을 자를 때",
       "need": true
      },
      {
       "skill": "w-pm-04",
       "name": "수용 기준 정의",
       "when": "완료를 측정 가능하게 만들 때",
       "need": true
      }
     ],
     "rank": 2
    },
    {
     "id": "w-frontend",
     "icon": "🖥️",
     "name": "웹 프론트엔드 (Next.js)",
     "duty": "Next.js·React로 라우트·페이지·UI 상태를 구현한다.",
     "skills": [
      {
       "skill": "w-frontend-01",
       "name": "Next.js 앱 셸·라우팅",
       "when": "App Router·레이아웃·서버/클라 경계를 세울 때",
       "need": true
      },
      {
       "skill": "w-frontend-02",
       "name": "React 컴포넌트 구현",
       "when": "재사용 컴포넌트를 만들 때",
       "need": true
      },
      {
       "skill": "w-frontend-03",
       "name": "shadcn/ui·Tailwind 구성",
       "when": "디자인 시스템을 컴포넌트로 구현할 때",
       "need": true
      },
      {
       "skill": "w-frontend-04",
       "name": "서버/클라 상태관리",
       "when": "React Query·서버액션·캐시를 다룰 때",
       "need": true
      },
      {
       "skill": "w-frontend-05",
       "name": "UX 상태 커버",
       "when": "로딩·빈·에러·성공·권한 상태를 채울 때",
       "need": true
      },
      {
       "skill": "w-frontend-06",
       "name": "폼·검증",
       "when": "React Hook Form·Zod로 입력·유효성을 구현할 때",
       "need": true
      },
      {
       "skill": "w-frontend-07",
       "name": "반응형·접근성·성능",
       "when": "화면크기·a11y·Core Web Vitals를 보장할 때",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "w-ux",
     "icon": "🎨",
     "name": "UX 디자이너",
     "duty": "정보구조·플로우·디자인 시스템.",
     "skills": [
      {
       "skill": "w-ux-01",
       "name": "정보 구조 설계",
       "when": "내비·계층·페이지 구조를 잡을 때",
       "need": true
      },
      {
       "skill": "w-ux-02",
       "name": "와이어프레임",
       "when": "페이지별 골격을 그릴 때",
       "need": true
      },
      {
       "skill": "w-ux-03",
       "name": "디자인 시스템",
       "when": "토큰·컴포넌트·패턴을 표준화할 때",
       "need": true
      },
      {
       "skill": "w-ux-04",
       "name": "인터랙션 설계",
       "when": "상태 전이·마이크로인터랙션을 설계할 때",
       "need": true
      },
      {
       "skill": "klv:ui-review",
       "name": "UI 휴리스틱 리뷰",
       "when": "web-ui 트랙으로 대시보드·폼·랜딩을 점검할 때",
       "need": true
      },
      {
       "skill": "frontend-polish",
       "name": "프론트엔드 폴리시",
       "when": "작동하는 웹 UI를 간격·정렬·상태·접근성·미세인터랙션으로 다듬어 완성도를 올릴 때",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "w-qa",
     "icon": "🧪",
     "name": "웹 QA",
     "duty": "웹앱 빌드를 테스트·호환·접근성·회귀로 검증한다.",
     "skills": [
      {
       "skill": "w-qa-01",
       "name": "테스트 계획",
       "when": "무엇을 어떻게 검증할지 정할 때",
       "need": true
      },
      {
       "skill": "w-qa-02",
       "name": "반응형·브라우저 호환",
       "when": "해상도·크로스브라우저를 검증할 때",
       "need": true
      },
      {
       "skill": "w-qa-03",
       "name": "접근성·WCAG 점검",
       "when": "a11y 기준 충족을 확인할 때",
       "need": true
      },
      {
       "skill": "w-qa-04",
       "name": "UX 상태·회귀 검증",
       "when": "로딩/빈/에러 + 변경 회귀를 볼 때",
       "need": true
      },
      {
       "skill": "w-qa-05",
       "name": "데이터 계약 준수 검증",
       "when": "API 응답·폼 유효성을 확인할 때",
       "need": true
      }
     ],
     "rank": 3
    }
   ]
  },
  "app": {
   "name": "모바일 앱",
   "desc": "모바일 앱 하나를 만들 때 소집하는 도메인 팀 (+횡단 실무).",
   "roles": [
    {
     "id": "a-pm",
     "icon": "🎬",
     "name": "프로덕트 매니저",
     "duty": "핵심 모바일 워크플로우·범위를 정의한다.",
     "skills": [
      {
       "skill": "a-pm-01",
       "name": "모바일 워크플로우 정의",
       "when": "주요 사용자 흐름·증명 요건을 정할 때",
       "need": true
      },
      {
       "skill": "a-pm-02",
       "name": "화면 인벤토리",
       "when": "필요한 화면·내비 스택을 나열할 때",
       "need": true
      },
      {
       "skill": "a-pm-03",
       "name": "MVP 범위 컷",
       "when": "플랫폼·네이티브 범위 과잉을 자를 때",
       "need": true
      }
     ],
     "rank": 2
    },
    {
     "id": "a-dev",
     "icon": "📱",
     "name": "모바일 개발자 (Flutter)",
     "duty": "Flutter로 앱 셸·화면·상태·네이티브를 구현한다.",
     "skills": [
      {
       "skill": "a-dev-01",
       "name": "Flutter 앱 셸·라우팅",
       "when": "MaterialApp·go_router·테마를 세울 때",
       "need": true
      },
      {
       "skill": "a-dev-02",
       "name": "위젯·화면 구현",
       "when": "Stateless/Stateful·커스텀 위젯으로 화면을 만들 때",
       "need": true
      },
      {
       "skill": "a-dev-03",
       "name": "상태관리 (Riverpod/Bloc)",
       "when": "앱 상태·DI를 구조화할 때",
       "need": true
      },
      {
       "skill": "a-dev-04",
       "name": "오프라인·로컬 영속",
       "when": "Isar/Drift·SharedPreferences로 저장·동기화할 때",
       "need": true
      },
      {
       "skill": "a-dev-05",
       "name": "플랫폼 채널·네이티브 연동",
       "when": "카메라·위치·생체인증 등 기능을 붙일 때",
       "need": true
      },
      {
       "skill": "a-dev-06",
       "name": "푸시·딥링크",
       "when": "FCM·앱 링크로 알림·외부 진입을 구현할 때",
       "need": true
      },
      {
       "skill": "a-dev-07",
       "name": "Flutter 빌드·성능",
       "when": "Android/iOS 빌드·위젯 리빌드·렌더 성능을 잡을 때",
       "need": true
      }
     ],
     "rank": 3
    },
    {
     "id": "a-qa",
     "icon": "🧪",
     "name": "디바이스 QA",
     "duty": "기기/OS·권한·성능을 검증한다.",
     "skills": [
      {
       "skill": "a-qa-01",
       "name": "디바이스 매트릭스",
       "when": "어떤 기기/OS를 검증할지 정할 때",
       "need": true
      },
      {
       "skill": "a-qa-02",
       "name": "권한·오프라인 테스트",
       "when": "권한·끊김·백그라운드를 검증할 때",
       "need": true
      },
      {
       "skill": "a-qa-03",
       "name": "성능 예산",
       "when": "앱 크기·구동·발열을 점검할 때",
       "need": true
      },
      {
       "skill": "a-qa-04",
       "name": "접근성",
       "when": "터치 타깃·스크린리더를 점검할 때",
       "need": true
      }
     ],
     "rank": 3
    }
   ]
  }
 },
 "_engine_note": "1차 엔진/스택: 게임=Unity, 앱=Flutter, 웹=Next.js(React)+shadcn/ui+Tailwind on Cloudflare Pages. 구현 역할(g-client/w-frontend/a-dev)은 이 스택에 네이티브. 2차(Unreal/Godot 등)는 필요 시 확장.",
 "_klv_note": "Brand: KLV(KarnelLabs Vault) = 역할 기반 운영 모델이자 오케스트레이터. 기획 atom = klv: op. klv:gate(출시 준비도)는 KLV 전속(분배 금지). gatecraft는 under-the-hood 엔진. gatecraft→klv 매핑은 80_Decisions/0002 참조.",
 "_rank_note": "rank: 1=CEO/CTO(역할표 밖), 2=리드/디렉터(도메인 결정권자), 3=실무. 겹치는 스킬을 쥔 agent끼리 충돌하면 토론→높은 rank가 판정(같은 도메인=그 리드, 도메인 넘으면 CTO, S급이면 CEO). 겹침은 제거 대상이 아니라 역할 간 건강한 긴장."
}