@su-record/vibe 2.10.2 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CLAUDE.md CHANGED
@@ -59,6 +59,12 @@ No `console.log` in commits · No hardcoded strings/numbers · No commented-out
59
59
  | `.claude/settings.local.json` | Claude Code hooks (auto-generated, don't commit) |
60
60
  | `~/.codex/config.toml` | Codex `notify` (turn-complete lifecycle hook, auto-installed) |
61
61
 
62
+ ### Quality SSOT (3-tier)
63
+ | Path | Purpose |
64
+ |---|---|
65
+ | `CLAUDE.md` / `AGENTS.md` | Code quality + build quality (existing) |
66
+ | `DESIGN.md` | **Visual quality** — Stitch 9-section format, project root, managed by `/vibe.design` (init/lint/verify/sync). Figma 독립. UI stack 에서만 권유 — 부재해도 워크플로 블록하지 않음. |
67
+
62
68
  Legacy: 기존 `.claude/vibe/` 는 런타임에 자동 인식되며 `vibe init`/`update` 시 `.vibe/` 로 이동한다.
63
69
 
64
70
  ### Dual-Harness Doctrine
package/README.en.md CHANGED
@@ -134,6 +134,32 @@ Bidirectional. Read designs from Figma, or write designs to Figma from a plan.
134
134
 
135
135
  ---
136
136
 
137
+ ## DESIGN.md — Visual Quality SSOT
138
+
139
+ The **third SSOT** alongside `CLAUDE.md` (code) and `AGENTS.md` (build). Google Stitch 9-section format, lives at project root, human-readable so any AI agent can read it. **Figma-independent** — Figma is just one of 4 input paths.
140
+
141
+ ```bash
142
+ # 4 init paths (start without Figma)
143
+ /vibe.design init # Interview (default)
144
+ /vibe.design init --from=code # Reverse-extract tokens (Tailwind / CSS vars / styled-components)
145
+ /vibe.design init --from=reference --reference=linear # 12 awesome-design-md seeds
146
+ /vibe.design init --from=figma --file=<key> # Delegate to /vibe.figma (optional)
147
+
148
+ # Lifecycle
149
+ /vibe.design lint # Verify Stitch 9-section completeness
150
+ /vibe.design verify # Implementation ↔ DESIGN.md hex token drift (<1s / 100 files)
151
+ ```
152
+
153
+ **Auto-integrated**:
154
+ - `/vibe.run` — On UI work, suggests DESIGN.md once if missing (silent skip in ultrawork, never blocks)
155
+ - `/vibe.verify` — `### 3.2 Visual Drift Detection` flags hardcoded hex as P1
156
+ - `/vibe.review` — `#### Visual P1 Baseline` — DESIGN.md first, WCAG AA fallback
157
+ - `/vibe.figma` — `--emit-design-md` outputs DESIGN.md from READ; WRITE uses DESIGN.md tone/palette as primary input
158
+
159
+ > v1 scope: hex color drift. Spacing / font drift in Phase 2+
160
+
161
+ ---
162
+
137
163
  ## Quality Gates
138
164
 
139
165
  Three layers of defense on every tool call:
@@ -190,6 +216,7 @@ Three layers of defense on every tool call:
190
216
  | `/vibe.spec` | Single entry point — interview, plan, spec, review, then run |
191
217
  | `/vibe.run` | Implement from SPEC |
192
218
  | `/vibe.figma` | Figma ↔ Code (read or write, 3 modes) |
219
+ | `/vibe.design` | DESIGN.md visual quality SSOT — init / lint / verify / sync |
193
220
  | `/vibe.verify` | Verify implementation against SPEC |
194
221
  | `/vibe.trace` | Requirements traceability matrix |
195
222
  | `/vibe.analyze` | Analyze any target — code, documents, websites, Figma |
package/README.md CHANGED
@@ -99,6 +99,32 @@ claude
99
99
 
100
100
  ---
101
101
 
102
+ ## DESIGN.md — 시각 품질 SSOT
103
+
104
+ `CLAUDE.md`(코드)·`AGENTS.md`(빌드) 에 이은 **세 번째 SSOT**. Google Stitch 9-섹션 표준으로 프로젝트 루트에 위치하며, 외부 AI 에이전트가 직접 읽을 수 있는 휴먼-리더블 시각 규약입니다. **Figma 종속 X** — Figma 는 4 입력 경로 중 하나일 뿐.
105
+
106
+ ```bash
107
+ # 4 가지 init 경로 (Figma 없이도 시작 가능)
108
+ /vibe.design init # 인터뷰 (디폴트)
109
+ /vibe.design init --from=code # 기존 코드 토큰 역추출 (Tailwind/CSS-vars/styled-components)
110
+ /vibe.design init --from=reference --reference=linear # awesome-design-md 시드 12 종
111
+ /vibe.design init --from=figma --file=<key> # /vibe.figma 위임 (옵션)
112
+
113
+ # 라이프사이클
114
+ /vibe.design lint # Stitch 9-섹션 완전성 검증
115
+ /vibe.design verify # 구현 ↔ DESIGN.md hex 토큰 드리프트 (<1s/100 파일)
116
+ ```
117
+
118
+ **자동 통합**:
119
+ - `/vibe.run` — UI 작업 진입 시 DESIGN.md 없으면 1 회 권유 (ultrawork silent skip, 절대 블록 X)
120
+ - `/vibe.verify` — `### 3.2 Visual Drift Detection` 으로 hex 하드코딩 P1 검출
121
+ - `/vibe.review` — `#### Visual P1 Baseline` — DESIGN.md 우선, 없으면 WCAG AA 폴백
122
+ - `/vibe.figma` — `--emit-design-md` 로 READ 산출물을 DESIGN.md 로 출력, WRITE 는 DESIGN.md 톤·팔레트 1 차 입력
123
+
124
+ > v1 범위: hex 컬러 드리프트. spacing / font 드리프트는 Phase 2+
125
+
126
+ ---
127
+
102
128
  ## 품질 게이트
103
129
 
104
130
  모든 도구 호출마다 3계층 방어:
@@ -152,6 +178,7 @@ claude
152
178
  | `/vibe.spec` | (advanced) 인터뷰, 기획, SPEC, 리뷰 phase 명시적 호출 |
153
179
  | `/vibe.run` | (advanced) SPEC 기반 구현 |
154
180
  | `/vibe.figma` | (advanced) Figma ↔ 코드 (읽기 또는 쓰기, 3가지 모드) |
181
+ | `/vibe.design` | (advanced) DESIGN.md 시각 품질 SSOT — init / lint / verify / sync |
155
182
  | `/vibe.verify` | (advanced) 구현이 SPEC에 맞는지 검증 |
156
183
  | `/vibe.trace` | (advanced) 요구사항 추적 매트릭스 |
157
184
 
@@ -0,0 +1,25 @@
1
+ /**
2
+ * DESIGN.md parser — Stitch 9-section format
3
+ *
4
+ * SSOT for /vibe.design lint + verify. Pure functions, no I/O.
5
+ */
6
+ export declare const STITCH_SECTIONS: readonly ["Visual Theme", "Color Palette", "Typography", "Components", "Layout", "Depth", "Do's & Don'ts", "Responsive", "Agent Prompt Guide"];
7
+ export type StitchSection = typeof STITCH_SECTIONS[number];
8
+ export interface DesignMdSection {
9
+ index: number;
10
+ title: StitchSection;
11
+ body: string;
12
+ }
13
+ export interface HardcodedHex {
14
+ file: string;
15
+ line: number;
16
+ hex: string;
17
+ }
18
+ export declare function parseSections(content: string): DesignMdSection[];
19
+ export declare function lintMissingSections(content: string): StitchSection[];
20
+ export declare function extractHexTokens(designMd: string): string[];
21
+ export declare function findHardcodedColors(files: ReadonlyArray<{
22
+ path: string;
23
+ content: string;
24
+ }>, allowedTokens: ReadonlyArray<string>): HardcodedHex[];
25
+ //# sourceMappingURL=design-md-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-md-parser.d.ts","sourceRoot":"","sources":["../../../src/cli/design/design-md-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,eAAe,gJAUlB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAeD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CA6BhE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAGpE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAK3D;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACvD,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GACnC,YAAY,EAAE,CAgBhB"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * DESIGN.md parser — Stitch 9-section format
3
+ *
4
+ * SSOT for /vibe.design lint + verify. Pure functions, no I/O.
5
+ */
6
+ export const STITCH_SECTIONS = [
7
+ 'Visual Theme',
8
+ 'Color Palette',
9
+ 'Typography',
10
+ 'Components',
11
+ 'Layout',
12
+ 'Depth',
13
+ "Do's & Don'ts",
14
+ 'Responsive',
15
+ 'Agent Prompt Guide',
16
+ ];
17
+ const HEX_RE = /#(?:[0-9a-fA-F]{8}|[0-9a-fA-F]{6}|[0-9a-fA-F]{3})\b/g;
18
+ function matchStitchTitle(title) {
19
+ const normalized = title.trim().toLowerCase().replace(/[`*_]/g, '');
20
+ for (let i = 0; i < STITCH_SECTIONS.length; i++) {
21
+ const canonical = STITCH_SECTIONS[i];
22
+ if (normalized.includes(canonical.toLowerCase())) {
23
+ return { index: i + 1, canonical };
24
+ }
25
+ }
26
+ return null;
27
+ }
28
+ export function parseSections(content) {
29
+ const lines = content.split(/\r?\n/);
30
+ const sections = [];
31
+ let current = null;
32
+ const flush = () => {
33
+ if (!current)
34
+ return;
35
+ const matched = matchStitchTitle(current.title);
36
+ if (matched) {
37
+ sections.push({
38
+ index: matched.index,
39
+ title: matched.canonical,
40
+ body: current.bodyLines.join('\n').trim(),
41
+ });
42
+ }
43
+ };
44
+ for (const line of lines) {
45
+ const heading = line.match(/^##\s+(.+?)\s*$/);
46
+ if (heading) {
47
+ flush();
48
+ current = { title: heading[1], bodyLines: [] };
49
+ }
50
+ else if (current) {
51
+ current.bodyLines.push(line);
52
+ }
53
+ }
54
+ flush();
55
+ return sections;
56
+ }
57
+ export function lintMissingSections(content) {
58
+ const present = new Set(parseSections(content).map(s => s.title));
59
+ return STITCH_SECTIONS.filter(s => !present.has(s));
60
+ }
61
+ export function extractHexTokens(designMd) {
62
+ const colorSection = parseSections(designMd).find(s => s.index === 2);
63
+ if (!colorSection)
64
+ return [];
65
+ const matches = colorSection.body.match(HEX_RE) ?? [];
66
+ return [...new Set(matches.map(h => h.toLowerCase()))];
67
+ }
68
+ export function findHardcodedColors(files, allowedTokens) {
69
+ const allowed = new Set(allowedTokens.map(t => t.toLowerCase()));
70
+ const results = [];
71
+ for (const file of files) {
72
+ const lines = file.content.split(/\r?\n/);
73
+ for (let i = 0; i < lines.length; i++) {
74
+ const matches = lines[i].match(HEX_RE);
75
+ if (!matches)
76
+ continue;
77
+ for (const hex of matches) {
78
+ if (!allowed.has(hex.toLowerCase())) {
79
+ results.push({ file: file.path, line: i + 1, hex });
80
+ }
81
+ }
82
+ }
83
+ }
84
+ return results;
85
+ }
86
+ //# sourceMappingURL=design-md-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-md-parser.js","sourceRoot":"","sources":["../../../src/cli/design/design-md-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=design-md-parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-md-parser.test.d.ts","sourceRoot":"","sources":["../../../src/cli/design/design-md-parser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,149 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { readFileSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { parseSections, lintMissingSections, extractHexTokens, findHardcodedColors, STITCH_SECTIONS, } from './design-md-parser.js';
5
+ const ROOT = process.cwd();
6
+ const TEMPLATE_PATH = join(ROOT, 'skills/vibe.design/templates/DESIGN.md.template');
7
+ const SKILL_PATH = join(ROOT, 'skills/vibe.design/SKILL.md');
8
+ const REFS_PATH = join(ROOT, 'skills/vibe.design/references/README.md');
9
+ const HEUR_PATH = join(ROOT, 'skills/vibe.design/heuristics/code-extract.md');
10
+ const template = readFileSync(TEMPLATE_PATH, 'utf8');
11
+ describe('design-md-parser: parseSections', () => {
12
+ it('finds all 9 Stitch sections in the template', () => {
13
+ const sections = parseSections(template);
14
+ expect(sections).toHaveLength(9);
15
+ expect(sections.map((s) => s.title)).toEqual([...STITCH_SECTIONS]);
16
+ });
17
+ it('ignores non-Stitch H2 headings', () => {
18
+ const md = '## Random Other Section\nfoo\n## Color Palette\n- #FFF\n';
19
+ const sections = parseSections(md);
20
+ expect(sections).toHaveLength(1);
21
+ expect(sections[0].title).toBe('Color Palette');
22
+ });
23
+ it('captures section body between H2 headings', () => {
24
+ const md = '## Visual Theme\nBrand tone here\n\n## Color Palette\n- #000\n';
25
+ const sections = parseSections(md);
26
+ expect(sections[0].body).toBe('Brand tone here');
27
+ });
28
+ });
29
+ describe('design-md-parser: lintMissingSections', () => {
30
+ it('returns empty array for the complete template', () => {
31
+ expect(lintMissingSections(template)).toEqual([]);
32
+ });
33
+ it('lists missing sections for a partial DESIGN.md', () => {
34
+ const partial = '## Visual Theme\nA\n## Color Palette\n- #000\n';
35
+ const missing = lintMissingSections(partial);
36
+ expect(missing).toContain('Typography');
37
+ expect(missing).toContain('Responsive');
38
+ expect(missing).toHaveLength(7);
39
+ });
40
+ it('returns all 9 for empty input', () => {
41
+ expect(lintMissingSections('')).toHaveLength(9);
42
+ });
43
+ });
44
+ describe('design-md-parser: extractHexTokens', () => {
45
+ it('extracts hex colors only from Color Palette section', () => {
46
+ const md = [
47
+ '## Visual Theme',
48
+ 'use #DEADBE (outside palette - ignored)',
49
+ '## Color Palette',
50
+ '- Primary: #FF0000',
51
+ '- Secondary: #00ff00',
52
+ '- Three: #abc',
53
+ '## Typography',
54
+ 'family',
55
+ ].join('\n');
56
+ const hex = extractHexTokens(md);
57
+ expect(hex).toEqual(expect.arrayContaining(['#ff0000', '#00ff00', '#abc']));
58
+ expect(hex).not.toContain('#deadbe');
59
+ });
60
+ it('returns empty when Color Palette section is absent', () => {
61
+ expect(extractHexTokens('## Visual Theme\nfoo')).toEqual([]);
62
+ });
63
+ it('deduplicates case-insensitively', () => {
64
+ const md = '## Color Palette\n#FF0000 #ff0000 #Ff0000\n';
65
+ expect(extractHexTokens(md)).toEqual(['#ff0000']);
66
+ });
67
+ });
68
+ describe('design-md-parser: findHardcodedColors', () => {
69
+ it('flags hex values not present in the allowed token set', () => {
70
+ const files = [
71
+ {
72
+ path: 'src/Button.tsx',
73
+ content: 'const bg = "#FF0000";\nconst fg = "#123456";\n',
74
+ },
75
+ ];
76
+ const result = findHardcodedColors(files, ['#ff0000']);
77
+ expect(result).toHaveLength(1);
78
+ expect(result[0]).toEqual({
79
+ file: 'src/Button.tsx',
80
+ line: 2,
81
+ hex: '#123456',
82
+ });
83
+ });
84
+ it('returns empty when every hex is allowed', () => {
85
+ const files = [{ path: 'a.css', content: 'color: #fff;\nbg: #ABCDEF;' }];
86
+ const result = findHardcodedColors(files, ['#fff', '#abcdef']);
87
+ expect(result).toEqual([]);
88
+ });
89
+ it('matches case-insensitively', () => {
90
+ const files = [{ path: 'x.ts', content: '"#aAbBcC"' }];
91
+ expect(findHardcodedColors(files, ['#AABBCC'])).toEqual([]);
92
+ });
93
+ });
94
+ describe('vibe.design static assets', () => {
95
+ it('SKILL.md has frontmatter with name: vibe.design', () => {
96
+ const skill = readFileSync(SKILL_PATH, 'utf8');
97
+ expect(skill).toMatch(/^---\n[\s\S]+?\n---/);
98
+ expect(skill).toMatch(/name:\s*vibe\.design/);
99
+ expect(skill).toMatch(/user-invocable:\s*true/);
100
+ });
101
+ it('SKILL.md documents all 4 subcommands', () => {
102
+ const skill = readFileSync(SKILL_PATH, 'utf8');
103
+ expect(skill).toMatch(/init/);
104
+ expect(skill).toMatch(/lint/);
105
+ expect(skill).toMatch(/verify/);
106
+ expect(skill).toMatch(/sync/);
107
+ });
108
+ it('template starts with version marker', () => {
109
+ expect(template.split('\n')[0]).toBe('<!-- design-md-version: 1 -->');
110
+ });
111
+ it('references catalog includes style-preset column and linear seed', () => {
112
+ const refs = readFileSync(REFS_PATH, 'utf8');
113
+ expect(refs).toMatch(/style-preset/i);
114
+ expect(refs).toMatch(/linear/i);
115
+ });
116
+ it('heuristics doc lists v1 required patterns', () => {
117
+ const heur = readFileSync(HEUR_PATH, 'utf8');
118
+ expect(heur).toMatch(/Tailwind/);
119
+ expect(heur).toMatch(/CSS custom properties|CSS-vars|CSS variables/i);
120
+ expect(heur).toMatch(/styled-components/);
121
+ });
122
+ });
123
+ describe('constants.ts SSOT registration', () => {
124
+ const constantsPath = join(ROOT, 'src/cli/postinstall/constants.ts');
125
+ const source = readFileSync(constantsPath, 'utf8');
126
+ it('registers vibe.design in GLOBAL_SKILLS_ENTRY', () => {
127
+ expect(source).toMatch(/'vibe\.design'/);
128
+ });
129
+ it('maps vibe.design to all 11 UI stacks', () => {
130
+ const uiStacks = [
131
+ 'typescript-react',
132
+ 'typescript-nextjs',
133
+ 'typescript-vue',
134
+ 'typescript-nuxt',
135
+ 'typescript-svelte',
136
+ 'typescript-angular',
137
+ 'typescript-astro',
138
+ 'typescript-react-native',
139
+ 'dart-flutter',
140
+ 'swift-ios',
141
+ 'kotlin-android',
142
+ ];
143
+ for (const stack of uiStacks) {
144
+ const re = new RegExp(`'${stack}':\\s*\\[[^\\]]*'vibe\\.design'[^\\]]*\\]`);
145
+ expect(source).toMatch(re);
146
+ }
147
+ });
148
+ });
149
+ //# sourceMappingURL=design-md-parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-md-parser.test.js","sourceRoot":"","sources":["../../../src/cli/design/design-md-parser.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,iDAAiD,CAAC,CAAC;AACpF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;AAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,yCAAyC,CAAC,CAAC;AACxE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,+CAA+C,CAAC,CAAC;AAE9E,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAErD,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,EAAE,GAAG,0DAA0D,CAAC;QACtE,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,EAAE,GAAG,gEAAgE,CAAC;QAC5E,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,OAAO,GAAG,gDAAgD,CAAC;QACjE,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,EAAE,GAAG;YACT,iBAAiB;YACjB,yCAAyC;YACzC,kBAAkB;YAClB,oBAAoB;YACpB,sBAAsB;YACtB,eAAe;YACf,eAAe;YACf,QAAQ;SACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,EAAE,GAAG,6CAA6C,CAAC;QACzD,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,KAAK,GAAG;YACZ;gBACE,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,gDAAgD;aAC1D;SACF,CAAC;QACF,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACxB,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,SAAS;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAEnD,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,QAAQ,GAAG;YACf,kBAAkB;YAClB,mBAAmB;YACnB,gBAAgB;YAChB,iBAAiB;YACjB,mBAAmB;YACnB,oBAAoB;YACpB,kBAAkB;YAClB,yBAAyB;YACzB,cAAc;YACd,WAAW;YACX,gBAAgB;SACjB,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,2CAA2C,CAAC,CAAC;YAC5E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/cli/postinstall/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAmBrD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAYpD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,MAAM,CAaxD,CAAC;AAEF;8CAC8C;AAC9C,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,MAAM,CAMxD,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,MAAM,CAI/C,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAgBjE,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAMnE,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAG1E,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAM,CAAC;AAEpF,uDAAuD;AACvD,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAMA,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAuB9F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAmBjG;AAKD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2BzD,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwBjD,CAAC;AAMF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkBvD,CAAC;AAGF,eAAO,MAAM,sBAAsB,UAGlC,CAAC;AAGF,eAAO,MAAM,iBAAiB,UAE7B,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAgCnD,CAAC;AAKF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqFvD,CAAC;AAGF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAKvD,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqF7D,CAAC;AAGF,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwD/D,CAAC;AAGF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAoClE,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAatD,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/cli/postinstall/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,MAAM,CAoBrD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAYpD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,MAAM,CAaxD,CAAC;AAEF;8CAC8C;AAC9C,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,MAAM,CAMxD,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,MAAM,CAI/C,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAgBjE,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAMnE,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAG1E,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAM,CAAC;AAEpF,uDAAuD;AACvD,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAMA,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAuB9F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAmBjG;AAKD,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA2BzD,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwBjD,CAAC;AAMF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAkBvD,CAAC;AAGF,eAAO,MAAM,sBAAsB,UAGlC,CAAC;AAGF,eAAO,MAAM,iBAAiB,UAE7B,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAgCnD,CAAC;AAKF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqFvD,CAAC;AAGF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAKvD,CAAC;AAGF,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqF7D,CAAC;AAGF,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwD/D,CAAC;AAGF,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAoClE,CAAC;AAGF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAatD,CAAC"}
@@ -18,6 +18,7 @@ export const GLOBAL_SKILLS_ENTRY = [
18
18
  'vibe.analyze',
19
19
  'vibe.clone',
20
20
  'vibe.contract',
21
+ 'vibe.design',
21
22
  'vibe.docs',
22
23
  'vibe.event',
23
24
  'vibe.figma',
@@ -80,18 +81,18 @@ export const STACK_TO_SKILLS = {
80
81
  // TypeScript 공통
81
82
  'typescript': ['typescript-advanced-types'],
82
83
  // Web frontend → UI/UX + SEO + Design steering + React best practices
83
- 'typescript-react': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'vercel-react-best-practices', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill'],
84
- 'typescript-nextjs': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'vercel-react-best-practices', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill'],
85
- 'typescript-vue': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill'],
86
- 'typescript-nuxt': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill'],
87
- 'typescript-svelte': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill'],
88
- 'typescript-angular': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill'],
89
- 'typescript-astro': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill'],
84
+ 'typescript-react': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'vercel-react-best-practices', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill', 'vibe.design'],
85
+ 'typescript-nextjs': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'vercel-react-best-practices', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill', 'vibe.design'],
86
+ 'typescript-vue': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill', 'vibe.design'],
87
+ 'typescript-nuxt': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill', 'vibe.design'],
88
+ 'typescript-svelte': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill', 'vibe.design'],
89
+ 'typescript-angular': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill', 'vibe.design'],
90
+ 'typescript-astro': ['ui-ux-pro-max', 'brand-assets', 'seo-checklist', 'design-audit', 'design-critique', 'design-polish', 'design-normalize', 'design-distill', 'vibe.design'],
90
91
  // Mobile → UI + design-audit/critique only (polish/normalize/distill are CSS-based)
91
- 'typescript-react-native': ['ui-ux-pro-max', 'design-audit', 'design-critique'],
92
- 'dart-flutter': ['ui-ux-pro-max', 'design-audit', 'design-critique'],
93
- 'swift-ios': ['ui-ux-pro-max', 'design-audit', 'design-critique'],
94
- 'kotlin-android': ['ui-ux-pro-max', 'design-audit', 'design-critique'],
92
+ 'typescript-react-native': ['ui-ux-pro-max', 'design-audit', 'design-critique', 'vibe.design'],
93
+ 'dart-flutter': ['ui-ux-pro-max', 'design-audit', 'design-critique', 'vibe.design'],
94
+ 'swift-ios': ['ui-ux-pro-max', 'design-audit', 'design-critique', 'vibe.design'],
95
+ 'kotlin-android': ['ui-ux-pro-max', 'design-audit', 'design-critique', 'vibe.design'],
95
96
  };
96
97
  /** Capability → 로컬 스킬 매핑 (의존성 감지 기반 자동 설치) */
97
98
  export const CAPABILITY_SKILLS = {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/cli/postinstall/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/cli/postinstall/constants.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@su-record/vibe",
3
- "version": "2.10.2",
3
+ "version": "2.11.0",
4
4
  "description": "AI Coding Framework for Claude Code — 56 agents, 45 skills, multi-LLM orchestration",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",
@@ -0,0 +1,183 @@
1
+ ---
2
+ name: vibe.design
3
+ description: DESIGN.md(시각 품질 SSOT) 생성·검증·드리프트 검사·동기화. Figma 독립.
4
+ argument-hint: "init [--from=interview|code|reference|figma] | lint | verify | sync"
5
+ user-invocable: true
6
+ ---
7
+
8
+ # /vibe.design
9
+
10
+ **vibe 의 세 번째 SSOT — 시각 품질 계약 문서(`DESIGN.md`)** 의 라이프사이클을 전담한다.
11
+
12
+ > `CLAUDE.md`(코드) · `AGENTS.md`(빌드) 에 이은 시각 규약. **Figma 에 종속되지 않는다** — Figma 는 4 가지 입력 소스 중 하나.
13
+
14
+ ## Usage
15
+
16
+ ```
17
+ /vibe.design init # 인터뷰 (디폴트)
18
+ /vibe.design init --from=interview # 대화형 9 섹션 작성
19
+ /vibe.design init --from=code # 기존 코드 토큰 역추출
20
+ /vibe.design init --from=reference --reference=linear # awesome-design-md 시드 선택
21
+ /vibe.design init --from=figma --file=<key> # /vibe.figma 위임 (옵션)
22
+ /vibe.design lint # Stitch 9 섹션 완전성 검증
23
+ /vibe.design verify [--files=<glob>] # 구현 ↔ DESIGN.md hex 드리프트 (v1)
24
+ /vibe.design sync # Figma 연결 시 양방향 동기화 (Should, Phase 2)
25
+ ```
26
+
27
+ ## Philosophy
28
+
29
+ - **Figma 독립**: 모든 서브커맨드는 Figma 없이 동작. Figma 연결 시에만 sync 활성.
30
+ - **권유 > 강제**: DESIGN.md 부재 = 안내 메시지 1 회. `/vibe.run` · `/vibe.verify` 는 막지 않는다.
31
+ - **Stitch 9 섹션 표준**: 외부 에이전트 호환 (Google Stitch, awesome-design-md 생태계).
32
+ - **버전 frontmatter**: `<!-- design-md-version: 1 -->` 로 미래 호환.
33
+ - **루트 배치**: `CLAUDE.md` · `AGENTS.md` 와 동일하게 프로젝트 루트.
34
+
35
+ ## Process
36
+
37
+ > **⏱️ Timer**: 시작 시 `getCurrentTime` 호출, `{start_time}` 으로 기록.
38
+
39
+ ### Subcommand: `init`
40
+
41
+ **진입 조건**: 프로젝트 루트에 `DESIGN.md` 없음 (있으면 덮어쓰기 확인).
42
+
43
+ **경로 결정**:
44
+
45
+ | `--from` | 동작 |
46
+ |---------|------|
47
+ | 미지정 / `interview` | 대화형 9 섹션 인터뷰 (디폴트) |
48
+ | `code` | 기존 코드에서 토큰 역추출 → 인터뷰 보강 |
49
+ | `reference` | `--reference=<slug>` 로 시드 카탈로그 선택 → §1·§2·§3 시드 + §4–§9 단축 인터뷰 |
50
+ | `figma` | `/vibe.figma --emit-design-md` 위임 (Figma MCP 필요) |
51
+
52
+ **공통 출력**:
53
+ - 위치: `<프로젝트 루트>/DESIGN.md`
54
+ - 첫 줄: `<!-- design-md-version: 1 -->`
55
+ - 9 H2 섹션 (Visual Theme / Color Palette / Typography / Components / Layout / Depth / Do's & Don'ts / Responsive / Agent Prompt Guide)
56
+ - 템플릿: `templates/DESIGN.md.template`
57
+
58
+ #### `--from=interview` 흐름
59
+
60
+ 1. 사용자가 9 섹션을 순차 답변 (브랜드 톤, 컬러, 폰트, 컴포넌트 스타일, 그리드, 그림자/뎁스, 금기, 브레이크포인트, 에이전트 가이드)
61
+ 2. 빈 섹션은 템플릿 기본값(주석) 으로 채움
62
+ 3. `DESIGN.md` 저장 + `lint` 자동 실행 → P1 없으면 성공
63
+
64
+ #### `--from=code` 흐름
65
+
66
+ 1. `.vibe/config.json` 의 `stacks[].type` 으로 추출기 결정 (`heuristics/code-extract.md`)
67
+ 2. v1 필수 패턴: **Tailwind config / CSS custom properties / styled-components theme**
68
+ 3. 추출된 토큰을 §2·§3·§4 시드로 사용
69
+ 4. 나머지 6 섹션은 단축 인터뷰 (≤3 질문) 또는 템플릿 기본값
70
+
71
+ #### `--from=reference` 흐름
72
+
73
+ 1. `references/README.md` 시드 카탈로그에서 `--reference=<slug>` 매칭 (`linear`, `vercel`, `stripe` …)
74
+ 2. 시드의 `style-preset` 한 줄 (예: `"minimal, neutral grays + electric purple accent, Inter Display"`) 로 §1·§2·§3 기본값 채움
75
+ 3. §4–§9 는 단축 인터뷰 (≤3 질문)
76
+ 4. 네트워크 차단 환경에서도 동작 (시드는 로컬 시드)
77
+
78
+ #### `--from=figma` 흐름
79
+
80
+ 1. `/vibe.figma --emit-design-md --file=<key>` 호출 (위임)
81
+ 2. 산출물(`DESIGN.md`) 받아서 lint 통과 확인
82
+
83
+ ### Subcommand: `lint`
84
+
85
+ **입력**: 프로젝트 루트 `DESIGN.md`
86
+
87
+ **체크**:
88
+ - 9 섹션 모두 존재 (`lintMissingSections` from `design-md-parser.ts`)
89
+ - frontmatter 버전 주석 존재
90
+ - §2 (Color Palette) 에 최소 1 개 hex 토큰
91
+ - §9 (Agent Prompt Guide) 비어있지 않음
92
+
93
+ **출력**:
94
+ ```
95
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
96
+ ✅ DESIGN.md lint PASS
97
+ 9 sections, 12 color tokens, version 1
98
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
99
+ ```
100
+
101
+ 또는:
102
+
103
+ ```
104
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
105
+ ❌ DESIGN.md lint FAIL (P1: 2)
106
+ Missing: Typography, Responsive
107
+ → Run /vibe.design init to regenerate, or edit DESIGN.md
108
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
109
+ ```
110
+
111
+ **성능 목표**: <200ms (100 줄 DESIGN.md 기준).
112
+
113
+ ### Subcommand: `verify`
114
+
115
+ **입력**:
116
+ - 프로젝트 루트 `DESIGN.md` (없으면 안내 후 종료)
117
+ - `--files=<glob>` (기본: 최근 변경 파일 — `/vibe.verify` 의 changed-files 정책 따름)
118
+
119
+ **체크 (v1 범위)**:
120
+ - `extractHexTokens(DESIGN.md)` → 허용 토큰 셋
121
+ - `findHardcodedColors(files, allowed)` → 허용 셋 밖 hex = P1 후보
122
+
123
+ **v1 비범위** (Phase 2+):
124
+ - spacing / font-family 드리프트
125
+ - HSL/RGB/named color
126
+ - Tailwind arbitrary value `bg-[#xxxxxx]`
127
+
128
+ **출력**:
129
+ ```
130
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
131
+ ✅ DESIGN.md verify PASS (32 files scanned)
132
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
133
+ ```
134
+
135
+ 또는:
136
+
137
+ ```
138
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
139
+ ❌ DESIGN.md verify FAIL (P1: 3 hex drifts)
140
+ src/Button.tsx:42 #FF5733 not in DESIGN.md tokens
141
+ src/Card.tsx:18 #123456 not in DESIGN.md tokens
142
+ src/Nav.tsx:7 #ABCDEF not in DESIGN.md tokens
143
+ → Add to DESIGN.md §2 Color Palette, or replace with token
144
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
145
+ ```
146
+
147
+ **성능 목표**: <1s / 100 파일.
148
+
149
+ ### Subcommand: `sync` (Should, Phase 2)
150
+
151
+ **진입 조건**: `~/.vibe/config.json#figma.token` 존재 + `--file=<key>` 또는 프로젝트에 figma 연결 메타.
152
+
153
+ **v1 동작**: "Phase 2 에서 활성됩니다. 현재는 `/vibe.figma --emit-design-md` 를 사용하세요." 메시지 후 종료.
154
+
155
+ ## Integration
156
+
157
+ | Skill | 통합 지점 |
158
+ |------|---------|
159
+ | `/vibe.run` | UI 스택 진입 시 `DESIGN.md` 없으면 `### DESIGN.md Gate` 에서 권유 (ultrawork 시 silent skip) |
160
+ | `/vibe.verify` | `### 3.2 Visual Drift Detection` 에서 `vibe.design verify` 호출 — P1 → fail |
161
+ | `/vibe.review` | `### Phase 2.5 Visual P1 Baseline` 에서 DESIGN.md 우선, 없으면 WCAG AA 폴백 |
162
+ | `/vibe.figma` | WRITE 는 DESIGN.md 읽어 톤·팔레트 우선, READ 는 `--emit-design-md` 플래그로 출력 |
163
+
164
+ ## Figma Credential Handling (init/sync only)
165
+
166
+ - 토큰 출처: `~/.vibe/config.json#figma.token` (chmod 0o600)
167
+ - 메모리 외 노출 금지. 로그에는 마지막 4 자만 노출 (`****abc1`)
168
+ - `--from=figma` · `sync` 외 서브커맨드는 토큰 읽지 않음
169
+
170
+ ## Output
171
+
172
+ | 파일 | 생성/수정 |
173
+ |-----|---------|
174
+ | `<root>/DESIGN.md` | `init` / `sync` |
175
+ | 콘솔 리포트 | `lint` / `verify` |
176
+
177
+ ## Heuristics & References
178
+
179
+ - 코드 역추출 패턴: `heuristics/code-extract.md`
180
+ - 시드 카탈로그: `references/README.md`
181
+ - 템플릿: `templates/DESIGN.md.template`
182
+
183
+ ARGUMENTS: $ARGUMENTS
@@ -0,0 +1,100 @@
1
+ # vibe.design — Code Extract Heuristics
2
+
3
+ `/vibe.design init --from=code` 가 기존 코드에서 시각 토큰을 역추출할 때 따르는 패턴.
4
+
5
+ ## v1 Required Patterns
6
+
7
+ v1 에서 **반드시 동작**해야 하는 추출기 (테스트 픽스처 보장):
8
+
9
+ ### 1. Tailwind config
10
+
11
+ 대상: `tailwind.config.{ts,js,cjs,mjs}` · `tailwind.config.*` · `app.config.ts` (Nuxt)
12
+
13
+ ```ts
14
+ // tailwind.config.ts
15
+ export default {
16
+ theme: {
17
+ extend: {
18
+ colors: {
19
+ primary: '#5E6AD2',
20
+ accent: '#10B981',
21
+ },
22
+ fontFamily: {
23
+ sans: ['Inter', 'system-ui'],
24
+ },
25
+ spacing: { '18': '4.5rem' },
26
+ },
27
+ },
28
+ };
29
+ ```
30
+
31
+ 추출 결과:
32
+ - `§2 Color Palette` ← `theme.extend.colors.*`
33
+ - `§3 Typography` ← `theme.extend.fontFamily.*`
34
+ - `§5 Layout spacing scale` ← `theme.extend.spacing.*`
35
+
36
+ ### 2. CSS custom properties (CSS variables)
37
+
38
+ 대상: `**/*.css` · `**/*.scss` 의 `:root { --... }`
39
+
40
+ ```css
41
+ :root {
42
+ --color-primary: #5E6AD2;
43
+ --color-bg: #FFFFFF;
44
+ --font-sans: 'Inter', sans-serif;
45
+ --space-md: 16px;
46
+ }
47
+ ```
48
+
49
+ 추출 결과:
50
+ - `--color-*` → `§2 Color Palette` (semantic 이름 유지)
51
+ - `--font-*` → `§3 Typography`
52
+ - `--space-*` · `--size-*` → `§5 Layout`
53
+ - `--shadow-*` · `--elevation-*` → `§6 Depth`
54
+
55
+ ### 3. styled-components theme
56
+
57
+ 대상: `**/theme.{ts,tsx,js}` · `ThemeProvider` 의 `theme={...}`
58
+
59
+ ```ts
60
+ export const theme = {
61
+ colors: { primary: '#5E6AD2', bg: '#FFFFFF' },
62
+ typography: { fontFamily: 'Inter, sans-serif' },
63
+ spacing: [4, 8, 16, 24, 32],
64
+ };
65
+ ```
66
+
67
+ 추출 결과: 위 CSS-vars 와 동일 매핑.
68
+
69
+ ## Documented-only Patterns (v1 비범위, Phase 2+)
70
+
71
+ 문서로만 정리. 실제 추출기는 Phase 2 에서 구현.
72
+
73
+ | 패턴 | 위치 | Phase 2 계획 |
74
+ |-----|------|------------|
75
+ | PostCSS custom properties | `postcss.config.*` + `@custom-media` | Tailwind 추출기 확장 |
76
+ | SCSS variables | `**/*.scss` 의 `$variable` | CSS-vars 추출기 확장 |
77
+ | Emotion theme | `@emotion/react` ThemeProvider | styled-components 추출기 확장 |
78
+ | Vanilla Extract | `*.css.ts` `createTheme` | 신규 추출기 |
79
+ | Panda CSS / Linaria | `panda.config.ts` / `*.linaria.ts` | 신규 추출기 |
80
+ | Flutter ThemeData | `theme.dart` | 모바일 트랙 (Phase 3) |
81
+ | iOS asset catalog | `*.xcassets/Colors.xcassets` | 모바일 트랙 (Phase 3) |
82
+ | Android styles.xml | `res/values/colors.xml` | 모바일 트랙 (Phase 3) |
83
+
84
+ ## Stack 매핑
85
+
86
+ `.vibe/config.json#stacks[].type` 으로 추출기 선택:
87
+
88
+ | Stack | v1 활성 추출기 |
89
+ |------|--------------|
90
+ | `typescript-react` / `typescript-nextjs` | Tailwind + CSS-vars + styled-components |
91
+ | `typescript-vue` / `typescript-nuxt` | Tailwind + CSS-vars |
92
+ | `typescript-svelte` / `typescript-astro` | Tailwind + CSS-vars |
93
+ | `typescript-angular` | CSS-vars (Tailwind 옵션) |
94
+ | `typescript-react-native` | styled-components (Theme 객체) |
95
+ | `dart-flutter` · `swift-ios` · `kotlin-android` | (Phase 3 — 문서만) |
96
+
97
+ ## Fallback
98
+
99
+ 추출 실패 또는 토큰 0 개 → 인터뷰 모드로 자동 폴백 (`--from=interview` 처럼 동작).
100
+ 사용자에게 한 줄 안내: "코드에서 토큰을 찾지 못해 인터뷰로 전환합니다."
@@ -0,0 +1,39 @@
1
+ # vibe.design — Reference Seeds
2
+
3
+ `awesome-design-md` 생태계에서 추출한 **로컬 시드 카탈로그**. 네트워크 없이도
4
+ `/vibe.design init --from=reference --reference=<slug>` 으로 §1·§2·§3 기본값을 시드한다.
5
+
6
+ 각 시드의 `style-preset` 컬럼은 한 문장으로 시각 무드를 요약하며, init 시 §1 Visual
7
+ Theme + §2 Color Palette 의 primary/accent + §3 Typography family 의 기본값으로 변환된다.
8
+ 나머지 §4–§9 는 단축 인터뷰(≤3 질문) 로 채운다.
9
+
10
+ ## Catalog
11
+
12
+ | Slug | Style Preset | 주된 무드 |
13
+ |------|--------------|----------|
14
+ | `linear` | minimal, neutral grays + electric purple accent (#5E6AD2), Inter Display | 도구·정확·조용 |
15
+ | `vercel` | mono-light, pure black/white + zinc neutrals, Geist Sans | 미니멀·기술 |
16
+ | `stripe` | clean white + indigo accent (#635BFF), Sohne / Inter | 신뢰·전문 |
17
+ | `notion` | warm off-white (#FBFBFA) + charcoal text, system serif + sans | 따뜻·문서 |
18
+ | `github` | crisp white/dark + GitHub blue (#0969DA), system-ui | 개발자·정보밀도 |
19
+ | `apple` | premium white + space gray, SF Pro / system | 프리미엄·여백 |
20
+ | `figma` | dark canvas + multi-color accents, Inter | 창의·툴링 |
21
+ | `tailwind` | white + sky/cyan accent (#06B6D4), Inter | 유틸·교육 |
22
+ | `posthog` | playful peach + dark navy, Matter SQ | 친근·실험 |
23
+ | `supabase` | dark + emerald accent (#3ECF8E), Custom Sans | 모던·DB |
24
+ | `arc` | iridescent gradients + soft pastels, Inter Display | 미래·브라우저 |
25
+ | `clerk` | white + purple/violet accent, Inter | 인증·SaaS |
26
+
27
+ ## Adding a new seed
28
+
29
+ 1. 카탈로그 표에 한 줄 추가 (slug · style-preset · 무드)
30
+ 2. `style-preset` 은 한 문장: `<intensity>, <palette>, <font family>`
31
+ 3. 라이선스: 시드는 시각 규약 텍스트만 보유 (브랜드 로고/이미지 미포함)
32
+
33
+ ## How `init --from=reference` uses these
34
+
35
+ 1. `--reference=<slug>` 매칭 → `style-preset` 추출
36
+ 2. `style-preset` 의 palette 토큰 → `DESIGN.md §2 Color Palette` 의 primary/accent 시드
37
+ 3. font family → `§3 Typography` 의 Family 시드
38
+ 4. intensity 문구 → `§1 Visual Theme` 의 한 문단 초안
39
+ 5. `§4–§9` 는 단축 인터뷰 (컴포넌트 radius, spacing scale, breakpoints) 로 보강
@@ -0,0 +1,100 @@
1
+ <!-- design-md-version: 1 -->
2
+ <!-- generated-by: vibe.design -->
3
+ <!-- format: Google Stitch 9-section standard -->
4
+
5
+ # DESIGN.md — Visual Quality SSOT
6
+
7
+ > 이 문서는 프로젝트의 시각 규약 단일 출처(SSOT)입니다.
8
+ > `CLAUDE.md`(코드) · `AGENTS.md`(빌드) 와 동급으로 외부 AI 에이전트가 직접 읽습니다.
9
+ > 수정 시 `/vibe.design lint` 로 9 섹션 완전성을 검증하세요.
10
+
11
+ ## Visual Theme
12
+
13
+ > §1 — 브랜드 톤 한 문단 (분위기, 무드, 핵심 정서).
14
+
15
+ 예시: "Minimal · neutral grays + single accent · 도구처럼 정확하고 조용한 인상."
16
+
17
+ ## Color Palette
18
+
19
+ > §2 — hex 토큰 리스트 (이 섹션의 hex 만 verify 통과). semantic 이름 우선.
20
+
21
+ - Primary: `#000000`
22
+ - Background: `#FFFFFF`
23
+ - Text: `#1A1A1A`
24
+ - Border: `#E5E5E5`
25
+ - Accent: `#5E6AD2`
26
+ - Success: `#10B981`
27
+ - Warning: `#F59E0B`
28
+ - Error: `#EF4444`
29
+
30
+ ## Typography
31
+
32
+ > §3 — 폰트 패밀리, 사이즈 스케일, 행간/자간.
33
+
34
+ - Family: `"Inter", -apple-system, system-ui, sans-serif`
35
+ - Display: 48 / 56 (weight 600)
36
+ - H1: 32 / 40 (weight 600)
37
+ - H2: 24 / 32 (weight 600)
38
+ - Body: 16 / 24 (weight 400)
39
+ - Caption: 14 / 20 (weight 400)
40
+ - Code: `"JetBrains Mono", monospace`
41
+
42
+ ## Components
43
+
44
+ > §4 — 공용 컴포넌트의 시각 규약 (Button / Input / Card / Modal …).
45
+
46
+ - **Button**: radius 8px, padding 12px 20px, transition 150ms ease
47
+ - **Input**: radius 6px, border 1px solid Border, focus ring 2px Accent
48
+ - **Card**: radius 12px, padding 24px, background Background, border 1px solid Border
49
+ - **Modal**: max-width 480px, backdrop blur 8px, radius 16px
50
+
51
+ ## Layout
52
+
53
+ > §5 — 그리드, 간격 스케일, 컨테이너 최대폭.
54
+
55
+ - Spacing scale: `4 / 8 / 12 / 16 / 24 / 32 / 48 / 64 / 96`
56
+ - Container max-width: 1200px
57
+ - Section vertical rhythm: 96px (desktop) / 64px (mobile)
58
+ - Grid: 12-col, gutter 24px
59
+
60
+ ## Depth
61
+
62
+ > §6 — 그림자, elevation, z-index 계층.
63
+
64
+ - elevation-0: none (flat)
65
+ - elevation-1: `0 1px 2px rgba(0,0,0,0.05)`
66
+ - elevation-2: `0 4px 8px rgba(0,0,0,0.08)`
67
+ - elevation-3: `0 12px 24px rgba(0,0,0,0.12)`
68
+ - z-index: base 0, dropdown 10, modal 100, toast 1000
69
+
70
+ ## Do's & Don'ts
71
+
72
+ > §7 — 금기와 권장 사항 (visual P1 의 시드).
73
+
74
+ **DO**
75
+ - 색은 §2 Color Palette 의 토큰만 사용
76
+ - 모든 인터랙티브 요소에 focus ring (2px Accent)
77
+ - spacing 은 §5 scale 에서만 선택
78
+
79
+ **DON'T**
80
+ - hex 하드코딩 (`bg: #FF0000` 금지 — 토큰으로 §2 에 등록)
81
+ - 임의 그림자값 (반드시 §6 elevation 사용)
82
+ - 폰트 패밀리 임시 변경
83
+
84
+ ## Responsive
85
+
86
+ > §8 — 브레이크포인트와 적응 규칙.
87
+
88
+ - Breakpoints: `sm: 640px`, `md: 768px`, `lg: 1024px`, `xl: 1280px`, `2xl: 1536px`
89
+ - Mobile-first 작성, `min-width` 미디어쿼리만 사용
90
+ - Section vertical rhythm: 96px (lg+) / 64px (sm/md)
91
+ - Touch target 최소 44×44px (mobile)
92
+
93
+ ## Agent Prompt Guide
94
+
95
+ > §9 — UI 코드 생성 AI 에이전트를 위한 한 문단 가이드.
96
+
97
+ "UI 코드를 생성/수정할 때 §2 Color Palette · §3 Typography · §5 Layout spacing scale 의 토큰만 사용한다.
98
+ hex 하드코딩 시 §2 에 토큰을 추가하거나 기존 토큰으로 치환한다.
99
+ 신규 컴포넌트는 §4 의 radius · padding 규칙을 따른다.
100
+ 브레이크포인트는 §8 만 사용한다."
@@ -45,6 +45,8 @@ Step 1) 플래그 수집
45
45
  hasNew = args에 "--new" 포함
46
46
  hasTeach = args에 "--teach" 포함
47
47
  hasNewState = args에 "--new-state" 포함 (Branch 3 전용: state 파일 무시하고 새로 그림)
48
+ hasEmitDesignMd = args에 "--emit-design-md" 포함 (Branch 1/2 전용: READ 완료 후 DESIGN.md 출력)
49
+ hasReadDesignMd = 프로젝트 루트에 DESIGN.md 존재 (Branch 3 전용: WRITE 시 톤·팔레트 우선 입력)
48
50
 
49
51
  Step 2) 위치 인자 분류
50
52
  positional = 모든 비-플래그 인자
@@ -218,6 +220,12 @@ Load skill `design-audit`
218
220
  → 5-dimension 점검 (a11y, performance, responsive, theming, AI slop)
219
221
  → P1 finding은 review 큐에 기록 (read-only)
220
222
 
223
+ ⤵ Phase 6.5 (hasEmitDesignMd == true 시)
224
+ → resolved tokens (Color/Typography/Spacing) + design-audit 산출물을
225
+ DESIGN.md (Stitch 9 섹션) 으로 정제해 프로젝트 루트에 저장
226
+ → 첫 줄: `<!-- design-md-version: 1 -->`
227
+ → `vibe.design lint` 자동 통과 확인
228
+
221
229
  ⛔ Phase 6 + design-audit 완료 전까지 "완료 요약" 출력 금지.
222
230
  ```
223
231
 
@@ -295,6 +303,11 @@ Load skill `figma` — Phase 6 (시각 검증 루프, P1=0까지)
295
303
  Load skill `design-audit`
296
304
  → a11y는 항상 검증. 컨벤션 무시 모드여도 접근성은 양보 불가.
297
305
 
306
+ ⤵ Phase 6.5 (hasEmitDesignMd == true 시)
307
+ → resolved tokens + design-audit 산출물을
308
+ DESIGN.md (Stitch 9 섹션) 으로 정제해 프로젝트 루트에 저장
309
+ → 첫 줄: `<!-- design-md-version: 1 -->`
310
+
298
311
  ⛔ Phase 6 + design-audit 완료 전까지 "완료 요약" 출력 금지.
299
312
  ```
300
313
 
@@ -353,8 +366,11 @@ Load skill `design-audit`
353
366
  ✅ 피처명 결정: mdArg 파일명에서 .md 제거한 값을 {feature}로 사용
354
367
 
355
368
  2. Design context 로드 (non-interactive 기본)
369
+ - hasReadDesignMd == true (프로젝트 루트에 DESIGN.md 존재):
370
+ · §1 Visual Theme / §2 Color Palette / §3 Typography 를 톤·팔레트의
371
+ **1 차 입력**으로 사용 (`design-context.json` · plan.md 보다 우선)
356
372
  - Read .vibe/design-context.json
357
- · 존재 → 톤/팔레트 보강용으로 binding
373
+ · 존재 → 톤/팔레트 보강용으로 binding (DESIGN.md 가 있으면 보조)
358
374
  · 없음 → plan.md의 "## 7. Look & Feel" 값으로 임시 컨텍스트 구성
359
375
  - hasTeach == true 인 경우에만 Load skill `design-teach`로 인터랙티브 보강
360
376
 
@@ -284,6 +284,13 @@ Task(subagent_type="ui-antipattern-detector",
284
284
  prompt="Detect UI anti-patterns in: {changed_ui_files}. Check against MASTER.md if exists at .vibe/design-system/{project}/MASTER.md.")
285
285
  ```
286
286
 
287
+ #### Visual P1 Baseline
288
+
289
+ - 프로젝트 루트에 `DESIGN.md` 가 존재하면 **시각 P1 의 1 차 baseline** 으로 사용한다 (§2 Color Palette / §7 Do's & Don'ts).
290
+ - `DESIGN.md` 부재 시 기존 폴백을 사용 (WCAG 2.1 AA + `MASTER.md` + design-audit 기본 5 차원).
291
+ - v1 범위: hex 컬러 드리프트만 P1 후보. spacing / font 드리프트는 Phase 2+ 에서 추가.
292
+ - 안티패턴 검출(⑧) 은 `DESIGN.md §7` 의 "DON'T" 항목을 우선 규칙으로 사용한다.
293
+
287
294
  **findings 통합**: ⑥⑦⑧ findings를 기존 findings[]와 병합 → P1/P2/P3 통합 정렬
288
295
 
289
296
  **⑦ Critical finding 에스컬레이션**: ui-a11y-auditor의 P1 finding은 Review Debate Team(Phase 4.5)에 자동 포함
@@ -69,6 +69,23 @@ Load skill `regress` with: list --feature "{feature-name}"
69
69
 
70
70
  Also load `.vibe/contracts/{feature-name}.md` if present — use it as the contract reference during implementation.
71
71
 
72
+ ### DESIGN.md Gate (UI stack only, before Phase 1)
73
+
74
+ Run immediately after the contract load:
75
+
76
+ ```bash
77
+ # UI stack 감지: .vibe/config.json 의 stacks[].type 중 STACK_TO_SKILLS 가 vibe.design 을 포함하는 것
78
+ # DESIGN.md 존재: 프로젝트 루트
79
+ test -f DESIGN.md
80
+ ```
81
+
82
+ - **DESIGN.md present OR no UI stack** → silently continue
83
+ - **DESIGN.md absent AND UI stack present**:
84
+ - interactive mode: 한 줄 안내 — "💡 UI 작업에 `DESIGN.md` 시각 SSOT 가 없습니다. `/vibe.design init` 으로 생성하면 시각 드리프트가 자동 검출됩니다. (생략 가능 — 1 회만 안내)"
85
+ - ultrawork mode: 무음 스킵 (gate 가 막지 않음)
86
+
87
+ > **권유 > 강제**. DESIGN.md 부재는 절대 vibe.run 을 블록하지 않는다.
88
+
72
89
  ### Core Flow
73
90
 
74
91
  ```
@@ -184,6 +184,26 @@ For each UI scenario in Feature file:
184
184
  - DOM 기반: `div class="nav-wrapper mx-4 flex..."` = 200+ chars
185
185
  - 전자를 사용해야 시나리오 50개도 한 세션에서 검증 가능
186
186
 
187
+ ### 3.2 Visual Drift Detection (--from-design-md)
188
+
189
+ **활성 조건**: 프로젝트 루트에 `DESIGN.md` 존재 + UI 스택. 또는 `--from-design-md` 플래그 명시.
190
+
191
+ **동작**:
192
+
193
+ ```
194
+ Load skill `vibe.design` with: verify --files=<changed-ui-files>
195
+ ```
196
+
197
+ `vibe.design verify` 는 `DESIGN.md §2 Color Palette` 의 hex 토큰 셋을 추출(`extractHexTokens`)하고,
198
+ 변경 파일에서 토큰 밖 hex 하드코딩을 검출(`findHardcodedColors`) 한다.
199
+
200
+ **판정**:
201
+ - P1 drift (토큰 밖 hex) → `/vibe.verify` 실패
202
+ - DESIGN.md 부재 → 안내 후 silent skip (블록하지 않음)
203
+ - v1 범위: hex only. spacing / font 드리프트는 Phase 2+
204
+
205
+ **성능 목표**: <1s / 100 파일 (변경 파일만 스캔 — `/vibe.verify` 기존 정책 일치).
206
+
187
207
  ### 3.5 Step Count (MANDATORY before Quality Report)
188
208
 
189
209
  Read `.vibe/metrics/current-run.json` to obtain the tool-call count from the preceding `/vibe.run` (and any follow-up work in this session). Then append a record to `.vibe/metrics/history.jsonl` and include the count in the Quality Report below.