---
name: cpp-robotics-learner
description: |
  C++ 코드 사전(cpp_code_dictionary) 레포지토리의 모든 학습 자료를 생산하고 관리하는 스킬.
  AI 로보틱스를 최종 목표로 하는 7개월 28주 커리큘럼(C++ 기초 → Modern C++ → ROS2 → AI 모듈 → 로봇 완성)에 맞춰
  참고 코드, 예제, 채점 오답노트, Phase PRD를 정해진 디렉토리 구조로 자동 생성한다.
  로보틱스 외 범용 C++ 코드/패턴도 함께 보관·관리한다.

  아래 상황에서 반드시 이 스킬을 사용할 것:
  - "오늘 학습 자료 만들어줘", "예제 생성해줘", "참고 코드 만들어줘" 언급 시
  - "채점해줘", "오답노트 작성해줘", "내 코드 평가해줘" 언급 시
  - "Phase PRD 만들어줘", "프로젝트 기획서 작성해줘" 언급 시
  - "N주차 자료", "Phase N 학습", "오늘 C++ 공부" 언급 시
  - "참고 코드 업데이트해줘", "cheatsheet 갱신해줘" 언급 시
  - cpp_code_dictionary 레포지토리에서 작업 중일 때
---

# C++ 코드 사전 학습 관리 스킬

`cpp_code_dictionary` 레포지토리의 학습 자료를 자동으로 생산하고 관리한다.
AI 로보틱스를 최종 목표로 하되, 범용 C++ 코드와 패턴도 함께 축적한다.
총 4가지 산출물 유형이 있으며, 사용자의 현재 Phase/Week를 자동 감지하거나
명시적으로 전달받아 적절한 내용을 생성한다.

---

## 커리큘럼 맵

> 현재 Phase/Week 판단 시 이 표를 기준으로 한다.

| Phase | 주차 | 핵심 주제 | 키워드 |
|---|---|---|---|
| 1 | 1~2주 | C++ 환경 설정 + 기본 문법 I | install, g++, vscode, 자료형, cin/cout, if, switch, for, while |
| 1 | 3~4주 | 기본 문법 II — 함수 · 배열 · 문자열 | function, overloading, array, string, struct, namespace, scope |
| 1 | 5~6주 | 포인터 · 메모리 모델 | pointer, reference, smart_ptr, RAII, new/delete |
| 1 | 7~8주 | OOP · Modern C++17 | class, inheritance, lambda, auto, move, optional |
| 1 | 9~10주 | STL · 멀티스레딩 | vector, map, thread, mutex, atomic, chrono |
| 1 | 11~12주 | OpenCV C++ 입문 | Mat, VideoCapture, filter, contour, face_detection |
| 2 | 13~14주 | ROS2 Humble 기초 | node, topic, service, colcon, DDS, Gazebo |
| 2 | 15~16주 | rclcpp C++ 노드 작성 | publisher, subscriber, timer, QoS, lifecycle |
| 2 | 17주 | Navigation2 · SLAM | Nav2, costmap, RPLiDAR, path_planning |
| 3 | 18~19주 | YOLOv8 + TensorRT | ONNX, TensorRT, inference, detection_topic |
| 3 | 20~21주 | Whisper.cpp 음성 인식 | STT, wakeword, asr_topic, microphone |
| 3 | 22~23주 | llama.cpp · 로컬 LLM | GGUF, quantization, Qwen, command_parsing, TTS |
| 4 | 24~26주 | 전체 파이프라인 통합 | orchestrator, E2E, latency, ROS2_node |
| 4 | 27~28주 | 최적화 · 포트폴리오 | profiling, Velog, GitHub, 강의교안 |

---

## 디렉토리 구조

```
cpp_code_dictionary/            # 레포지토리 루트
├── docs/
│   └── setup_guide.md          # C++ 환경 설정 가이드 (학습자용)
├── refs/
│   ├── cpp_cheatsheet.cpp      # 누적 참고 코드 (Phase 전환마다 갱신)
│   └── snippets/               # 범용 C++ 패턴 스니펫 보관
├── exercises/
│   └── phase{N}/
│       └── week{NN}/
│           ├── grammar_{topic}.cpp     # 문법 예제
│           ├── project_{topic}.cpp     # 1시간 프로젝트
│           └── review_{topic}.md       # 채점 및 오답노트
├── prd/
│   └── phase{N}_project_prd.md        # Phase 최종 프로젝트 PRD
└── .claude/
    └── skills/
        └── cpp-robotics-learner/       # 이 스킬 위치
            ├── SKILL.md
            └── references/
```

---

## 산출물 유형 0 — 환경 설정 가이드 (setup_guide.md)

### 트리거
- "환경 설정해줘", "C++ 설치해줘", "개발 환경 구축해줘", "셋업 가이드 만들어줘"
- 1주차 예제 요청 시 `docs/setup_guide.md` 파일이 없으면 자동으로 먼저 생성

### 동작

**Step 1.** `docs/setup_guide.md` 존재 여부 확인
- 없으면 생성, 있으면 Phase 진행에 따라 추가 도구 설치 섹션을 append

**Step 2.** 학습자의 OS 환경 파악 (명시 없으면 Ubuntu 22.04 기준으로 작성, Windows WSL2 병기)

**Step 3.** 파일 생성

### 파일 형식

> 📄 `references/templates/setup_guide_template.md` 참조


**Step 4.** 파일 저장: `docs/setup_guide.md`

**Step 5.** 대화창에 "환경 설정 가이드를 생성했습니다. `docs/setup_guide.md`를 참고하세요." 출력

---

## 산출물 유형 1 — 참고 코드 (cpp_cheatsheet.cpp)

### 트리거
- "참고 코드 만들어줘", "cheatsheet 갱신해줘", Phase 전환 시

### 동작

**Step 1.** `refs/cpp_cheatsheet.cpp` 파일 존재 여부 확인
- 없으면 새로 생성, 있으면 현재 Phase 섹션을 추가/갱신

**Step 2.** 현재까지 학습한 모든 주제의 핵심 패턴을 누적 작성

**Step 3.** 파일 저장 후 변경된 섹션만 사용자에게 출력

### 파일 형식

```cpp
// =============================================================================
// C++ 로보틱스 학습 참고 코드 (cpp_cheatsheet.cpp)
// Phase N까지 누적 | 최종 갱신: YYYY-MM-DD
// =============================================================================

// ─── Phase 1 · Week 1-2: 포인터 & 스마트 포인터 ──────────────────────────────
#include <memory>

// [기본 포인터 vs 스마트 포인터]
void smart_ptr_basics() {
    // ❌ raw pointer (관리 필요)
    int* raw = new int(42);
    delete raw;

    // ✅ unique_ptr (단독 소유, 자동 해제)
    auto uptr = std::make_unique<int>(42);

    // ✅ shared_ptr (공유 소유)
    auto sptr = std::make_shared<int>(42);
}
// ... (주제별 패턴 코드)
```

**작성 원칙:**
- 각 패턴마다 Python 동등 코드 주석으로 병기 (`# Python:`)
- `// ✅ 권장` / `// ❌ 비권장` 표기 활용
- Phase 경계마다 구분선(`// ─── Phase N ...`) 추가
- 로보틱스 실전 활용 맥락 주석 포함 (`// 로봇 실전: ...`)

---

## 산출물 유형 2 — 학습 예제 (grammar + project)

### 트리거
- "오늘 예제 만들어줘", "N주차 예제", "학습 자료 생성해줘"

### 동작

**Step 1.** 현재 Phase/Week 파악
- 사용자가 명시하면 그대로 사용
- 명시 없으면 `exercises/` 디렉토리에서 마지막 주차 탐지 후 다음 주차로 추정

**Step 2.** 커리큘럼 맵에서 해당 주차의 핵심 주제와 키워드 확인

**Step 3.** 두 파일 생성

#### 파일 A: `grammar_{topic}.cpp` — 문법 예제 (~30분 분량)

```cpp
// =============================================================================
// [Phase N · Week NN] {주제명} — 문법 예제
// 목표: {이 파일로 익혀야 할 핵심 1~2가지}
// 예상 시간: 30분
// =============================================================================

// ── 예제 1: {소주제} ──────────────────────────────────────────────────────────
// 설명: (왜 이게 필요한지, 로보틱스에서 어떤 상황에 쓰이는지)
// Python 동등: (Python으로 표현하면 어떻게 되는지)

#include <...>

// [직접 실습] 아래 TODO를 완성하세요
// TODO 1: ...
// TODO 2: ...

int main() {
    // 완성된 예시 코드
}
```

#### 파일 B: `project_{topic}.cpp` — 1시간 프로젝트

```cpp
// =============================================================================
// [Phase N · Week NN] {주제명} — 미니 프로젝트
// 목표: {오늘 배운 문법으로 실제로 동작하는 것 하나 만들기}
// 예상 시간: 60분
// 난이도: ⭐⭐ (Phase 1 기준)
// =============================================================================

// 프로젝트 설명:
// {구체적인 프로젝트 설명. 로보틱스 맥락과 연결}
//
// 완성 기준:
// ✅ 기준 1: ...
// ✅ 기준 2: ...
// ✅ 기준 3: ...
//
// 힌트: (막혔을 때만 열어보세요)
// 힌트 1: ...

// [뼈대 코드 - 여기서부터 작성하세요]
#include <...>

// TODO: 아래를 채워서 완성하세요
```

**생성 원칙:**
- 문법 예제는 `// TODO` 빈칸 방식으로 능동 학습 유도
- 프로젝트는 완성 기준 3개를 명시
- Phase 1: 순수 C++ / Phase 2: ROS2 연동 / Phase 3: AI 모듈 포함
- 힌트는 접혀있는 주석 블록으로 제공 (스포일러 방지)

**Step 4.** 파일 저장 경로: `exercises/phase{N}/week{NN}/`

---

## 산출물 유형 3 — 채점 및 오답노트 (review_{topic}.md)

### 트리거
- "채점해줘", "오답노트 작성해줘", 사용자가 코드를 붙여넣으며 평가 요청 시

### 동작

**Step 1.** 사용자 제출 코드 수신
- 파일 경로로 제출하면 읽어서 분석
- 대화창에 붙여넣으면 그대로 분석

**Step 2.** 아래 기준으로 채점 (100점 만점)

| 채점 기준 | 배점 |
|---|---|
| 완성 기준 충족 (각 기준당 동일 배점) | 60점 |
| Modern C++ 관용 표현 사용 | 15점 |
| 메모리 안전성 (스마트 포인터, RAII) | 10점 |
| 코드 가독성 · 주석 품질 | 10점 |
| 로보틱스 맥락 이해도 | 5점 |

**Step 3.** `review_{topic}.md` 파일 생성

### 파일 형식

```markdown
# [Phase N · Week NN] {주제명} — 채점 결과

> 날짜: YYYY-MM-DD
> 점수: **{점수} / 100** {이모지}
> 등급: {S(95↑) / A(85↑) / B(70↑) / C(60↑) / F}

---

## ✅ 완성 기준 충족 여부

| 기준 | 결과 | 배점 |
|---|---|---|
| 기준 1 | ✅ 충족 | 20/20 |
| 기준 2 | ⚠️ 부분 충족 | 10/20 |
| 기준 3 | ❌ 미충족 | 0/20 |

---

## 🔴 오답 / 개선 필요

### Issue 1 — {문제명}

**제출 코드:**
```cpp
// 사용자가 작성한 문제 코드
```

**문제점:**
(무엇이 잘못됐는지, 왜 문제인지)

**개선 코드:**
```cpp
// 올바른 코드
```

**핵심 개념:**
(이 이슈에서 익혀야 할 핵심 C++ 개념 1줄 요약)

---

## 🟡 아쉬운 점 (감점 없음, 더 나아지려면)

### Tip 1 — {더 나은 방법}
(Modern C++ 관용 표현, 로보틱스 실전 팁 등)

---

## 💡 이번 주 핵심 정리

> {오늘 학습에서 가장 중요한 개념 2~3문장 요약}

---

## 📌 다음 단계 예고

> 다음 주차({N+1}주)에서는 {다음 주제}를 다룰 예정입니다.
> 오늘 배운 {개념}이 {다음 주제}에서 이렇게 연결됩니다: ...
```

**Step 4.** 파일 저장: `exercises/phase{N}/week{NN}/review_{topic}.md`

**Step 5.** 점수 및 핵심 피드백을 대화창에 요약 출력

---

## 산출물 유형 4 — Phase 프로젝트 PRD

### 트리거
- "Phase PRD 만들어줘", "프로젝트 기획서 작성해줘", Phase 마지막 주차 도달 시

### 동작

**Step 1.** 해당 Phase의 학습 내용 전체 파악
- `exercises/phase{N}/` 하위 모든 파일 스캔
- 학습한 주제, 완성 기준 달성률, 오답 패턴 분석

**Step 2.** PRD 생성

### 파일 형식

> 📄 `references/templates/prd_template.md` 참조

Language  : C++17
Build     : CMake 3.20+
Libraries : (Phase별 상이)
OS        : Ubuntu 22.04
Hardware  : (Phase 3부터 Jetson Orin Nano)
```

---

## 4. 디렉토리 구조

```
project_{phase_name}/
├── CMakeLists.txt
├── include/
│   └── {헤더 파일}
├── src/
│   └── {소스 파일}
└── README.md
```

---

## 5. 구현 단계 (마일스톤)

| 단계 | 목표 | 예상 시간 | 완료 기준 |
|---|---|---|---|
| 1단계 | ... | 2시간 | ... |
| 2단계 | ... | 3시간 | ... |
| 3단계 | ... | 2시간 | ... |

---

## 6. 평가 기준

| 항목 | 배점 | 기준 |
|---|---|---|
| 필수 기능 구현 | 60점 | 위 MVP 기능 모두 동작 |
| 코드 품질 | 20점 | Modern C++ 관용 표현, RAII |
| 문서화 | 10점 | README + 주석 |
| 로보틱스 연계성 | 10점 | 이후 Phase 연결 고려 |

---

## 7. 참고 자료

- (이 Phase 학습 중 참고한 핵심 문서/코드 링크)
- `refs/cpp_cheatsheet.cpp` — 현재 Phase까지 참고 코드

---

## 8. 다음 Phase 연결 포인트

> 이 프로젝트에서 만든 {컴포넌트}는 Phase {N+1}에서 {어떻게 활용}됩니다.
```

**Step 3.** 파일 저장: `prd/phase{N}_project_prd.md`

---

## 공통 규칙

### C++ 코드 스타일 (전 파일 공통)
- 표준: **C++17** (`-std=c++17`)
- 명명: `snake_case` (변수/함수), `PascalCase` (클래스)
- 스마트 포인터 우선 (`unique_ptr` > `shared_ptr` > raw pointer)
- RAII 패턴 기본 적용
- `#include` 순서: 표준 라이브러리 → 서드파티 → 로컬
- 컴파일 경고 플래그: `-Wall -Wextra -Wpedantic`

### Phase별 허용 라이브러리
| Phase | 허용 라이브러리 |
|---|---|
| 1 | C++ 표준 라이브러리, OpenCV 4.x |
| 2 | + ROS2 Humble (rclcpp, std_msgs, geometry_msgs, nav_msgs) |
| 3 | + TensorRT, whisper.cpp, llama.cpp |
| 4 | 전체 스택 통합 |

### 파일명 규칙
- `grammar_{topic}.cpp` — 문법 예제 (topic은 영어 snake_case)
- `project_{topic}.cpp` — 미니 프로젝트
- `review_{topic}.md` — 채점 오답노트
- `phase{N}_project_prd.md` — PRD
- `refs/snippets/{category}_{topic}.cpp` — 범용 C++ 패턴 스니펫 (커리큘럼 외 보관)

### 진행 상황 추적
- 새 파일 생성 후 항상 `exercises/` 구조를 탐색해 현재 진행률 계산
- "완료 주차 / 전체 28주 (Phase N/4)" 형태로 출력

---

## 참고 파일

- `references/curriculum_map.md` — 전체 커리큘럼 상세 내용
- `references/cpp17_patterns.md` — Modern C++ 핵심 패턴 레퍼런스
- `references/ros2_cheatsheet.md` — ROS2 rclcpp 주요 API (Phase 2 이후)
- `references/templates/setup_guide_template.md` — 환경 설정 가이드 파일 형식
- `references/templates/prd_template.md` — Phase PRD 파일 형식
