diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index cc25e6a..cd90298 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "AI-native Vibe Coding — From idea to Deploy, Zero friction. Unified plugin with 13 agents, 5 commands, 6 skills, team-based parallel build, 20 design styles, screen-spec generator.", - "version": "0.1.13" + "version": "0.1.14" }, "plugins": [ { "name": "wigtn-plugins", "description": "Unified AI-native Vibe Coding plugin: PRD generation, digging analysis, screen-spec (IA / User Flow / Wireframe HTML / Dev Handoff), team-based parallel implementation, quality-gated auto-commit, 20 design styles, frontend (React/Next.js), backend (NestJS/Prisma), mobile (React Native/Expo), AI integration (STT/LLM), DevOps (Docker/CI-CD). 13 agents, 5 commands, 6 skills.", "source": "./plugins/wigtn-plugins", - "version": "0.1.13", + "version": "0.1.14", "author": { "name": "WIGTN Crew", "email": "rukais2294@gmail.com" diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index d3e72ad..bd54f07 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "wigtn-plugins", - "version": "0.1.13", + "version": "0.1.14", "description": "AI-native Vibe Coding — From idea to Deploy, Zero friction. Unified plugin with 13 agents, 5 commands, 6 skills, team-based parallel build, 20 design styles.", "author": { "name": "WIGTN Crew", diff --git a/CLAUDE.md b/CLAUDE.md index 3a27d45..1630085 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ A unified Claude Code plugin enabling AI-powered Vibe Coding: idea to production with minimal friction. -**Version**: 0.1.13 +**Version**: 0.1.14 **License**: Apache-2.0 **Repository**: https://github.com/wigtn/wigtn-plugins @@ -41,7 +41,7 @@ plugins/wigtn-plugins/ ``` /prd → PRD.md + PLAN_{feature}.md (§2.3 User Roles, §5.4 Pages, §5.4.1 State Matrix, §5.5 User Flow 포함) - → digging (4-lens 적대적 분석 + completeness-critic; PRD가 클 때만 병렬 via prd-reviewer) + → digging (4-lens 적대적 분석 + completeness-critic; 조건부 external-grounding; PRD가 클 때만 병렬 via prd-reviewer) → /screen-spec (FE 페이지가 있을 때만; IA / Flow / Spec / Wireframe / Handoff 5종 생성) → /implement (triage → quick-fix: 경량 단일 에이전트 | feature/greenfield: DESIGN → BUILD → [Frontend? → design-discovery → style select] @@ -53,6 +53,8 @@ plugins/wigtn-plugins/ `/screen-spec`은 PRD §5.4에 `Has FE Components: Yes` 행이 1개+ 있을 때만 실행. 백엔드/API 전용 PRD에서는 스킵하고 바로 `/implement`로 진행. +PRD 리뷰(digging)는 4렌즈 전부 **코드베이스 grounding**만 하던 것에 더해, 조건부 **external-grounding**을 수행한다(deep-research 패턴 축소 이식). PRD가 외부 세계에 의존하는 주장(3rd-party API 동작·가격·한도, 라이브러리 능력, 규제, 경쟁사)을 담고 Scale Grade ≥ Startup 또는 3rd-party 연동 ≥1일 때만 발화 — 그 주장만 골라 WebSearch로 `confirmed/contradicted/unverifiable` 태깅하고, **모순 주장만 3표 적대 재검증**해 Feasibility/Security의 Critical 씨앗으로 넣는다. Hobby·refactor·외부주장 0·WebSearch 불가 시 무마찰 스킵(웹 호출 0). `prd-reviewer`(소형·순차)와 `parallel-digging-coordinator`(대형·병렬) 양쪽 경로에서 동일하게 동작한다. + `/implement`는 Step 0.5에서 이슈 트래커(Linear MCP, `mcp__linear__*`)를 감지한다. 연동 시 Step 6에서 1회 확인 후 PRD의 FR을 하위 이슈로(의존성은 FR 테이블 기준) 등록하고 의존성 순서대로 이슈 단위 순차 개발한다. 미연동/`--no-tracker`이면 기존 원큐 플로우. 이슈 트래커는 보조 기능이라 연동 실패 시 원큐로 graceful degradation. ### Quality Gate (findings 롤업 — 결정론적) diff --git a/README.cn.md b/README.cn.md index 739f667..5739a5d 100644 --- a/README.cn.md +++ b/README.cn.md @@ -6,7 +6,7 @@ **一个插件。13 个智能体。从创意到生产。** -![Version](https://img.shields.io/badge/v0.1.13-Unified_Plugin-FF6B6B?style=for-the-badge) +![Version](https://img.shields.io/badge/v0.1.14-Unified_Plugin-FF6B6B?style=for-the-badge) ![Agents](https://img.shields.io/badge/13-Agents-5A67D8?style=for-the-badge) ![Commands](https://img.shields.io/badge/5-Commands-38B2AC?style=for-the-badge) ![Skills](https://img.shields.io/badge/6-Skills-00D4AA?style=for-the-badge) diff --git a/README.ko.md b/README.ko.md index 462249b..057051e 100644 --- a/README.ko.md +++ b/README.ko.md @@ -6,7 +6,7 @@ **하나의 플러그인. 13개 에이전트. 아이디어에서 프로덕션까지.** -![Version](https://img.shields.io/badge/v0.1.13-Unified_Plugin-FF6B6B?style=for-the-badge) +![Version](https://img.shields.io/badge/v0.1.14-Unified_Plugin-FF6B6B?style=for-the-badge) ![Agents](https://img.shields.io/badge/13-Agents-5A67D8?style=for-the-badge) ![Commands](https://img.shields.io/badge/5-Commands-38B2AC?style=for-the-badge) ![Skills](https://img.shields.io/badge/6-Skills-00D4AA?style=for-the-badge) diff --git a/README.md b/README.md index 31a5f3c..4201fb8 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ **One plugin. 13 agents. From idea to production.** -![Version](https://img.shields.io/badge/v0.1.13-Unified_Plugin-FF6B6B?style=for-the-badge) +![Version](https://img.shields.io/badge/v0.1.14-Unified_Plugin-FF6B6B?style=for-the-badge) ![Agents](https://img.shields.io/badge/13-Agents-5A67D8?style=for-the-badge) ![Commands](https://img.shields.io/badge/5-Commands-38B2AC?style=for-the-badge) ![Skills](https://img.shields.io/badge/6-Skills-00D4AA?style=for-the-badge) diff --git a/plugins/wigtn-plugins/.claude-plugin/plugin.json b/plugins/wigtn-plugins/.claude-plugin/plugin.json index 52b2afd..185252a 100644 --- a/plugins/wigtn-plugins/.claude-plugin/plugin.json +++ b/plugins/wigtn-plugins/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "wigtn-plugins", - "version": "0.1.13", + "version": "0.1.14", "description": "AI-native Vibe Coding — From idea to Deploy, Zero friction. 13 agents, 5 commands, 6 skills, team-based parallel build, 20 design styles, screen-spec generator (IA / User Flow / Wireframe HTML), WIGTN-brand PPT generator.", "agents": [ "./agents/architecture-decision.md", diff --git a/plugins/wigtn-plugins/agents/parallel-digging-coordinator.md b/plugins/wigtn-plugins/agents/parallel-digging-coordinator.md index e9cb5e7..b3dcf30 100644 --- a/plugins/wigtn-plugins/agents/parallel-digging-coordinator.md +++ b/plugins/wigtn-plugins/agents/parallel-digging-coordinator.md @@ -36,7 +36,8 @@ agent_teams_detection: - "Use shared TaskCreate/TaskUpdate for real task tracking" - "Phase 0: Context Harvester agent (sequential, must complete first)" - "Phase 1: PRD Structure Parser agent (sequential, extracts sections)" - - "Phase 2: Launch 4 analysis agents in parallel with Phase 0+1 context" + - "Phase 1.5: External Grounding agent (conditional — gating 통과 시, 외부 주장 웹 검증 → research_context)" + - "Phase 2: Launch 4 analysis agents in parallel with Phase 0+1(+1.5) context" - " Agent A: Completeness analysis (codebase-aware)" - " Agent B: Feasibility analysis (codebase-grounded)" - " Agent C: Security analysis (architecture-aware)" @@ -134,9 +135,95 @@ prd_parse: --- +## Phase 1.5: External Grounding (웹 근거 수집 — 조건부) + +> **Context First는 코드베이스만이 아니다.** 4개 렌즈는 모두 "코드베이스에 있는가"만 검증할 뿐, "바깥 세상에서 실제로 그러한가"는 아무도 묻지 않는다. PRD가 **외부 세계에 의존하는 주장**(3rd-party API 동작·가격·rate limit, 라이브러리 능력, 규제/컴플라이언스 요건, "경쟁사는 X를 한다")을 담고 있을 때, 이 Phase가 그 주장만 골라 웹으로 검증해 `research_context`를 만든다. deep-research 하네스(Scope→Search→Verify)를 **PRD 주장 검증용으로 축소**한 것 — 통째 이식이 아니라 패턴만 빌린다. + +> **이 Phase는 조건부다.** 아래 게이팅을 통과할 때만 실행하고, 실패·불가 시 조용히 스킵한 뒤 나머지 파이프라인은 오늘과 100% 동일하게 진행한다(Phase 0 fallback과 같은 모양). + +### Gating (실행 조건 — "굳이" 방어선) + +```yaml +grounding_gate: + run_when: + - "PRD에 외부 의존 주장이 1개 이상 존재" # 3rd-party API/라이브러리/규제/경쟁사 언급 + - "AND (Scale Grade in [Startup, Growth, Enterprise] OR 3rd-party 연동 >= 1)" + skip_when: + - "Scale Grade == Hobby AND 3rd-party 연동 0" # 개인 프로젝트·순수 내부 로직 + - "Type == refactor" # 런타임 외부 의존 없음 + - "외부 의존 주장 0개" # 검증할 게 없음 + - "user_flag: --no-research" + force_run: "user_flag: --research" + cost_note: "claim 상한 8개. 1차 검증은 주장당 검색 1회 — 저비용. 3표 재검증은 contradicted 주장에만." +``` + +### Step 1: Scope — 외부 의존 주장 추출 + +```yaml +extract_external_claims: + action: "PRD 전체에서 '외부 세계가 참이어야 성립하는' 주장만 골라낸다. 내부 로직·자체 구현 주장은 스킵." + claim_types: + third_party_api: "예: 'Stripe webhook은 재시도를 5회 한다', 'OpenAI API rate limit은 분당 500'" + library_capability: "예: 'NextAuth는 SAML을 지원한다', 'Prisma는 이 마이그레이션을 무중단 처리한다'" + pricing_quota: "예: 'Supabase 무료 티어로 충분하다', '이 볼륨이면 월 $20 이내'" + regulatory: "예: 'GDPR상 이 데이터는 EU 리전에 둬야 한다', 'PCI-DSS 요건 충족'" + competitor_norm: "예: '경쟁 서비스는 소셜 로그인을 기본 제공한다'" + output: + external_claims: Claim[] # 상한 8개. 초과 시 severity 영향 큰 순(Feasibility/Security 관련) 우선 + # Claim: { id, prd_section, text, type, why_it_matters } + none_found: "외부 주장 0개면 Phase 1.5 종료 → research_context = empty, Phase 2는 코드 grounding만으로 진행" +``` + +### Step 2: Search + Verify — 1차 태깅 + +```yaml +ground_each_claim: + per_claim: + - "WebSearch 1회 (주장을 검증 가능한 쿼리로 변환) → 최상위 신뢰 소스 1건 WebFetch" + - "소스 등급 태그: primary(공식 문서/RFC/법령) | secondary(신뢰 매체) | blog | forum" + - "판정 태그 부여:" + verdict: + confirmed: "소스가 주장을 뒷받침 (인용 필수)" + contradicted: "소스가 주장과 모순 — PRD 가정이 틀렸을 수 있음 (인용 필수)" + unverifiable: "신뢰 소스 못 찾음 → 렌즈에 '검증 필요' 태그로만 전달, Critical 씨앗 아님" + evidence_rule: "confirmed/contradicted는 반드시 URL + 인용구를 단다. 무근거 판정 금지." +``` + +### Step 3: Escalation — 모순 주장만 3표 적대 재검증 + +```yaml +contradiction_escalation: + trigger: "verdict == contradicted 인 주장만" + reason: "'PRD 가정이 틀렸다'는 판정은 Critical 씨앗이 되므로 오탐 비용이 크다 — deep-research식 다표 검증으로 굳힌다." + method: + votes: 3 # 독립 재검증 3회 (서로 다른 소스/쿼리 각도) + stance: "각 표는 '이 모순이 틀렸음(=원래 PRD 주장이 옳음)'을 반증하려 시도" + keep_contradiction_if: ">= 2/3 표가 여전히 contradicted" + downgrade_if: "< 2/3 → verdict를 unverifiable로 강등 (모순 확정 실패)" + cost_note: "1차 confirmed/unverifiable 주장은 재검증 안 함 — 3표는 contradicted에만 붙는다." +``` + +### Phase 1.5 Output + +```yaml +research_context: # Phase 0 harvest처럼 A/B/C 렌즈에 read-only 주입 (D는 내부 검증이라 제외) + claims_checked: number + grounded_facts: GroundedClaim[] # verdict == confirmed. 렌즈가 사실로 인용 가능 + contradicted_assumptions: GroundedClaim[] # verdict == contradicted (3표 통과). Critical 씨앗 + unverifiable: GroundedClaim[] # '검증 필요' 태그로만 전달 + # GroundedClaim: { claim_id, prd_section, text, verdict, source_url, source_tier, quote } + feed_map: # 어떤 렌즈가 무엇을 받는지 + feasibility_B: "contradicted 능력/가격/한도 주장 → Feasibility Critical 씨앗" + security_C: "known CVE / 인증 provider 제약 / 규제 요건 → Security 씨앗" + completeness_A:"competitor_norm 갭 → 'missing' 후보" + degraded: boolean # WebSearch 불가로 스킵했으면 true +``` + +--- + ## Phase 2: Parallel Analysis (4 Agents, Codebase-Aware) -> Phase 0+1의 컨텍스트를 모든 분석 에이전트에 주입하여 코드베이스 기반 분석을 수행한다. +> Phase 0+1(+조건부 1.5)의 컨텍스트를 모든 분석 에이전트에 주입하여 코드베이스 기반 분석을 수행한다. ### 다양성 계약 (Diversity Contract) @@ -144,11 +231,13 @@ prd_parse: | Agent | 적대적 렌즈 (깨보려는 질문) | 전용 1차 증거원 | 던지지 않는 질문 (타 에이전트 소유) | |-------|---------------------------|----------------|-----------------------------------| -| **A Completeness** | "이 PRD로 구현하면 무엇이 **빠져** 실패하는가?" — 누락·미정의·엣지케이스 | PRD 본문 + `existing_features`(이미 있는가) | 실현 난이도(B) · 공격 표면(C) · 용어 정합(D) | -| **B Feasibility** | "이 요구를 기존 코드/의존성으로 **정말 만들 수 있는가?**" — 통합 리스크·breaking change | `module_map` + `installed_deps` + `code_patterns` | 요구 누락(A) · 보안(C) · 문서 일관성(D) | -| **C Security** | "공격자라면 여기를 **어떻게 뚫는가?**" — OWASP·인증·데이터 노출 | 아키텍처·인증 흐름 + `existing_security_patterns` + `.env.example` | 기능 완전성(A) · 구현 난이도(B) · 네이밍(D) | +| **A Completeness** | "이 PRD로 구현하면 무엇이 **빠져** 실패하는가?" — 누락·미정의·엣지케이스 | PRD 본문 + `existing_features`(이미 있는가) + `research_context.competitor_norm` 갭 | 실현 난이도(B) · 공격 표면(C) · 용어 정합(D) | +| **B Feasibility** | "이 요구를 기존 코드/의존성으로 **정말 만들 수 있는가?**" — 통합 리스크·breaking change | `module_map` + `installed_deps` + `code_patterns` + `research_context.contradicted_assumptions`(능력·가격·한도) | 요구 누락(A) · 보안(C) · 문서 일관성(D) | +| **C Security** | "공격자라면 여기를 **어떻게 뚫는가?**" — OWASP·인증·데이터 노출 | 아키텍처·인증 흐름 + `existing_security_patterns` + `.env.example` + `research_context`(known CVE·인증 provider 제약·규제) | 기능 완전성(A) · 구현 난이도(B) · 네이밍(D) | | **D Consistency** | "PRD가 스스로/코드와 **모순되는 곳은?**" — 용어·우선순위·PRD↔Code 불일치 | PRD 전체 교차 + `module_map`·`code_patterns` 네이밍 | 요구 누락(A) · 실현성(B) · 보안(C) | +> **Grounding 주입 규칙**: `research_context`(Phase 1.5)는 A/B/C 렌즈에만 read-only 주입한다(D는 PRD 내부 정합 검증이라 외부 근거 불필요). `contradicted_assumptions`는 해당 렌즈에서 **Critical 씨앗**으로 취급하되, 여전히 PRD 섹션 번호 + 소스 URL을 증거로 달아야 한다. Phase 1.5가 스킵됐으면(`research_context` 비어있음) 이 열은 무시하고 코드 grounding만으로 진행한다. + > 각 에이전트는 자기 렌즈에서 **최소 1개 이상 "PRD를 깨는" 구체적 시나리오**를 찾으려 시도한다(못 찾으면 "이 각도에선 결함 없음"을 근거와 함께 명시). 일반론·원론적 코멘트는 금지 — 모든 지적은 PRD 섹션 번호 또는 코드 경로를 증거로 단다. ### Agent에게 전달되는 컨텍스트 @@ -166,6 +255,9 @@ analysis_agent_input: code_patterns: object # 기존 코드 패턴 installed_deps: string[] # 설치된 의존성 existing_features: string[] # 이미 구현된 기능 + + # Phase 1.5에서 추가 (조건부 — A/B/C 렌즈에만 주입, 스킵 시 비어있음) + research_context: object # grounded_facts / contradicted_assumptions / unverifiable + 인용 ``` ### 4-Agent Parallel Analysis @@ -510,6 +602,16 @@ parallel_digging_result: section_count: number # PRD 섹션 수 total_requirements: number # 추출된 요구사항 수 + # Phase 1.5 요약 (조건부 — 스킵 시 ran=false) + external_grounding: + ran: boolean # 게이팅 통과 후 실행됐는가 + skip_reason: string # 스킵 시 사유 (Hobby·refactor·외부주장 0·--no-research·WebSearch 불가) + claims_checked: number + confirmed: number + contradicted: number # 3표 통과한 모순 (Critical 씨앗) + unverifiable: number + citations: string[] # confirmed/contradicted 소스 URL 목록 + # Phase 2 에이전트 보고서 (Enhanced) agent_reports: completeness: # Agent A @@ -657,6 +759,18 @@ phase_0_fallback: - "Phase 2 에이전트에 context 누락 알림" ``` +### Phase 1.5 Fallback (External Grounding) + +```yaml +phase_1_5_fallback: + condition: "WebSearch/WebFetch 사용 불가, 게이팅 미통과, 또는 grounding 에이전트 실패" + action: + - "Phase 1.5 통째 스킵 → research_context = empty (degraded: true)" + - "Phase 2는 코드 grounding만으로 정상 진행 (오늘과 100% 동일)" + - "external_grounding.ran = false + skip_reason 기록" + principle: "grounding은 보조 신호 — 없어도 4렌즈 코드 grounding은 완전 동작. 절대 파이프라인을 막지 않는다." +``` + ### Single Agent Failure ```yaml @@ -727,6 +841,7 @@ auto_activate: |-------|--------|--------| | 0 | Context Harvest | Python/FastAPI, 8 modules, 12 features, 5 patterns | | 1 | PRD Parse | 12 sections, 34 requirements | +| 1.5 | External Grounding (조건부) | 6 claims 검증, 1 contradicted (3표), 4 confirmed | | 2 | Parallel Analysis (4 렌즈, 적대적) | 4 agents, 14 issues | | 3 | Cross-Category Synthesis | 2 compound issues, 1 escalation | | 3.5 | Completeness Critic | 1 미분석 섹션, 2 blindspot issues | @@ -759,6 +874,15 @@ auto_activate: | Truly New | 7 | payment, notification, ... | | Conflicting | 1 | error code format differs | +### External Grounding (NEW, 조건부) +| Claim (PRD 섹션) | Type | Verdict | Source | +|------------------|------|---------|--------| +| Stripe webhook 5회 재시도 (§5.1) | third_party_api | confirmed | stripe.com/docs (primary) | +| NextAuth SAML 지원 (§4.5) | library_capability | **contradicted** (3표) | next-auth.js.org (primary) | +| Supabase 무료 티어로 충분 (§4.0) | pricing_quota | unverifiable | — | + +> contradicted 주장 → Feasibility/Security Critical 씨앗으로 Phase 2에 주입. (스킵 시 이 표 생략) + ### Compound Issues (NEW) | # | Categories | Section | Issue | Severity | |---|-----------|---------|-------|----------| diff --git a/plugins/wigtn-plugins/agents/prd-reviewer.md b/plugins/wigtn-plugins/agents/prd-reviewer.md index fdfcdf2..49e6230 100644 --- a/plugins/wigtn-plugins/agents/prd-reviewer.md +++ b/plugins/wigtn-plugins/agents/prd-reviewer.md @@ -62,13 +62,21 @@ Glob: "**/*-prd.md" Read: ``` +### Phase 1.5: External Grounding (웹 근거 수집 — 조건부) + +> **작은 PRD(순차) 경로에서도 grounding은 동작한다.** 정의·게이팅·검증 강도는 `parallel-digging-coordinator`의 **Phase 1.5**를 그대로 따른다(단일 정의, 중복 금지). 요약: +> - **게이팅**: PRD에 외부 의존 주장(3rd-party API·라이브러리·규제·경쟁사)이 있고 (Scale Grade ≥ Startup 또는 3rd-party 연동 ≥1)일 때만 실행. Hobby·refactor·외부주장 0·`--no-research` → 스킵. `--research`로 강제. +> - **동작**: 외부 주장만 추출(상한 8) → 주장당 WebSearch 1회로 `confirmed / contradicted / unverifiable` 태깅 → **contradicted 주장만 3표 적대 재검증**(2/3 유지 시 확정). +> - **주입**: `research_context`를 아래 Phase 2의 A/B/C 렌즈에만 근거로 먹인다. contradicted는 Critical 씨앗(단, PRD 섹션 + 소스 URL 증거 필수). +> - **degradation**: WebSearch 불가/게이팅 미통과 시 조용히 스킵 — Phase 2는 코드 grounding만으로 오늘과 동일하게 진행. 절대 리뷰를 막지 않는다. + ### Phase 2: 체계적 분석 ``` 1. 전체 구조 파악 → 섹션 누락 확인 -2. 요구사항 완전성 → FR/NFR, Scale Grade, SLA/SLO -3. 기술적 실현 가능성 → 구현 난이도, 리스크 -4. 보안 취약점 → 잠재 보안 이슈 +2. 요구사항 완전성 → FR/NFR, Scale Grade, SLA/SLO (+ research_context.competitor_norm 갭) +3. 기술적 실현 가능성 → 구현 난이도, 리스크 (+ research_context.contradicted 능력·가격·한도) +4. 보안 취약점 → 잠재 보안 이슈 (+ research_context: known CVE·인증 provider 제약·규제) 5. 일관성 검증 → 충돌/모순, Scale Grade 정합성 ``` @@ -116,6 +124,13 @@ Read: | 일관성 | 2 | 0 | 1 | 1 | | **총계** | **14** | **3** | **6** | **5** | +## 외부 근거 검증 (조건부 — Phase 1.5 실행 시만) +| Claim (PRD 섹션) | Verdict | Source | +|------------------|---------|--------| +| NextAuth SAML 지원 (§4.5) | **contradicted** (3표) | next-auth.js.org | + +> 미실행 시: "외부 근거 검증: 스킵 (사유: Hobby/외부주장 0/WebSearch 불가 등)" 한 줄로 마감. + ## 상세 분석 ### Critical (즉시 수정 필요)