Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -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.11"
"version": "0.1.12"
},
"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.11",
"version": "0.1.12",
"author": {
"name": "WIGTN Crew",
"email": "rukais2294@gmail.com"
Expand Down
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "wigtn-plugins",
"version": "0.1.11",
"version": "0.1.12",
"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",
Expand Down
5 changes: 3 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

A unified Claude Code plugin enabling AI-powered Vibe Coding: idea to production with minimal friction.

**Version**: 0.1.11
**Version**: 0.1.12
**License**: Apache-2.0
**Repository**: https://github.com/wigtn/wigtn-plugins

Expand Down Expand Up @@ -64,7 +64,8 @@ plugins/wigtn-plugins/
- **PASS** (커밋): critical 0 AND major 0 AND minor <5
- **Security Critical**: critical의 부분집합 → 항상 FAIL (zero-tolerance, no score-cap hack)
- **정밀도**: major+ finding은 게이트 반영 전 adversarial refute 1회로 오탐 강등
- **하드 게이트 (hook 강제)**: 게이트가 프롬프트라 컨텍스트가 차면 스킵될 수 있으므로, `hooks.json`의 PreToolUse가 `git commit`을 가로채 강제한다. 롤업 PASS 시 `/auto-commit`이 `.wigtn/gate-pass`(mtime = PASS 시각)를 기록하고, 커밋 메시지에 `Quality Score:` 신호가 있는데 30분 내 아티팩트가 없으면 hook이 커밋을 **차단(exit 2)**한다. 수동 커밋(신호 없음)·`--no-review`(신호 제거)는 무마찰. 하네스가 막으므로 프롬프트 준수에 의존하지 않는다.
- **하드 게이트 (hook 강제)**: 게이트가 프롬프트라 컨텍스트가 차면 스킵될 수 있으므로, `hooks.json`의 PreToolUse가 `git commit`을 가로채 강제한다. 롤업 PASS 시 `/auto-commit`이 repo 루트(`git rev-parse --show-toplevel`)의 `.wigtn/gate-pass`(mtime = PASS 시각)를 기록하고, 커밋 메시지에 `Quality Score:` 신호가 있는데 30분 내 아티팩트가 없으면 hook이 커밋을 **차단(exit 2)**한다. 수동 커밋(신호 없음)·`--no-review`(신호 제거)는 무마찰. hook·auto-commit 모두 toplevel 기준이라 하위 디렉토리 cwd에서도 일치한다.
- **객관 체크 게이트 (opt-in, PASS 날조 방어)**: gate-pass는 모델이 쓰는 아티팩트라 리뷰 날조 시 함께 써질 수 있다. repo 루트에 실행권한 있는 `.wigtn/checks.sh`(예: `npm test && npm run typecheck`)를 두면 hook이 커밋 직전 **직접 실행**해 non-zero면 차단 — 테스트/타입체크 exit code는 모델이 못 꾸미므로 "리뷰가 좋았음"이 아니라 "객관 검증 통과"를 강제한다. 파일 없으면 기존 무마찰 동작.

## Conventions

Expand Down
2 changes: 1 addition & 1 deletion README.cn.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

**一个插件。13 个智能体。从创意到生产。**

![Version](https://img.shields.io/badge/v0.1.11-Unified_Plugin-FF6B6B?style=for-the-badge)
![Version](https://img.shields.io/badge/v0.1.12-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)
Expand Down
2 changes: 1 addition & 1 deletion README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

**하나의 플러그인. 13개 에이전트. 아이디어에서 프로덕션까지.**

![Version](https://img.shields.io/badge/v0.1.11-Unified_Plugin-FF6B6B?style=for-the-badge)
![Version](https://img.shields.io/badge/v0.1.12-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)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

**One plugin. 13 agents. From idea to production.**

![Version](https://img.shields.io/badge/v0.1.11-Unified_Plugin-FF6B6B?style=for-the-badge)
![Version](https://img.shields.io/badge/v0.1.12-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)
Expand Down
2 changes: 1 addition & 1 deletion plugins/wigtn-plugins/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "wigtn-plugins",
"version": "0.1.11",
"version": "0.1.12",
"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",
Expand Down
14 changes: 9 additions & 5 deletions plugins/wigtn-plugins/commands/auto-commit.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,16 +223,20 @@ ls PLAN_*.md PRD.md 2>/dev/null
> **왜**: 품질 게이트는 프롬프트 지시라 컨텍스트가 차면 조용히 스킵될 수 있다. hook(`hooks.json` PreToolUse)이 커밋을 실제로 차단하려면, "게이트가 방금 PASS했다"는 **검증 아티팩트**가 필요하다. 이 단계는 롤업이 **PASS**로 확정됐을 때만 실행한다(FAIL/WARN-잔존이면 실행하지 않음 → 아티팩트 없음 → 커밋 hook 차단).

```bash
# 롤업이 PASS로 확정된 경우에만 실행한다.
grep -qxF '.wigtn/' .git/info/exclude 2>/dev/null || echo '.wigtn/' >> .git/info/exclude # 아티팩트가 커밋에 섞이지 않도록 (tracked .gitignore 미변경)
mkdir -p .wigtn
echo "PASS $(git rev-parse --short HEAD 2>/dev/null || echo INITIAL) $(git rev-parse --abbrev-ref HEAD 2>/dev/null)" > .wigtn/gate-pass # mtime = PASS 시각. hook이 30분 신선도로 검증
# 롤업이 PASS로 확정된 경우에만 실행한다. 아티팩트는 git repo 루트(toplevel)에 둔다
# — hook이 하위 디렉토리에서 커밋해도 동일 위치를 조회하도록(cwd 결합 방지).
ROOT=$(git rev-parse --show-toplevel 2>/dev/null || echo .)
grep -qxF '.wigtn/' "$ROOT/.git/info/exclude" 2>/dev/null || echo '.wigtn/' >> "$ROOT/.git/info/exclude" # 커밋 혼입 방지 (tracked .gitignore 미변경)
mkdir -p "$ROOT/.wigtn"
echo "PASS $(git rev-parse --short HEAD 2>/dev/null || echo INITIAL) $(git rev-parse --abbrev-ref HEAD 2>/dev/null)" > "$ROOT/.wigtn/gate-pass" # mtime = PASS 시각. hook이 30분 신선도로 검증
```

- **아티팩트 의미**: 파일의 **mtime**이 곧 "게이트 PASS 시각"이다. hook은 `find .wigtn/gate-pass -mmin -30`으로 **30분 이내 PASS**만 유효 처리한다 — 지난 세션의 오래된 통과나, 게이트를 건너뛴 커밋을 막는다.
- **아티팩트 의미**: 파일의 **mtime**이 곧 "게이트 PASS 시각"이다. hook은 `find "$ROOT/.wigtn/gate-pass" -mmin -30`으로 **30분 이내 PASS**만 유효 처리한다 — 지난 세션의 오래된 통과나, 게이트를 건너뛴 커밋을 막는다. `$ROOT`는 hook·auto-commit 양쪽 모두 `git rev-parse --show-toplevel`로 해석하므로 하위 디렉토리 cwd에서도 일치한다.
- **재작성 금지**: 이 파일은 오직 이 단계(PASS 확정)에서만 쓴다. Step 6에서 커밋 직전에 `touch`하거나 미리 생성하지 않는다 — 그러면 하드 게이트가 무의미해진다.
- **커밋 후 자동 무효화**: 다음 게이트 실행 전까지 mtime이 늙으므로 재사용되지 않는다. 별도 삭제 로직 불필요.

> **객관 체크 게이트 (opt-in, PASS 날조 방어)**: 위 gate-pass는 결국 프롬프트가 쓰는 아티팩트라 모델이 리뷰를 날조하고 써버릴 수 있다("리뷰가 일어났고 PASS했음"만 강제, "리뷰가 좋았음"은 아님). 이를 닫으려면 repo 루트에 실행권한 있는 **`.wigtn/checks.sh`**(예: `#!/usr/bin/env bash` + `npm test && npm run typecheck`)를 두면, hook이 커밋 직전 **직접 실행**해 non-zero면 차단한다. 테스트/타입체크의 exit code는 모델이 못 꾸미므로, 팀이 이 파일을 두는 순간 게이트가 "리뷰가 좋았음"이 아니라 **"객관 검증이 실제로 통과했음"**을 강제한다. 파일이 없으면 기존 동작(무마찰). 주의: hook에서 동기 실행되므로 checks.sh는 빠른 것(타입체크·핵심 테스트)으로 유지한다.

### Step 4: 변경 분석 및 타입 결정

| 변경 패턴 | 커밋 타입 | 예시 |
Expand Down
2 changes: 1 addition & 1 deletion plugins/wigtn-plugins/hooks/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"hooks": [
{
"type": "command",
"command": "bash -c 'INPUT=$(cat); CMD=$(echo \"$INPUT\" | jq -r \".tool_input.command // empty\"); if echo \"$CMD\" | grep -qE \"git[[:space:]]+commit\" && echo \"$CMD\" | grep -q \"Quality Score:\"; then if [ -z \"$(find .wigtn/gate-pass -mmin -30 2>/dev/null)\" ]; then echo \"BLOCKED: WIGTN quality gate did not pass for this pipeline commit. The message contains a Quality Score: line but no fresh PASS verdict (.wigtn/gate-pass) was recorded. Run the /auto-commit quality gate so it writes the verdict, or use --no-review for an emergency hotfix (it omits the Quality Score line and bypasses this check).\" >&2; exit 2; fi; fi'"
"command": "bash -c 'INPUT=$(cat); CMD=$(echo \"$INPUT\" | jq -r \".tool_input.command // empty\"); if echo \"$CMD\" | grep -qE \"git[[:space:]]+commit\" && echo \"$CMD\" | grep -q \"Quality Score:\"; then ROOT=$(git rev-parse --show-toplevel 2>/dev/null || echo .); if [ -z \"$(find \"$ROOT/.wigtn/gate-pass\" -mmin -30 2>/dev/null)\" ]; then echo \"BLOCKED: WIGTN quality gate did not pass for this pipeline commit. Message has a Quality Score: line but no fresh PASS verdict ($ROOT/.wigtn/gate-pass). Run the /auto-commit quality gate, or use --no-review for an emergency hotfix (omits the Quality Score line).\" >&2; exit 2; fi; if [ -x \"$ROOT/.wigtn/checks.sh\" ]; then if ! ( cd \"$ROOT\" && ./.wigtn/checks.sh >/tmp/wigtn-checks.log 2>&1 ); then echo \"BLOCKED: WIGTN objective checks (.wigtn/checks.sh) failed — a fabricated review cannot pass real test/typecheck exit codes. See /tmp/wigtn-checks.log.\" >&2; exit 2; fi; fi; fi'"
}
]
}
Expand Down
Loading