Mechanical rename produced by scripts/msd-rename.cjs: gsd/Gsd/GSD -> msd/Msd/MSD across contents and paths, upstream package/repo coordinates -> @golem15/msd-core and golem15com/msd-core. Deep links into upstream history, sibling upstream packages, the GSD-2 import feature, CHANGELOG.md and .changeset/ are kept as-is. Hand edits on top: MSD block-letter banner and logos, LICENSE copyright line, package/plugin identity, regenerated lockfile, install-tree fixtures, derived registries and benchmark baseline; migration checksum baseline re-locked (MSD keeps its own install state, so no install had applied the old sums); sort-order and regex-escaped expectations in tests adjusted.
7.7 KiB
UI 페이즈를 디자인하는 방법
목표: 플래너가 작업을 작성하기 전에 간격, 색상, 타이포그래피, 카피라이팅 결정을 확정하는 잠긴 UI 디자인 계약(UI-SPEC.md)을 생성하여 실행 중 임의적인 스타일링 선택으로 인한 시각적 불일관성을 방지합니다.
사전 조건: .planning/ROADMAP.md가 존재해야 합니다. 페이즈에 프론트엔드 또는 UI 작업이 있어야 합니다. 먼저 /msd-discuss-phase N을 실행하는 것을 강력히 권장합니다 — UI 연구자는 CONTEXT.md를 읽어 이미 결정된 사항을 다시 묻지 않습니다.
이 페이즈에 UI 계약이 필요한지 결정
모든 페이즈가 /msd-ui-phase를 필요로 하지는 않습니다. 다음 경우에 사용합니다:
- 페이즈가 새로운 UI 표면(페이지, 흐름, 레이아웃)을 도입할 때
- 여러 컴포넌트를 빌드하며 시각적 일관성이 중요할 때
- 새 프로젝트의 프론트엔드를 시작하며 디자인 시스템 기준선이 필요할 때
- 기존 프로젝트에 중요한 UI 작업을 추가하면서 실행 전에 토큰, 간격, 색상을 확정하고 싶을 때
다음 경우에 건너뜁니다:
- 페이즈가 순전히 백엔드, 인프라, 또는 사용자 대면 출력이 없는 데이터 작업일 때
- 이전 페이즈에서 이미
UI-SPEC.md가 존재하고 이 페이즈가 새로운 표면을 도입하지 않고 동일한 시각적 패턴 위에 빌드될 때
확신이 없으면 안전 게이트가 프롬프트를 표시합니다: workflow.ui_safety_gate가 활성화된 경우(기본값), /msd-plan-phase는 프론트엔드 작업을 감지했지만 UI-SPEC.md가 없을 때 경고하고 먼저 /msd-ui-phase를 실행할지 물어봅니다.
UI 디자인 계약 실행
/msd-ui-phase 2
페이즈 번호가 지정되지 않으면 MSD Core는 현재 페이즈를 대상으로 합니다.
명령은 두 단계로 실행됩니다:
msd-ui-researcher—CONTEXT.md,RESEARCH.md,REQUIREMENTS.md에서 기존 결정을 읽고, 디자인 시스템 상태(shadcncomponents.json, Tailwind 설정, 기존 토큰)를 감지하며, 간격, 색상, 타이포그래피, 카피라이팅, 레지스트리 안전성 다섯 영역에 걸쳐 답하지 않은 디자인 질문만 묻습니다.msd-ui-checker— 결과로 생성된UI-SPEC.md를 일곱 가지 차원에서 검증합니다. 문제가 발견되면 수정 루프가 플래그된 항목만을 대상으로 연구자를 다시 실행합니다(최대 두 번 반복).
출력: .planning/phases/{phase-dir}/의 {padded_phase}-UI-SPEC.md.
UI-SPEC의 적용 범위
연구자는 다섯 영역에 걸쳐 결정을 확정합니다:
| 영역 | 예시 |
|---|---|
| 간격 | 기본 스케일(4px 또는 8px), 그리드 정렬, 컴포넌트 패딩 |
| 색상 | 기본, 강조, 중립 팔레트; 60/30/10 규칙; 다크 모드 고려 사항 |
| 타이포그래피 | 폰트 패밀리, 크기/굵기 스케일 제약, 제목 계층 구조 |
| 카피라이팅 | CTA 레이블, 빈 상태 메시지, 오류 상태 복사, 로딩 인디케이터 |
| 레지스트리 안전성 | shadcn 컴포넌트 검사 프로토콜(아래 참조) |
체커는 일곱 가지 차원(카피라이팅, 시각적, 색상, 타이포그래피, 간격, 레지스트리 안전, 인벤토리 출처)에 대해 스펙을 검증하며 각 차원마다 PASS, FLAG 또는 BLOCK을 반환합니다. (1~4점으로 채점하는 6가지 기둥 루브릭은 이 체커가 아니라 /msd-ui-review의 소급 감사에 속합니다.)
shadcn 초기화
React, Next.js, Vite 프로젝트에서 components.json이 없으면 연구자가 shadcn 초기화를 제안합니다. 흐름:
ui.shadcn.com/create를 방문하여 프리셋(색상, 테두리 반경, 폰트) 구성- 프리셋 문자열 복사
- 실행:
npx shadcn init --preset <paste>
프리셋 문자열은 페이즈와 마일스톤 간에 재현 가능한 MSD Core 계획 아티팩트가 됩니다.
레지스트리 안전 게이트
서드파티 shadcn 레지스트리는 임의 코드를 주입할 수 있습니다. workflow.ui_safety_gate가 활성화된 경우(기본값), 스펙은 비공식 컴포넌트를 설치하기 전에 다음 단계를 요구합니다:
npx shadcn view <component> # 설치 전 소스 검사
npx shadcn diff <component> # 공식 레지스트리와 비교
레지스트리 안전성이 처리되지 않으면 체커가 스펙을 BLOCKED로 표시합니다. 프로젝트에서 shadcn을 사용하지 않거나 대체 검토 프로세스가 있는 경우 /msd-settings를 통해 게이트를 비활성화합니다.
스케치 결과를 초안으로 활용
이미 /msd-sketch --wrap-up을 실행한 경우, UI 연구자는 .claude/skills/sketch-findings-[project]/를 자동으로 로드합니다. 사전 검증된 결정(레이아웃, 팔레트, 타이포그래피, 간격)은 확정된 것으로 처리됩니다 — 연구자가 다시 묻지 않습니다. 실행 시작 시 메모가 표시됩니다:
⚡ Sketch findings detected: .claude/skills/sketch-findings-[project]/SKILL.md
Pre-validated decisions (layout, palette, typography, spacing) should be treated
as locked — not re-asked.
/msd-ui-phase 전에 /msd-sketch --wrap-up을 실행하는 주된 이유입니다: 대화식 디자인 탐색을 계약 입력으로 바인딩합니다.
/msd-ui-review로 소급 시각적 감사
/msd-ui-review는 실행 전이 아닌 실행 후에 실행됩니다. UI-SPEC(또는 스펙이 없을 때는 추상적인 6가지 기둥 기준)에 대해 구현된 프론트엔드를 감사하는 데 사용합니다.
/msd-ui-review # 현재 페이즈 감사
/msd-ui-review 3 # 특정 페이즈 3 감사
프론트엔드 코드가 있는 모든 프로젝트에서 작동합니다 — MSD 프로젝트 초기화가 필요하지 않습니다.
검사 항목(6가지 기둥, 각 1~4점 채점):
- 카피라이팅 — CTA 레이블, 빈 상태, 오류 상태
- 시각적 — 초점, 시각적 계층 구조, 아이콘 접근성
- 색상 — 강조 사용 규율, 60/30/10 준수
- 타이포그래피 — 폰트 크기와 굵기 제약 준수
- 간격 — 그리드 정렬, 토큰 일관성
- 경험 디자인 — 로딩, 오류, 빈 상태 커버리지
출력: 점수와 우선순위 상위 세 가지 수정 사항이 포함된 {padded_phase}-UI-REVIEW.md. msd-browser와 같은 브라우저 MCP 서버가 구성된 경우 감사는 시각적 증거와 함께 스크린샷도 캡처합니다.
스크린샷 저장: 스크린샷은 .planning/ui-reviews/에 저장됩니다. 바이너리 파일이 git에 올라가지 않도록 .gitignore가 자동으로 생성됩니다. 스크린샷은 /msd-complete-milestone 중에 정리됩니다.
페이즈 생명주기에서 권장 위치
/msd-discuss-phase N ← 구현 선호도 확정
/msd-ui-phase N ← 디자인 계약 확정 (프론트엔드 페이즈)
/msd-plan-phase N ← 연구 + 계획 (UI-SPEC.md를 컨텍스트로 읽음)
/msd-execute-phase N ← 병렬 실행
/msd-verify-work N ← 수동 UAT
/msd-ui-review N ← 소급 시각적 감사 (선택 사항이지만 권장)
/msd-ui-phase는 토론과 계획 사이에 위치합니다. 플래너가 UI-SPEC.md를 디자인 컨텍스트로 읽기 때문입니다 — PLAN.md의 작업은 스펙이 확정한 간격 토큰, 색상 변수, 카피라이팅 결정을 참조합니다.