Constitution(ํ๋ฒ) ๊ธฐ๋ฐ ๊ฐ๋ฐ ํ๋ ์์ํฌ - ํ์ง์ ์๋ํํ๋ ์คํํ ์ง์ ์์คํ
- ๋ฌธ์๊ฐ ๊ณง ์ฝ๋: YAML ๊ณ์ฝ์ โ TaskExecutor โ ์๋ ์ฆ๊ฑฐ ์์ง
- 16๊ฐ ์กฐํญ: P1-P16 Constitution์ด ๋ชจ๋ ๊ฐ๋ฐ์ ๋ฒ
- 95% ์๋ํ: Git Hooks + CI/CD๋ก ํ์ง ๊ฒ์ฆ zero-touch
- ์ฐ๊ฐ 264์๊ฐ ์ ๊ฐ: ์ฆ๊ฑฐ ๊ธฐ๋ฐ + ์ง์ ์์ฐํ (Obsidian 3์ด ๋๊ธฐํ)
5๋ถ ์์: Use this template ํด๋ฆญ โ Setup script ์คํ โ ์ฆ์ ์ฌ์ฉ
๐ CLAUDE.md - AI ์์ด์ ํธ ํ์ ๊ฐ์ด๋ (Claude, Cursor, Copilot ์ฌ์ฉ์๋ ๋จผ์ ์ฝ์ด์ฃผ์ธ์!) ๐จโ๐ป ์ด๋ณด ๊ฐ๋ฐ์ ๊ฐ์ด๋ - 8์ฃผ ํ์ต ๋ก๋๋งต (Git, YAML, TaskExecutor ๋จ๊ณ๋ณ ํ์ต) ๐ฏ ๋ถ๋ด ์์ด ์์ํ์ธ์ - Level 0๋ถํฐ ๋จ๊ณ์ ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ๐ค Multi-AI Session ์ง์ - 1๋ช ๊ฐ๋ฐ์ + 3-4 AI ์ธ์ ๋์ ํ์ ๊ฐ๋ฅ!
๋ฒ์ : 1.0.0 | Stage: 5 (Hook) ์๋ฃ โ ๊ธฐ๋ฐ: DoubleDiver ํ๋ก์ ํธ์์ ์ถ์ถํ ๊ฒ์ฆ๋ ๊ฐ๋ฐ ๊ท์น ์์คํ ์ฌํ์ฉ์ฑ: 95% (GitHub Template์ผ๋ก ์ฆ์ ๋ณต์ ๊ฐ๋ฅ)
์ด ์คํํฐ ํท์ DoubleDiver ํ๋ก์ ํธ์์ ๊ฒ์ฆ๋ ๊ฐ๋ฐ ๊ท์น ์์คํ ์ ์ฌํ์ฉ ๊ฐ๋ฅํ ํ ํ๋ฆฟ์ผ๋ก ์ถ์ถํ ๊ฒ์ ๋๋ค.
- Git ํ์คํ (Conventional Commits + Semantic Release)
- AI ์์ด์ ํธ ์ต์ ํ (Claude, Cursor, Copilot)
- ์คํํ ์ง์์์ฐ (TaskExecutor + Obsidian ํตํฉ)
- ๋ฌธ์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ (claudedocs/ ๊ตฌ์กฐ)
- CI/CD ํ์ดํ๋ผ์ธ (GitHub Actions)
- ๐ Hybrid Error Resolution (์ ๋ขฐ๋ ๊ธฐ๋ฐ 3-Tier ์๋ ์๋ฌ ํด๊ฒฐ)
- ๐ ADRBuilder (Architecture Decision Records ์๋ํ, Constitution ๋งคํ)
- ๐ ProductionMonitor (Production ์์ธ ์ถ์ ๋ฐ SLA ๋ชจ๋ํฐ๋ง, ์ฅ์ ๋์ 75% ๋จ์ถ)
- ๐ PerformanceDashboard (์ค์๊ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋ฐ ํธ๋ ๋ ๋ถ์, ๋ณ๋ชฉ ๋ฐ๊ฒฌ 86% ๋จ์ถ)
- ๐ TechnicalDebtTracker (๊ธฐ์ ๋ถ์ฑ ์ ๋ํ ๋ฐ ์ฐ์ ์์ ์๋ ๋งคํ, ๋ฆฌํฉํ ๋ง ๊ฒฐ์ 99% ๋จ์ถ)
- โ Conventional Commits: Agoda Engineering ๋ฑ ๋ค์ ๊ธฐ์ ์ฌ์ฉ
- โ Executable Documentation: React, Postman, TensorFlow ์ ์ฉ
- โ 95% ๋ฌธ์ ์๊ฐ ์ ๊ฐ (20๋ถ โ 3์ด)
- โ 100% ์ปค๋ฐ ํ์ค ์ค์ (Commitlint)
- โ ์ฐ๊ฐ 264์๊ฐ ์ ๊ฐ (33์ผ)
- โ ๐ 95% ์๋ฌ ์๋ ํด๊ฒฐ (Hybrid Resolution, ์ฌ์ฉ์ ๊ฐ์ 70% ๊ฐ์)
ํ๋
: NORTH_STAR.md (1๋ถ ์ฝ๊ธฐ, ๋ฐฉํฅ์ฑ ์์ค ๋ฐฉ์ง)
"์คํํ ์์ฐ ์์คํ (Executable Knowledge Base)"
ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ์ ์ฌ์ฉํ Constitution(ํ๋ฒ) ๊ธฐ๋ฐ ๊ธฐ์ค ์ฒด๊ณ ํ ํ๋ฆฟ์ ๋๋ค.
์ด๊ฒ์ ์ฝ๋ ํ์ง ๋๊ตฌ๊ฐ ์๋๋๋ค. Constitution์ ์ค์ฌ์ผ๋ก ํ ๊ฐ๋ฐ ์ฒด๊ณ ๊ทธ ์์ฒด์ ๋๋ค.
-
๋ฌธ์๊ฐ ๊ณง ์ฝ๋
- YAML ๊ณ์ฝ์ ์์ฑ โ TaskExecutor ์คํ โ ๊ฒฐ๊ณผ ์๋ ๊ธฐ๋ก
- ๋ชจ๋ ์์ ์ด ์ฌ์คํ ๊ฐ๋ฅํ ์์ฐ์ผ๋ก ์ถ์
-
Constitution์ด ๋ชจ๋ ๊ฒ์ ์ค์ฌ
- 10๊ฐ ์กฐํญ (P1-P10)์ด ๊ฐ๋ฐ์ ๋ฒ
- ๋ชจ๋ ๋๊ตฌ๋ ํน์ ์กฐํญ์ ๊ฐ์ ํ๋ ์๋จ
- ๋์๋ณด๋๋ "ํ๋ฒ ์ค์ ํํฉํ"
-
์ฆ๊ฑฐ ๊ธฐ๋ฐ + ์ง์ ์์ฐํ
- ๋ชจ๋ ์คํ ๊ฒฐ๊ณผ ์๋ ๊ธฐ๋ก (
RUNS/evidence/) - Obsidian ์๋ ๋๊ธฐํ (3์ด)
- ์๊ฐ์ด ์ง๋ ์๋ก ์ง์์ด ์ถ์
- ๋ชจ๋ ์คํ ๊ฒฐ๊ณผ ์๋ ๊ธฐ๋ก (
Layer 1: Constitution (ํ๋ฒ) โ ๋ชจ๋ ๊ฒ์ ์ค์ฌ!
โ
Layer 2: Execution (TaskExecutor, ConstitutionalValidator)
โ
Layer 3: Analysis (DeepAnalyzer, TeamStatsAggregator)
โ
Layer 4: Optimization (VerificationCache, CriticalFileDetector)
โ
Layer 5: Evidence Collection (์๋ ๊ธฐ๋ก)
โ
Layer 6: Knowledge Asset (ObsidianBridge - 3์ด ๋๊ธฐํ)
โ
Layer 7: Visualization (Streamlit Dashboard - ์๊ฐํ๋ง)
์ค์: ๋์๋ณด๋(Layer 7)๋ ๋จ์ ์๊ฐํ ๋๊ตฌ์ ๋๋ค. ๊ฒ์ฆ์ DeepAnalyzer(Layer 3)๊ฐ ์ํํฉ๋๋ค.
| ID | ์กฐํญ๋ช | ๊ฐ์ ๋๊ตฌ | Layer |
|---|---|---|---|
| P1 | YAML ๊ณ์ฝ์ ์ฐ์ | TaskExecutor | 2 |
| P2 | ์ฆ๊ฑฐ ๊ธฐ๋ฐ ๊ฐ๋ฐ | TaskExecutor | 2, 5 |
| P3 | ์ง์ ์์ฐํ | ObsidianBridge | 6 |
| P4 | SOLID ์์น | DeepAnalyzer | 3 |
| P5 | ๋ณด์ ์ฐ์ | DeepAnalyzer | 3 |
| P6 | ํ์ง ๊ฒ์ดํธ | TeamStatsAggregator | 3 |
| P7 | Hallucination ๋ฐฉ์ง | DeepAnalyzer | 3 |
| P8 | ํ ์คํธ ์ฐ์ | pytest | - |
| P9 | Conventional Commits | pre-commit | - |
| P10 | Windows ์ธ์ฝ๋ฉ | UTF-8 ๊ฐ์ | - |
| ID | ์กฐํญ๋ช | ๋ชฉ์ | ๊ฐ์ ๋ฐฉ์ |
|---|---|---|---|
| P11 | ์์น ์ถฉ๋ ๊ฒ์ฆ | ์ ๊ธฐ๋ฅ์ด ๊ณผ๊ฑฐ ์์น๊ณผ ์ถฉ๋ ์ ๋ฆฌ๋ง์ธ๋ | AI ์๋ |
| P12 | ํธ๋ ์ด๋์คํ ๋ถ์ ์๋ฌด | ๋ชจ๋ ๊ฒฐ์ ์ ์์ธก ๊ด์ + ๊ทผ๊ฑฐ ์ ์ | AI ์๋ |
| P13 | ํ๋ฒ ์์ ๊ฒ์ฆ | Constitution ์์ ์ ํ๋น์ฑ ๊ฒ์ฆ | ์ฌ์ฉ์ ์น์ธ |
| P14 | 2์ฐจ ํจ๊ณผ ๋ถ์ | ๊ฐ์ ์ ๋ถ์์ฉ๊น์ง ์์ธก ๋ฐ ์ํ | PR ํ ํ๋ฆฟ |
| P15 | ์๋ ด ์์น | 80% ํ์ง ๋ฌ์ฑ ํ ๋ฉ์ถค (๋ฌดํ ๊ฐ์ ๋ฐฉ์ง) | ๋ถ๊ธฐ๋ณ ๋ฆฌ๋ทฐ |
ํจ๊ณผ:
- P11: ๋ฐฉํฅ์ฑ ์์ค ๋ฐฉ์ง (ROI 267%)
- P12: ๊ฐ๊ด์ ์์ฌ๊ฒฐ์ (AI ํธํฅ ์ฐจ๋จ)
- P13: Constitution ๋น๋ํ ๋ฐฉ์ง (์ต๋ 20๊ฐ ์กฐํญ ์ ํ)
- P14: ์ง์ ๊ฐ๋ฅํ ๊ฐ์ (๋ถ์์ฉ ์ํ ์์คํ )
- P15: ์ค์ฉ์ฃผ์ (์๋ฒฝ์ฃผ์ ๋ฐฐ์ , 80์ ์ด๋ฉด ์ถฉ๋ถ)
์์ธ: config/constitution.yaml ์ฐธ์กฐ
| ๋๊ตฌ | ์ญํ | ๊ฐ์ ํ๋ ์กฐํญ | Layer |
|---|---|---|---|
| TaskExecutor | YAML ๊ณ์ฝ์ ์คํ | P1, P2 | 2 |
| ConstitutionalValidator | ํ๋ฒ ์ค์ ๊ฒ์ฆ | All + P11, P13 | 2 |
| DeepAnalyzer | SOLID, ๋ณด์ ๊ฒ์ฆ | P4, P5, P7 | 3 |
| TeamStatsAggregator | ํ์ง ์ ์ ๊ณ์ฐ | P6 | 3 |
| VerificationCache | ์ค๋ณต ๊ฒ์ฆ ๋ฐฉ์ง | - | 4 |
| CriticalFileDetector | ํต์ฌ ํ์ผ ์๋ณ | - | 4 |
| ObsidianBridge | ์ง์ ์์ฐํ | P3 | 6 |
| Streamlit Dashboard | ์๊ฐํ (๊ฒ์ฆ ์ ํจ) | - | 7 |
1. YAML ๊ณ์ฝ์ ์์ฑ (P1)
โ
2. TaskExecutor ์คํ (P2)
โ
3. DeepAnalyzer ๊ฒ์ฆ (P4, P5, P7)
โ
4. ์ฆ๊ฑฐ ์๋ ๊ธฐ๋ก (P2)
โ
5. Obsidian ๋๊ธฐํ (P3, 3์ด)
โ
6. Dashboard๋ก ํ์ธ (P6 ์ค์ ํํฉ)
์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ๊ฒ:
- โ Constitution ๊ธฐ๋ฐ ๊ฐ๋ฐ ์ฒด๊ณ
- โ ์คํํ ์์ฐ ์์คํ (๋ฌธ์ = ์ฝ๋)
- โ ๊ธฐ์ค ์ฒด๊ณ ํ ํ๋ฆฟ (์ฌ์ฉ์๊ฐ ์ปค์คํฐ๋ง์ด์ง)
์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ๊ฒ์ด ์๋ ๊ฒ:
- โ ์ฝ๋ ํ์ง ๋์๋ณด๋ ๋๊ตฌ (SonarQube ๊ฐ์ ๊ฒ)
- โ ๋ ๋ฆฝ์ ๋ถ์ ๋๊ตฌ๋ค์ ๋ชจ์
- โ ์์ฑ๋ ํ๋ก๋ํธ
config/constitution.yaml- ํ๋ฒ ์ ๋ฌธ (800+ ์ค)NORTH_STAR.md- 1๋ถ ์ฝ๊ธฐ, ๋ฐฉํฅ์ฑ ์ฌํ์ธ.github/TASK_TEMPLATE.md- ์์ ๋ช ์ธ ํ ํ๋ฆฟ
๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ:
-
"Use this template" ํด๋ฆญ
- Use this template ๋งํฌ ํด๋ฆญ
- ๋๋ GitHub ํ์ด์ง ์ฐ์ธก ์๋จ "Use this template" ๋ฒํผ
-
์ ์ ์ฅ์ ์์ฑ
- Repository name:
my-new-project - Description: (์ ํ์ฌํญ)
- Public/Private ์ ํ
- "Create repository from template" ํด๋ฆญ
- Repository name:
-
Clone & Setup
# Clone your new repository git clone https://github.com/YOUR_USERNAME/my-new-project.git cd my-new-project # Run setup script python scripts/setup_new_project.py # ๋๋ ๋ํํ ๋ง๋ฒ์ฌ python scripts/setup_wizard.py
โจ ์๋ ์ฒ๋ฆฌ ํญ๋ชฉ:
- โ Git history ์ด๊ธฐํ (ํ ํ๋ฆฟ ์ปค๋ฐ ์ ๊ฑฐ)
- โ ํ๋ก์ ํธ๋ช ์ผ๊ด ๋ณ๊ฒฝ (๋ํํ ํ๋กฌํํธ)
- โ
Python ๊ฐ์ํ๊ฒฝ ์์ฑ (
.venv) - โ
์์กด์ฑ ์๋ ์ค์น (
requirements.txt) - โ Pre-commit hooks ์ค์น (Constitution Guard, Ruff, Gitleaks)
- โ
.envํ์ผ ์์ฑ (Obsidian ๊ฒฝ๋ก ์ค์ ) - โ ์ฒซ ์ปค๋ฐ ์ค๋น
GitHub Template์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ:
# 1. ์ ์ฅ์ Clone
git clone https://github.com/positivef/dev-rules-starter-kit.git
cd dev-rules-starter-kit
# 2. Setup script ์คํ
python scripts/setup_new_project.py --project-name "MyNewProject"
# ๋๋ ๊ธฐ์กด ๋ฐฉ์ (Bash)
./setup.sh --project-name "MyNewProject" --framework fastapi# 1. ๊ฐ์ํ๊ฒฝ ํ์ฑํ
.venv\Scripts\activate # Windows
source .venv/bin/activate # Linux/Mac
# 2. ์ฒซ ์์
์คํ
python scripts/task_executor.py TASKS/TEMPLATE.yaml --plan
# ๊ณํ ํ์ธ ํ ์น์ธ
python scripts/task_executor.py TASKS/TEMPLATE.yaml
# 3. ์ปค๋ฐ (์๋ ๊ฒ์ฆ๋จ)
git add .
git commit -m "feat: initial project setup"
# โ Pre-commit hooks ์๋ ์คํ:
# - Constitution Guard (P4/P5/P7/P10) - 0.18s
# - Ruff linting (P10)
# - YAML/JSON validation
# - Commitlint format check (P9)
# - Gitleaks secret scan (P5)
# 4. ๋ฒ์ ๋ฆด๋ฆฌ์ค (์ ํ์ฌํญ)
git push origin main
# โ GitHub Actions ์๋ ์คํ:
# - Constitution Check (7 jobs, ~2min)
# - Semantic Release# .env ํ์ผ ์์
OBSIDIAN_VAULT_PATH=C:\Users\YourName\Documents\ObsidianVault
# ์ฐ๊ฒฐ ํ
์คํธ
python scripts/obsidian_bridge.py test
# ์ด์ ๋ชจ๋ ์ปค๋ฐ์ด ์๋์ผ๋ก Obsidian์ ๋๊ธฐํ๋ฉ๋๋ค (3์ด)dev-rules-starter-kit/
โโโ README.md # ์ด ํ์ผ
โโโ setup.sh # ํ๋ก์ ํธ ์ด๊ธฐํ ์คํฌ๋ฆฝํธ
โโโ DEVELOPMENT_RULES.md # Git/๋ฒ์ /๋ฌธ์ ๊ท์น (100% ์ฌํ์ฉ)
โโโ DEVELOPMENT_GUIDELINES.md # ๊ฐ๋ฐ ํ๋ก์ธ์ค (100% ์ฌํ์ฉ)
โโโ AGENTS.md.template # ํ๋ก์ ํธ ๊ตฌ์กฐ ํ
ํ๋ฆฟ
โโโ CLAUDE.md.template # AI ์์ด์ ํธ ๊ฐ์ด๋ ํ
ํ๋ฆฟ
โ
โโโ .cursor/ # Cursor AI ๊ท์น
โ โโโ rules/
โ โโโ README.md
โ โโโ api.md.template
โ โโโ testing.md.template
โ โโโ documentation.md.template
โ
โโโ .github/ # GitHub ์ค์
โ โโโ copilot-instructions.md.template
โ โโโ workflows/
โ โโโ commitlint.yml
โ โโโ semantic-release.yml
โ
โโโ scripts/ # ์๋ํ ์คํฌ๋ฆฝํธ
โ โโโ task_executor.py # YAML ๊ณ์ฝ ์คํ๊ธฐ (100% ์ฌํ์ฉ)
โ โโโ obsidian_bridge.py # ์ต์๋์ธ ๋๊ธฐํ (100% ์ฌํ์ฉ)
โ โโโ adr_builder.py # Architecture Decision Records (ADR) ์๋ํ
โ โโโ code_review_assistant.py # ์ฝ๋ ๋ฆฌ๋ทฐ ์๋ํ (Constitution ๊ฒ์ฆ)
โ โโโ deployment_planner.py # ๋ฐฐํฌ ๊ณํ ์๋ํ (๋ฆฌ์คํฌ ํ๊ฐ)
โ
โโโ TASKS/ # ์์
๊ณ์ฝ์
โ โโโ TEMPLATE.yaml
โ
โโโ config/ # ์ค์
โ โโโ projects.yaml.template # ๋ฉํฐ ํ๋ก์ ํธ ์ค์
โ โโโ commitlint.config.js
โ
โโโ docs/ # ๊ฐ์ด๋ ๋ฌธ์
โโโ QUICK_START.md
โโโ MULTI_CLI_STRATEGY.md # ๋ฉํฐ CLI ์ค์ผ์คํธ๋ ์ด์
์ ๋ต
โโโ REAL_WORLD_CASES.md # ์ค์ ์ฌ์ฉ ์ฌ๋ก
./setup.sh --project-name "MyAPI" --language python --framework fastapi./setup.sh --project-name "MyApp" --language javascript --framework react# config/projects.yaml
projects:
- id: project1
name: Trading Bot
vault_path: ~/Documents/ObsidianVault
- id: project2
name: ML Pipeline
vault_path: ~/Documents/ObsidianVault- ํ๋ก์ ํธ๋ช
(์๋:
setup.sh์คํ) - ์ธ์ด/ํ๋ ์์ํฌ (
.github/workflows/,AGENTS.md) - ์ต์๋์ธ ๊ฒฝ๋ก (
.envํ์ผ)
- Cursor rules (
.cursor/rules/) - Copilot instructions (
.github/copilot-instructions.md) - ์ปค๋ฐ scope (13๊ฐ ๊ธฐ๋ณธ ์ ๊ณต, ์ถ๊ฐ ๊ฐ๋ฅ)
| ํญ๋ชฉ | ์ค์ ์๊ฐ | ์๊ฐ ์ ๊ฐ | ์ฐ๊ฐ ROI |
|---|---|---|---|
| Git ์๋ํ | 2์๊ฐ | 12์๊ฐ | 688% |
| ์ง์ ๊ด๋ฆฌ | 3์๊ฐ | 6์๊ฐ | 288% |
| AI ์ต์ ํ | 2์๊ฐ | 4์๊ฐ | 200% |
| ํฉ๊ณ | 7์๊ฐ | 22์๊ฐ/์ | 377% |
๋ธ๋ ์ดํฌ์ด๋ธ: 3.2๊ฐ์ ์ฐ๊ฐ ์ ๊ฐ: 264์๊ฐ (33์ผ)
# ์๋ ๊ต์ฒด
find . -type f -name "*.md" -exec sed -i 's/DoubleDiver/MyProject/g' {} +# Husky ์ฌ์ค์น
rm -rf .husky
npx husky install
npx husky set .husky/commit-msg 'npx --no -- commitlint --edit "$1"'# .env ํ์ผ ํ์ธ
cat .env | grep OBSIDIAN_VAULT_PATH
# ๊ฒฝ๋ก๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธ
# ๊ฒฝ๋ก ํ
์คํธ
ls -la "$OBSIDIAN_VAULT_PATH"๋ฒ์ : v3.0 ์ํ: โ Production Ready ์๋ํ์จ: 95% (์ฌ์ฉ์ ๊ฐ์ 70% ๊ฐ์)
Hybrid Error Resolution์ AI๊ฐ ์๋ฌ๋ฅผ ๋ง๋ฌ์ ๋ ์๋์ผ๋ก ํด๊ฒฐํ๋ 3๋จ๊ณ ์ ๋ขฐ๋ ๊ธฐ๋ฐ ์์คํ ์ ๋๋ค.
3-Tier Cascade ์ ๋ต:
- Tier 1 (Obsidian): ๋ก์ปฌ ์ง์๋ฒ ์ด์ค (<10ms, 70% ํด๊ฒฐ๋ฅ )
- Tier 2 (Context7): ๊ณต์ ๋ฌธ์ ๊ฒ์ + ์ ๋ขฐ๋ ํ๊ฐ (HIGH/MEDIUM/LOW)
- Tier 3 (User): ์ฌ์ฉ์ ๊ฐ์ (5%๋ง ํ์)
from scripts.unified_error_resolver import UnifiedErrorResolver
resolver = UnifiedErrorResolver()
solution = resolver.resolve_error(error_msg, context={
"tool": "Bash",
"command": "pip install pandas"
})
if solution:
# HIGH confidence (>=95%) โ ์๋ ์ ์ฉ
apply_solution(solution)
print("โ
์๋ ํด๊ฒฐ๋จ!")
else:
# MEDIUM/LOW confidence โ ์ฌ์ฉ์ ํ์ธ ํ์
print("Context7 ์ ์: pip install pandas")
print("์ ์ฉํ ๊น์? (y/n)")| ๋ ๋ฒจ | ์๊ณ๊ฐ | ๋์ | ์ฌ์ฉ ์ฌ๋ก |
|---|---|---|---|
| HIGH | โฅ95% | ์๋ ์ ์ฉ (circuit breaker ์ฒดํฌ) | pip install pandas, npm install react |
| MEDIUM | 70-95% | ์ฌ์ฉ์ ํ์ธ ์์ฒญ | ImportError ํด๊ฒฐ, ์ค์ ๋ณ๊ฒฝ |
| LOW | <70% | ์์ ํ ์ฌ์ฉ์ ๊ฐ์ | ๋น์ฆ๋์ค ๋ก์ง ์๋ฌ, ์ปค์คํ ์๋ฌ |
Circuit Breaker (์ํท ๋ธ๋ ์ด์ปค):
- 3๋ฒ ์คํจ ์ ์๋ ์ ์ฉ ๋นํ์ฑํ
- ์ฌ์ฉ์ ์ ๋ขฐ ๋ณดํธ
Blacklist (๋ธ๋๋ฆฌ์คํธ):
- ์ํํ ๋ช ๋ น์ด๋ ์ ๋ ์๋ ์ ์ฉ ์ ํจ
sudo,rm -rf,database,payment,auth๋ฑ
Progressive Enhancement (์ ์ง์ ํฅ์):
- Week 1: 95% ์๊ณ๊ฐ (๋งค์ฐ ๋ณด์์ )
- Week 2: 92% ์๊ณ๊ฐ (์ ํ๋ >90% ๋ฌ์ฑ ์)
- Week 3: 90% ์๊ณ๊ฐ (์ ํ๋ >92% ๋ฌ์ฑ ์)
- Week 4: 90% ์๊ณ๊ฐ (์ต์ข ๋ชฉํ)
- ๋ชจ๋ ๋ณ๊ฒฝ:
config/error_resolution_config.yaml์์mode: "simple"์ค์ - ์๊ณ๊ฐ ์กฐ์ :
auto_apply: 1.0์ผ๋ก ์ค์ (์๋ ์ ์ฉ ๋ถ๊ฐ๋ฅํ๊ฒ) - Circuit breaker ๋นํ์ฑํ:
circuit_breaker.enabled: false - Git revert: ์ ์ฒด ์์คํ ๋กค๋ฐฑ
- Tier 1 (Obsidian): <10ms
- Tier 2 (Context7): <500ms
- ์ ๋ขฐ๋ ๊ณ์ฐ: <5ms ์ค๋ฒํค๋
- ์ ์ฒด cascade: <1์ด
- โ
์ข
ํฉ ํ
์คํธ: 6/6 ํต๊ณผ (100%)
- HIGH confidence ์๋ ์ ์ฉ
- MEDIUM confidence ํ์ธ ์์ฒญ
- LOW confidence ์ฌ์ฉ์ ๊ฐ์
- Blacklist ํจํด ์ฐจ๋จ
- Circuit breaker ์๋
- ํต๊ณ ์ถ์
- โ
๋กค๋ฐฑ ํ
์คํธ: 4/4 ํต๊ณผ (100%)
- ๋ชจ๋ ๋ณ๊ฒฝ ๋กค๋ฐฑ
- ์๊ณ๊ฐ ์กฐ์ ๋กค๋ฐฑ
- ์ ์ง์ ํฅ์ ๊ฒฝ๋ก
- ๊ธด๊ธ ๋กค๋ฐฑ ์ ์ฐจ
- ํต์ฌ ์์ง:
scripts/unified_error_resolver.py - ์ ๋ขฐ๋ ๊ณ์ฐ๊ธฐ:
scripts/confidence_calculator.py - ์ค์ ํ์ผ:
config/error_resolution_config.yaml - ์ํ ๋ถ์:
claudedocs/HYBRID_RESOLUTION_RISK_ANALYSIS.md - AI ๊ท์น:
~/.claude/CLAUDE.md(v3.0 Hybrid ํตํฉ)
์๋๋ฆฌ์ค 1: ModuleNotFoundError (HIGH confidence)
$ python app.py
ModuleNotFoundError: No module named 'pandas'
# AI ์๋ ์คํ:
[TIER 1] Obsidian ๊ฒ์... (์์)
[TIER 2] Context7 ๊ฒ์... pip install pandas (100% confidence)
[TIER 2 AUTO] ์๋ ์ ์ฉ!
โ
ํด๊ฒฐ๋จ: pip install pandas ์คํ์๋๋ฆฌ์ค 2: ์ค์ ํ์ผ ๋ณ๊ฒฝ (MEDIUM confidence)
$ npm start
Error: PORT 3000 already in use
# AI ์คํ:
[TIER 2 CONFIRM] Medium confidence (75%)
Context7 ์ ์: "Change PORT in .env file to 3001"
์ ์ฉํ ๊น์? (y/n)์๋๋ฆฌ์ค 3: ๋น์ฆ๋์ค ๋ก์ง ์๋ฌ (LOW confidence)
$ python app.py
CustomBusinessError: Payment validation failed
# AI ์คํ:
[TIER 3] ์๋ํ ๋ถ๊ฐ๋ฅ
์ด๋ป๊ฒ ํด๊ฒฐํ์๊ฒ ์ต๋๊น?์๋ ํ์ผ ๊ฐ์ ๋ฐ ์ฝ๋ ๊ฒ์ฆ ์์คํ
Development Assistant๋ Python ํ์ผ์ ๋ณ๊ฒฝ์ฌํญ์ ์ค์๊ฐ์ผ๋ก ๊ฐ์งํ๊ณ ์๋์ผ๋ก ์ฝ๋ ํ์ง์ ๊ฒ์ฆํ๋ ํ๋ก๋์ ๊ธ ํ์ผ ์์ฒ์ ๋๋ค.
- ์ค์๊ฐ ํ์ผ ๊ฐ์:
scripts/,tests/๋๋ ํ ๋ฆฌ์ Python ํ์ผ ๋ณ๊ฒฝ ์๋ ๊ฐ์ง - ์๋ Ruff ๊ฒ์ฆ: ํ์ผ ์ ์ฅ ์ ์๋์ผ๋ก Ruff ๋ฆฐํ ์คํ (<200ms)
- ์ฆ๊ฑฐ ๊ธฐ๋ฐ ๋ก๊น : ๋ชจ๋ ๊ฒ์ฆ ๊ฒฐ๊ณผ๋ฅผ JSON + ํ ์คํธ๋ก ์๋ ๊ธฐ๋ก
- ๋๋ฐ์ด์ฑ: ์ฐ์๋ ์ ์ฅ์ 500ms ๊ฐ๊ฒฉ์ผ๋ก ๋ณํฉํ์ฌ ๋ถํ์ํ ๊ฒ์ฆ ๋ฐฉ์ง
- ๋ฎ์ ๋ฆฌ์์ค ์ฌ์ฉ: ์ ํด ์ <2% CPU ์ฌ์ฉ
- ์ฐ์ํ ์ข ๋ฃ: SIGINT/SIGTERM ์ ํธ ์ฒ๋ฆฌ๋ก ์์ ํ ์ข ๋ฃ
# 1. ๊ธฐ๋ณธ ์คํ (scripts/, tests/ ๊ฐ์)
python scripts/dev_assistant.py
# 2. ์ปค์คํ
๋๋ ํ ๋ฆฌ ๊ฐ์
python scripts/dev_assistant.py --watch-dirs scripts tests src
# 3. ๋๋ฐ์ด์ค ์๊ฐ ์กฐ์ (1์ด)
python scripts/dev_assistant.py --debounce 1000
# 4. ๋๋ฒ๊ทธ ๋ชจ๋
python scripts/dev_assistant.py --log-level DEBUG๋ชจ๋ ํ๋ผ๋ฏธํฐ๋ pyproject.toml์์ ์ค์ ๊ฐ๋ฅํ๋ฉฐ, CLI ์ธ์๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋๋ค.
[tool.dev-assistant]
# ํ์ฑํ ์ฌ๋ถ
enabled = true
# ๊ฐ์ํ ๋๋ ํ ๋ฆฌ ๋ชฉ๋ก
watch_paths = ["scripts", "tests", "src"]
# ๋๋ฐ์ด์ค ์๊ฐ (๋ฐ๋ฆฌ์ด)
debounce_ms = 500
# Ruff ๊ฒ์ฆ ํ์์์ (์ด)
verification_timeout_sec = 2.0
# ์ฆ๊ฑฐ ๋ก๊ทธ ๋ณด๊ด ๊ธฐ๊ฐ (์ผ)
log_retention_days = 7
# Ruff ๊ฒ์ฆ ํ์ฑํ
enable_ruff = true
# ์ฆ๊ฑฐ ๋ก๊น
ํ์ฑํ
enable_evidence = true๊ฒ์ฆ ๊ฒฐ๊ณผ๋ RUNS/dev-assistant-YYYYMMDD/ ๋๋ ํ ๋ฆฌ์ ์๋ ์ ์ฅ๋ฉ๋๋ค:
- evidence.json: ๊ตฌ์กฐํ๋ JSON ํ์ (ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ๋ถ์์ฉ)
- verification.log: ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ํ ์คํธ ํ์
[2025-10-22T10:30:15] PASS - scripts/task_executor.py
Duration: 120ms
[2025-10-22T10:31:42] FAIL - scripts/new_feature.py
Duration: 95ms
Violations: 2
โข Line 15:1 - E501: Line too long (120 > 88 characters) [fixable]
โข Line 3:8 - F401: `os` imported but unused [fixable]
python scripts/dev_assistant.py --help
์ต์
:
--watch-dirs DIR [DIR ...] ๊ฐ์ํ ๋๋ ํ ๋ฆฌ (config ํ์ผ ์ค๋ฒ๋ผ์ด๋)
--debounce MS ๋๋ฐ์ด์ค ์๊ฐ ๋ฐ๋ฆฌ์ด (config ํ์ผ ์ค๋ฒ๋ผ์ด๋)
--log-level LEVEL ๋ก๊น
๋ ๋ฒจ (DEBUG|INFO|WARNING|ERROR)
--no-ruff Ruff ๊ฒ์ฆ ๋นํ์ฑํ (config ํ์ผ ์ค๋ฒ๋ผ์ด๋)
--no-evidence ์ฆ๊ฑฐ ๋ก๊น
๋นํ์ฑํ (config ํ์ผ ์ค๋ฒ๋ผ์ด๋)๊ฐ๋ฐ ์ค ์ค์๊ฐ ๊ฒ์ฆ:
# ํฐ๋ฏธ๋ 1: Development Assistant ์คํ
python scripts/dev_assistant.py
# ํฐ๋ฏธ๋ 2: ์ฝ๋ ์์
vim scripts/my_feature.py # ์ ์ฅ ์ ์๋ ๊ฒ์ฆ๋จCI/CD ํตํฉ:
# .github/workflows/quality.yml
- name: Run Ruff checks
run: ruff check scripts/ tests/
# ๋๋ Development Assistant์ ์ฆ๊ฑฐ ๋ก๊ทธ ๋ถ์
- name: Analyze verification evidence
run: python scripts/analyze_evidence.py RUNS/dev-assistant-*/evidence.json- ๊ฒ์ฆ ์๋: ์ผ๋ฐ์ ์ธ Python ํ์ผ <200ms
- CPU ์ฌ์ฉ: ์ ํด ์ <2% (ํ์ผ ๋ณ๊ฒฝ ์ ์๊ฐ์ ์ผ๋ก ์ฆ๊ฐ)
- ๋ฉ๋ชจ๋ฆฌ: ํ์ผ ์์ฒ + ์ค๋ ๋ ํ ~20MB
- ๋์คํฌ I/O: ์ฆ๊ฑฐ ๋ก๊ทธ๋ง ๊ธฐ๋ก (์ผ์ผ ~1-5MB)
"Ruff not found" ์ค๋ฅ:
pip install ruff"tomllib/tomli not available" ๊ฒฝ๊ณ :
# Python 3.11 ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ
pip install tomliํ์ผ ๊ฐ์๊ฐ ์๋ํ์ง ์์:
# watchdog ์ฌ์ค์น
pip install --upgrade watchdog
# ๋๋ ํ ๋ฆฌ ๊ถํ ํ์ธ
ls -la scripts/ tests/๊ณผ๋ํ ๊ฒ์ฆ ์คํ:
# ๋๋ฐ์ด์ค ์๊ฐ ์ฆ๊ฐ (1์ด)
python scripts/dev_assistant.py --debounce 1000- ๋น ๋ฅธ ์์ ๊ฐ์ด๋
- ๋ฉํฐ CLI ์ ๋ต โญ ํ ํฐ ์ต์ ํ
- ์ค์ ์ฌ์ฉ ์ฌ๋ก
- CLAUDE.md ์์ฑ ๊ฐ์ด๋
์ด ํ๋ก์ ํธ๋ ์คํ์์ค์ ๋๋ค! ๊ธฐ์ฌ๋ฅผ ํ์ํฉ๋๋ค.
-
Issue ์์ฑ
- ๋ฒ๊ทธ ๋ฆฌํฌํธ, ๊ธฐ๋ฅ ์ ์, ์ง๋ฌธ ๋ฑ
- Template:
.github/ISSUE_TEMPLATE.md(์์ฑ ์์ )
-
Pull Request
- Fork โ Branch โ Commit โ PR
- Conventional Commits ์ค์ ํ์
- Pre-commit hooks๊ฐ ์๋์ผ๋ก ๊ฒ์ฆํฉ๋๋ค
-
Constitution ๊ฐ์
- P11-P13 ์ ์ฉ ์ฌ๋ก ๊ณต์
- ์ ์กฐํญ ์ ์ (P13 ํ๋ก์ธ์ค ์ ์ฉ)
- NORTH_STAR.md ํผ๋๋ฐฑ
์ฝ๋ ํ์ง:
ruff checkํต๊ณผ ํ์pytestํ ์คํธ ์์ฑ- Coverage โฅ 90%
์ปค๋ฐ ๋ฉ์์ง:
feat(scope): ์ ๊ธฐ๋ฅ ์ถ๊ฐ
fix(scope): ๋ฒ๊ทธ ์์
docs(scope): ๋ฌธ์ ์
๋ฐ์ดํธPull Request ์ฒดํฌ๋ฆฌ์คํธ:
- Constitution ์กฐํญ๊ณผ ์ฐ๊ฒฐ (์ด๋ ์กฐํญ ๊ฐํ?)
- 7๊ณ์ธต ์ํคํ ์ฒ ์์น ๋ช ์
- NORTH_STAR.md ์ฐธ์กฐ (๋ฐฉํฅ์ฑ ํ์ธ)
- ํ ์คํธ ์ถ๊ฐ/์ ๋ฐ์ดํธ
- CHANGELOG.md ์ ๋ฐ์ดํธ
- Discussions: ์ง๋ฌธ, ์์ด๋์ด ๊ณต์
- Issues: ๋ฒ๊ทธ, ๊ธฐ๋ฅ ์์ฒญ
- Wiki: ์ฌ์ฉ ์ฌ๋ก, ํํ ๋ฆฌ์ผ (์์ฑ ์์ )
MIT License - ์์ ๋กญ๊ฒ ์ฌ์ฉ, ์์ , ์ฌ๋ฐฐํฌ ๊ฐ๋ฅ
์์ธ ๋ด์ฉ: LICENSE
Copyright (c) 2025 positivef
- โ ์์ ์ ์ฌ์ฉ
- โ ์์
- โ ๋ฐฐํฌ
- โ ๊ฐ์ธ ์ฌ์ฉ
์กฐ๊ฑด: ์์์ ํ์ ๋ฐ ๋ผ์ด์ ์ค ๊ณ ์ง ํฌํจ
์์์: positivef ํ๋ก์ ํธ: Dev Rules Starter Kit GitHub: https://github.com/positivef/dev-rules-starter-kit
์ด ์คํํฐ ํท์ DoubleDiver ํ๋ก์ ํธ์ ๊ฐ๋ฐ ๊ท์น ์์คํ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๋ค์ ์์คํ ๋ค์ best practice๋ฅผ ํตํฉํ์ต๋๋ค:
- Google Agent Development Kit (ADK) 2025
- Cursor Rules 2025
- GitHub Copilot Instructions 2025
- Commitlint + Semantic Release
- Obsidian Automation 2025
- Linux: ์คํ์์ค ๊ฑฐ๋ฒ๋์ค ๋ชจ๋ธ
- React: ์ปค๋ฎค๋ํฐ ๊ธฐ๋ฐ ๊ฐ๋ฐ
- Python: ๋ช ํํ ์ฒ ํ (PEP 20 - Zen of Python)
๋ฒ์ : 1.1.0 โ ์์ฑ ์ํ: Release & Observe (3๊ฐ์ ๊ด์ฐฐ ๊ธฐ๊ฐ) ์์ฑ์ผ: 2025-10-18 ์์ฑ์ผ: 2025-10-24 ๋ค์ ๋ฆฌ๋ทฐ: 2025-01-24 (P13 First Review)
ํต๊ณ:
- Constitution ์กฐํญ: 13๊ฐ (P1-P13)
- 7๊ณ์ธต ์ํคํ ์ฒ
- ํ์ต ์๊ฐ: 20๋ถ
- ROI: 2,150% (1๋ ), 11,150% (5๋ )
๊ฐ๋ฐ ๋ชจ๋:
- โ v1.1.0 ์์ฑ (ํ ํ๋ฆฟ ์์ฑ)
- ๐ ๊ด์ฐฐ ๊ธฐ๊ฐ (2025-10-24 ~ 2025-01-24)
- ๐ ํผ๋๋ฐฑ ์์ง ์ค
- ๐ซ Phase E ๋ณด๋ฅ (YAGNI ์์น)
๊ด์ฐฐ ํญ๋ชฉ:
- GitHub ํต๊ณ (Star, Fork, Issues)
- ์ฌ์ฉ์ ํผ๋๋ฐฑ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
- P11-P13 ์ค์ ์ ์ฉ ๊ฒฝํ
- Constitution ๊ฐ์ ํ์์ฑ
์ฐธ๊ณ : Phase E ๋ณด๋ฅ ๊ฒฐ์ ๋ฌธ์