feat(skill): absorb external design skills, restore interview gate, add review route
- Restore the step-0 interview as a mechanical gate the skill explicitly depends on; add harness.md (per-harness question tools, limits, fallbacks) and brief-interview.md (slots, question cards, rounds). - Add 10 reference docs absorbed from external design skills (accessibility, interaction-feel, elevation, color, icons, product-copy, component-systems, critique, change-review, print-email) and extend existing references. - Add a review-only route and two hard-gate clauses (truncated content reachability, three-flashes limit). - design-gate: split tap targets into WCAG 2.5.8 and 44px contract layers, run axe-core when available, and fix false positives found on a real site (decorative alt="", stacked wordmark line count, url-only pages). - lint-skill: fail if the interview gate section or its links disappear. - Ship agents/openai.yaml and THIRD_PARTY_NOTICES.md.
This commit is contained in:
parent
79e79c120b
commit
6805fb2be7
37 changed files with 5688 additions and 128 deletions
388
docs/design-skills-intake-plan-20260924.md
Normal file
388
docs/design-skills-intake-plan-20260924.md
Normal file
|
|
@ -0,0 +1,388 @@
|
|||
# 외부 디자인 스킬 10종 흡수와 인터뷰 복원 계획 · 2026-09-24
|
||||
|
||||
## 0. 요약
|
||||
|
||||
- 외부 디자인 스킬 10종을 모두 원본 저장소에서 확보했다. 9종은 `npx skills add`로 격리 샌드박스에 실제 설치했고, `adapt`는 impeccable 통합 스킬의 하위 커맨드라 단독 설치가 불가능해 클론으로 받았다. 실제 홈의 스킬 디렉터리는 건드리지 않았다.
|
||||
- 10종과 그 의존물(better-interface의 자매 스킬 7종, impeccable 공통 기반)을 전수 추출해 designpaca와 대조했다. 갭 후보 335건 중 우리에게 이미 있는 것은 26건이고, 원칙과 충돌하는 것은 20건이다. 값이 큰 미보유 항목은 66건이다.
|
||||
- 가장 큰 공백은 여섯 가지다. 키보드·폼·라이브 리전 수준의 접근성 구현 계약, 입력에 반응하는 촉감(제스처 물리·상태·피드백), 그림자·깊이 체계, 리뷰 전용 경로(심각도·보고 형식·diff 기반 변경 리뷰), 제품 UI 카피, 색 체계 상세다.
|
||||
- 인터뷰 약화의 직접 원인은 커밋 `45ba92e`(v0.11.0, 2026-09-12)다. 이 커밋이 "위 넷은 거의 항상 묻는다"를 "결과를 크게 바꿀 때만 묻는다"로 바꿨다. 여기에 두 가지가 겹쳤다. 하나는 Claude Code auto 모드의 기본값 전환(2026-08-14, "명확화 질문 없이 계속 작업하도록 유도")이다. 다른 하나는 Codex 기본 지침의 자율 진행 압력이다. 모든 설치 어댑터가 Claude 전용 도구명 `AskUserQuestion`을 그대로 전달한다는 문제도 있다.
|
||||
- 해법은 두 가지다. 첫째, 인터뷰를 "판단"이 아니라 "기계적 게이트"로 바꾼다. 브리프 슬롯이 사용자에게 확인되지 않았으면 묻고, 질문 수단의 유무는 도구 목록으로 판정하고, 물었으면 턴을 끝낸다. 둘째, 하네스별 질문 도구·한도·폴백을 명시한다.
|
||||
- 새 참조 문서 12개를 만들고 기존 문서 13개를 보강한다. SKILL.md 본문은 파이프라인·게이트·라우팅만 맡는 원칙을 유지하고 500줄 이하로 묶는다.
|
||||
|
||||
## 1. 목적·범위·비목표
|
||||
|
||||
**목적**
|
||||
|
||||
1. 10개 스킬과 의존물의 장점을 상세 수준(수치·절차·코드)까지 흡수하되 designpaca의 장점을 하나도 버리지 않는다.
|
||||
2. 0단계 인터뷰가 모든 지원 하네스에서 실제로 일어나게 만든다.
|
||||
3. 하네스별 기능(질문 도구, 계획 도구, 병렬 조사, 브라우저 검증)을 쓰게 만든다.
|
||||
|
||||
**범위**
|
||||
|
||||
- `packages/skill/`의 SKILL.md와 references
|
||||
- `packages/skill/tools/design-gate.mjs`와 그 테스트
|
||||
- `build/ci/lint-skill.mjs`
|
||||
- 로컬 인터뷰 평가 스크립트
|
||||
- `AGENTS.md`의 재발 방지 주의사항
|
||||
- changeset
|
||||
|
||||
**비목표**
|
||||
|
||||
- 릴리스와 태그 push
|
||||
- 실제 홈에 설치된 스킬의 갱신
|
||||
- 설치 어댑터가 하네스별로 본문을 컴파일하는 기능(9절에서 보류 사유를 적는다)
|
||||
- 외부 스킬 원문을 그대로 붙여 넣는 일
|
||||
|
||||
## 2. 조사 방법과 증거
|
||||
|
||||
모든 원자료는 추적되지 않는 `outputs/skill-intake/` 아래에 있다.
|
||||
|
||||
| 산출물 | 위치 |
|
||||
|---|---|
|
||||
| 원본 클론 10종 | `outputs/skill-intake/sources/<slug>/repo` |
|
||||
| 샌드박스 설치본 | `outputs/skill-intake/sandbox/<slug>/` (HOME·USERPROFILE을 샌드박스로 격리) |
|
||||
| 전수 다이제스트 17종 | `outputs/skill-intake/digests/*.md` |
|
||||
| designpaca 인벤토리 | `outputs/skill-intake/our-inventory.md` |
|
||||
| 1차 갭 매트릭스(141건) | `outputs/skill-intake/gap-matrix.md` |
|
||||
| 인터뷰 포렌식 | `outputs/skill-intake/interview-forensics.md` |
|
||||
| impeccable 컨텍스트·하네스 구조 | `outputs/skill-intake/impeccable-context-harness.md` |
|
||||
|
||||
절차는 다음 순서로 진행했다.
|
||||
|
||||
1. 원본을 확정하고 설치했다.
|
||||
2. 다이제스트를 쓰고 우리 스킬과 갭을 대조했다.
|
||||
3. 반박 검증을 돌렸다. 우리 문서가 한국어라 영어 grep만 쓰면 가짜 누락이 생기므로, 한국어 동의어로 다시 찾게 했다.
|
||||
4. 1차 갭 분석이 빠뜨린 항목을 찾는 완전성 비평을 돌렸다.
|
||||
5. 하네스 관련 주장을 1차 출처 원문 인용으로 교차 검증했다.
|
||||
|
||||
에이전트는 모두 80개를 썼고 오류는 0건이었다. 오케스트레이터는 핵심 주장을 직접 다시 확인했다. 확인한 것은 `45ba92e` diff, 우리 문서의 grep 결과, 게이트 임계값, motion.md 문구다.
|
||||
|
||||
### 원본과 라이선스
|
||||
|
||||
| 스킬 | 실제 원본 | 커밋 | 라이선스 |
|
||||
|---|---|---|---|
|
||||
| frontend-design | anthropics/skills `skills/frontend-design` | 34040c9 (2026-09-10) | Apache-2.0 |
|
||||
| apple-design | emilkowalski/skills `skills/apple-design` | 85e8e23 | MIT |
|
||||
| beautiful-shadows | MengTo/Skills `agent-skills/web-design/beautiful-shadows` | a965851 | MIT |
|
||||
| accessibility | addyosmani/web-quality-skills `skills/accessibility` | afa8da9 | MIT |
|
||||
| design-review | superfuture/design-review | d4d2609 | MIT |
|
||||
| emil-design-eng | emilkowalski/skills `skills/emil-design-eng` | 85e8e23 | MIT |
|
||||
| shadcn | shadcn-ui/ui `skills/shadcn` (ui-skills.com은 카탈로그 미러) | 98a1fe6 | MIT |
|
||||
| adapt | pbakaus/impeccable `skill/reference/adapt.md` (통합 스킬의 24개 커맨드 중 하나) | e0881d2 | Apache-2.0 |
|
||||
| better-interface | jakubkrehel/skills `skills/better-interface` + 자매 7종 | 267330e | MIT |
|
||||
| interaction-design | wshobson/agents `plugins/ui-design/skills/interaction-design` (출처 미기재라 가장 널리 쓰이는 것을 선정) | 4236bb9 | MIT |
|
||||
|
||||
MIT와 Apache-2.0은 모두 재사용할 수 있다. 조건은 두 가지다. 번역·재서술한 상당 부분에는 저작권 고지를 남긴다. Apache-2.0 원본은 NOTICE 내용과 변경 사실을 밝힌다. 그래서 `packages/skill/THIRD_PARTY_NOTICES.md`를 신설한다.
|
||||
|
||||
## 3. 보존할 장점과 흡수 가드레일
|
||||
|
||||
다음은 designpaca만의 강점이다. 흡수 과정에서 약해지면 안 된다.
|
||||
|
||||
- **파이프라인**: 0~6단계와 경로 판정(전체·연장·국소), 통과 조건
|
||||
- **레퍼런스 우선**: 1단계 건너뛰기 금지, 국소 레퍼런스 1′
|
||||
- **판정 위계**: 하드 게이트 / 프로젝트 계약 / 스타일 휴리스틱. 외부 스킬 대부분에는 이 구분이 없다
|
||||
- **근거 기록**: 증거 원장, 불확실성 라우팅, design.md 기록
|
||||
- **자율 검증 폐쇄 루프**: design-gate.mjs와 렌더 평가
|
||||
- **로케일 우선**과 한글 조판
|
||||
- **진실성 계약**: 지어낸 수치 금지, placeholder 통과
|
||||
- **성능 예산**
|
||||
|
||||
흡수 규칙은 여섯 가지다.
|
||||
|
||||
1. **층 라벨**: 외부 규칙은 들어오기 전에 판정 위계의 세 층 중 하나로 분류한다. "절대"·"정확히 이 값" 같은 어법은 층에 맞게 바꾼다. 스타일 수치는 "시작값·관찰 후보"로 내린다.
|
||||
2. **출처 표기**: 외부 수치와 코드에는 출처 ID를 단다(예: `EXT-APPLE-FLUID`). 원 출처가 있으면 함께 적는다(예: WWDC 2018 Designing Fluid Interfaces). 근거 없는 매직넘버에는 "실측 조정" 표시를 붙인다.
|
||||
3. **조건부 적재**: 특정 미학·스택·매체(Apple풍, shadcn, 인쇄·이메일, RTL, 다국어)는 트리거 조건이 있을 때만 여는 문서나 절에 둔다.
|
||||
4. **본문 불변 원칙**: 상세 지식은 references에 둔다. SKILL.md에는 라우팅 행과 게이트만 더한다.
|
||||
5. **한국어 적응**: 문서는 한국어 서술체로 쓴다. 카피 예시와 문장부호, 색의 문화적 의미는 ko-KR 기준으로 다시 쓴다(예: 한국 증권 화면은 빨강이 상승이다).
|
||||
6. **모순 해소 기록**: 기존 규칙과 부딪히면 8절의 결정을 따른다. 결정 내용은 해당 문서에 각주로 남긴다.
|
||||
|
||||
## 4. 스킬별 판정 — 우리에게 없던 것과 가져오는 방법
|
||||
|
||||
| 스킬 | 우리에게 없던 핵심 | 가져갈 곳 | 조건부·기각 |
|
||||
|---|---|---|---|
|
||||
| frontend-design | AI 생성 디자인의 5대 제네릭 클러스터(hex 포함, `#D97757`은 Anthropic 자체 액센트라 Claude 계열 도구가 만든 티로 읽힌다는 경고), 방향 결정 단계의 반사실 제네릭 검증, 제품 UI 카피의 목소리, "흩어진 효과보다 오케스트레이션된 한 순간" | antipatterns §1·§3, SKILL.md 2단계 점검 1줄, product-copy.md, motion.md §0 | "스스로 정하고 확인만" 인터뷰 태도 기각 |
|
||||
| apple-design | 인터럽트 가능성(현재 렌더값에서 재시작, 속도 블렌드), 스프링 damping/response, 속도 인계식, 모멘텀 투사(d=0.998), 러버밴드(k=0.55), 제스처 인식(히스테리시스 ~10px, 포인터 캡처, 그랩 오프셋), 멀티모달 피드백 3원칙, reduced-transparency·prefers-contrast, 머티리얼 무게 위계, 입력 경로 지연 감사, 모달 스크림 차등 | interaction-feel.md, elevation.md, accessibility.md | Apple풍 미학을 기본값으로 삼는 것은 기각하고 style-playbook의 조건부 항목으로 둔다 |
|
||||
| beautiful-shadows | 3단 다층 elevation 값(sm 3층, md 6층 등비, lg 6층 비선형 알파), 밀도에 따른 단계 매핑, 오용 규칙 | elevation.md, tokens.md 형태 절에서 링크 | Tailwind 임의값 문법은 CSS로 번역, "색 틴팅 금지"는 휴리스틱으로 격하 |
|
||||
| accessibility | 증거 우선 감사 루프(Lighthouse·axe → 실패 노드 국소화 → 수동 검증 → 재감사, DevTools MCP가 없으면 CLI 폴백), "자동 점수 100 ≠ 준수", WCAG 2.2 신규 기준, 스킵 링크·라이브 리전·포커스 트랩·탭 ARIA 코드, 네이티브 button에 keydown을 달면 이중 실행되는 함정, 깜빡임 초당 3회 한도 | accessibility.md, audit-gate.md 감사 루프, preflight §1 행 | — |
|
||||
| design-review | What·Why·Fix 3요소 finding, 심각도 랭킹과 "전부 나열 금지", Strengths로 마무리, 입력 종류별 진입(URL만 오면 스크린샷 요청), 자동 적용 화이트리스트 | critique.md, 0단계 리뷰 경로 | 익명 텔레메트리·유료 게이팅 전면 배제, 서체 ≤2개·타입 스케일 단계수 규범 기각, "시각자료가 없을 때만 질문" 태도 기각 |
|
||||
| emil-design-eng | 사용 빈도로 애니메이션 여부를 정하는 표(하루 100회 이상·키보드 동작은 무애니), 체감 성능, 트랜지션과 키프레임의 재조준 차이, `scale(0)` 진입 금지, 모달 transform-origin 예외, 툴팁 그룹 즉시 열림, clip-path 레시피 4종(hold-to-delete 등), 드래그 dismiss·멀티터치 가드·마찰, Motion 축약 속성이 하드웨어 가속이 아니라는 점, 경량 CSS 3D, 모션 QA(슬로모·프레임 단위), Before·After·Why 표 | motion.md, interaction-feel.md, critique.md | "ease-in 절대 금지"는 진입 한정 각주로, velocity 0.11 같은 매직넘버는 실측 조정 시작값으로 |
|
||||
| shadcn | 기존 컴포넌트 우선과 합성 규칙(Dialog Title 필수, Avatar Fallback, Group 안에 Item), Base UI와 Radix의 API 차이, `components.json`을 먼저 읽기, `--dry-run`·`--diff` 안전 병합, `--overwrite`는 명시 승인 필요, "추측하지 말라·사용자 대신 기본값을 고르지 말라" 하드 트리거 문구, 행동 계약형 eval | component-systems.md(감지 시 조건부), 6절 인터뷰 문구 강도, 7절 평가 설계 | Tailwind 위생 10규칙은 Tailwind 프로젝트 조건부 요약만, CLI 플래그와 레지스트리 스키마는 기각 |
|
||||
| adapt (impeccable) | 입력 방식을 화면 크기와 별개 축으로 다루는 pointer·hover 쿼리 코드, `srcset`·`sizes`·`picture`, 컨테이너 쿼리 코드, 커스텀 컨트롤 제스처 검증(레이아웃 통과가 제스처 통과가 아니다, 증거 출처 명시, 미검증은 보고된 공백), 인쇄·이메일 적응, 표를 카드로 바꾸는 변환, 브라우저 표면(selection·caret·scrollbar) 테마화 | layout.md §4, images.md, audit-gate.md, print-email.md, antipatterns | 모바일 하단 내비 기본값은 기각(우리 결정표가 더 엄밀하다) |
|
||||
| impeccable 공통 기반 | 컨텍스트 수집 순서(스캔 → 가설 → 질문 라운드 상한 → 질문 수단의 기계적 판정 → 무응답 시 추론에 라벨을 붙이고 첫 응답에 고지), "저장소 증거는 가설이지 사용자 승인이 아니다", `{{ask_instruction}}`을 하네스 19개에 맞춰 빌드 시점에 치환 | 6절 인터뷰 설계의 뼈대, harness.md | 빌드 시점 컴파일은 보류(9절) |
|
||||
| better-interface + 자매 7종 | 에스컬레이션 트리거 13개(규칙 소유와 심각도 부여를 분리), 저비용 수정 사다리(삭제 → 플랫폼 → 재사용 → 값 교정 → 추가), 미검증·미점검 구분, 스코프 축소 규율, 증거 방향성 제약. 자매 스킬 쪽은 아래 여섯 영역 | critique.md, change-review.md, accessibility.md, color.md, icons.md, product-copy.md, typography·layout·tokens·motion 보강 | "근사가 아니라 정확히 이 값" 규율 기각, 고정 글자 크기·행간 하한 기각, finding 상한 15 수치 기각(절차만 채택) |
|
||||
| interaction-design | 토스트, 스켈레톤 시머, 스와이프 동작, 당겨서 새로고침, 낙관적 업데이트, 토글, 글자 수 카운터 레시피. 스프링 프리셋 6종과 cubic-bezier 근사, 클린업 규율, GSAP·WAAPI·View Transitions 예제(CSS 대안 병기), 스크롤 throttle | interaction-feel.md, motion.md §4 | 리플은 기본값에서 빼고 조건부로, "질문 없이 코드 기본값으로 고정" 태도 기각 |
|
||||
|
||||
better-interface 자매 스킬 쪽에서 가져오는 여섯 영역은 다음과 같다.
|
||||
|
||||
- **키보드 위젯 계약**: tabindex, roving tabindex, APG 패턴표, inert, SPA 라우트 포커스
|
||||
- **폼**: autocomplete, inputmode, 붙여넣기 허용, 제출 버튼 비활성화 금지, disabled와 aria-disabled 구분, 24px 원 간격 예외, forced-colors
|
||||
- **색**: 램프, APCA, 그라디언트 보간 공간, 다크모드 재조정, 전환 메커니즘, 색의 문화적 의미
|
||||
- **레이아웃**: RTL과 논리 속성, 그루핑 1:2 비율, 점진적 공개 레시피, 컨트롤 식별
|
||||
- **타이포**: text-wrap, 밑줄 메트릭, text-box trim, 문장부호, 잘린 텍스트의 도달 수단, 선택 가능성
|
||||
- **UI 마감**: 아이콘 도메인, 동심 radius, 광학 정렬, 테두리를 대신하는 그림자, 테마 전환 트랜지션 억제
|
||||
- **카피**: 용어 일관성, 톤과 위험의 매트릭스, 오류·빈 상태 문구 내용, 문장 조각 조립 금지
|
||||
- **변경 리뷰**: diff 스코프, 제거된 쪽 읽기, Introduced·Regression·Pre-existing 구분
|
||||
|
||||
## 5. 인터뷰 약화 — 확인된 원인과 하네스 사실
|
||||
|
||||
### 5-1. 스킬 쪽 원인 (git과 설치본으로 확인)
|
||||
|
||||
| 커밋 | 방향 | 변경 |
|
||||
|---|---|---|
|
||||
| `4e1e5f0` | 강화 | 인터뷰 절 신설, "가정으로 채우지 마라", AskUserQuestion으로 한 번에 묻기 |
|
||||
| `b92853b` | 강화 | "위 넷은 거의 항상 묻는다", 브랜드 색 질문은 "결과를 되돌릴 수 없게 바꾸는 질문" |
|
||||
| **`45ba92e`** (v0.11.0, 2026-09-12) | **완화** | "브리프·기존 코드·브랜드 자산에서 답을 확인할 수 없고 결과를 크게 바꿀 때만 묻는다", 브랜드 색 질문도 조건부로 바뀜. 커밋 본문과 CHANGELOG에 이 변경 기록이 없다 |
|
||||
|
||||
- 현재 질문을 억제하는 문구의 위치는 다음과 같다. `SKILL.md:91`(로케일), `SKILL.md:148`(인터뷰 전체의 조건), `SKILL.md:161`, `SKILL.md:164`(브랜드 색), `SKILL.md:181`("관례가 명확한 것은 묻지 않는다"), `SKILL.md:187`("되돌리기 쉬운 습작이면 가정"), `references/images.md:22`.
|
||||
- `~/.agents/skills/designpaca/SKILL.md.orig`가 완화 이전 문구를 보존하고 있다. 강제 업데이트가 이전 인터뷰 절을 덮어썼다는 직접 증거다.
|
||||
- `~/.gemini/antigravity/skills/designpaca`만 v0.8.0으로 남아 있다. 하네스마다 질문 빈도가 달라 보이는 한 원인이다.
|
||||
- `packages/core/src/targets/*.ts`의 어댑터 10개가 모두 본문을 변형 없이 복사한다. SKILL.md에는 하네스 언급이 0건이고, `AskUserQuestion`은 144행 한 곳에만 나온다.
|
||||
|
||||
### 5-2. 하네스 쪽 사실 (2026-09-24, 1차 출처 인용으로 검증)
|
||||
|
||||
| 하네스 | 질문 도구와 한도 | 쓸 수 있는 조건 | 질문을 억누르는 압력 |
|
||||
|---|---|---|---|
|
||||
| Claude Code | `AskUserQuestion`: 질문 1~4개, 선택지 2~4개, header 12자, multiSelect, preview | 메인 세션만. Agent 도구로 띄운 서브에이전트에서는 쓸 수 없다(공식 문서). `context: fork` 스킬에서도 깨진다(이슈 #19751). 어떤 모드에서도 자동 승인되지 않는다 | auto 모드는 Pro·Max·Team에서 2026-08-14부터 기본값이다. 공식 문서: "nudges Claude to keep working without stopping for clarifying questions, though Claude still asks when your prompt or a skill explicitly relies on it." 도구 설명 자체도 "합리적 기본값으로 풀 수 있으면 묻지 말라"는 취지다 |
|
||||
| Codex | `request_user_input`: 질문 1~3개(1개 권장), 선택지 2~3개, 추천안을 맨 앞에 두고 "(Recommended)" 표기, "Other"는 클라이언트가 자동 추가 | Plan 모드에서만 기본 활성. Default 모드는 개발 중인 `default_mode_request_user_input` 플래그가 필요하다. `codex exec`에서는 거부된다. 응답이 없으면 60~240초 뒤 빈 답이 자동 제출된다 | 내장 프롬프트(gpt_5_1·5_2)의 "Autonomy and Persistence": 턴 안에서 끝까지 처리하라. Codex Prompting Guide: "Bias to action … do not end your turn with clarifications unless truly blocked." |
|
||||
| Gemini CLI | `ask_user`: 질문 1~4개, choice·text·yesno, multiSelect | Plan 모드가 기본 활성. Plan을 빠져나가면 YOLO로 전환된다. YOLO에서는 빈 답으로 자동 통과되는 버그가 있다(#18540) | 실행 단계가 자동으로 넘어간다 |
|
||||
| VS Code Copilot | `askQuestions` (질문 캐러셀, v1.110부터 코어) | agent 모드 | cloud agent는 비동기라 대화가 없다 |
|
||||
| Cursor | Plan 모드의 질문 흐름(공식 문서에 도구 이름이 없고 `AskQuestion`은 포럼 보고뿐) | Plan 모드 전용(하네스가 주입), Agent 모드에서는 쓸 수 없다 | — |
|
||||
| Windsurf, Antigravity, Zcode, AGENTS.md 경로 | 공개 문서로 확인된 구조화 질문 도구 없음 | 채팅으로 묻는 것은 가능 | Antigravity "Always Proceed", Zcode의 일반 질문 5분 타임아웃(2차 조사, 재확인 필요) |
|
||||
|
||||
결론은 이렇다. 조건부 문구가 판단을 모델의 자기평가에 맡겼다. 거기에 하네스가 "합리적 기본값으로 진행하라"고 압박하니, 모델은 거의 항상 질문을 생략하는 쪽으로 결론 낸다. Claude Code 문서가 말하는 탈출구는 "스킬이 명시적으로 의존하면 묻는다"다. 지금 스킬은 인터뷰에 명시적으로 의존한다고 선언하지 않는다.
|
||||
|
||||
## 6. 인터뷰·하네스 설계 (확정)
|
||||
|
||||
### 6-1. SKILL.md 상단에 인터뷰 게이트를 둔다
|
||||
|
||||
인터뷰 게이트를 `## 우선순위` 바로 뒤, 본문 앞부분에 둔다. 0단계 본문의 인터뷰 절은 이 게이트를 참조하도록 줄인다. 오케스트레이터가 확정한 초안은 다음과 같다. 구현 시 표현은 다듬을 수 있지만 여섯 개의 규칙은 바꾸지 않는다.
|
||||
|
||||
```markdown
|
||||
## 인터뷰 게이트 — 이 스킬은 사용자 답변에 명시적으로 의존한다
|
||||
|
||||
이 스킬은 0단계 사용자 인터뷰에 명시적으로 의존한다(This skill explicitly relies on a step-0 user interview).
|
||||
하네스가 자율 진행을 권해도(auto 모드, bias to action, "합리적 가정으로 진행") 이 게이트는 풀리지 않는다.
|
||||
업종 성격·목표 행동·톤·브랜드 자산은 관례적 기본값이 있는 선택이 아니라 사용자만 정할 수 있는 결정이고,
|
||||
이것이 비어 있는 브리프는 "진짜로 막힌" 상태다.
|
||||
|
||||
1. 먼저 스캔한다. design.md·토큰·브랜드 자산·저장소 문서로 브리프 슬롯을 채운다. 저장소에서 읽은 값은 가설이지 사용자 승인이 아니다.
|
||||
2. 필수 슬롯이 사용자 발화나 사용자가 준 자료로 확인되지 않았으면 묻는다. "결과를 크게 바꾸는가"를 스스로 판정해 생략하지 않는다.
|
||||
3. 질문 수단은 판단이 아니라 기계적으로 판정한다. 도구 목록에 구조화 질문 도구가 있으면 그것으로, 없고 대화형이면 평문으로 묻는다. "사용자가 없다·계속 진행하라"는 시스템 지시는 이 세션에 답할 사람이 없다는 증거가 아니다.
|
||||
4. 물었으면 턴을 끝낸다. 답을 받기 전에는 1단계 조사·파일 생성·구현을 시작하지 않는다.
|
||||
5. 서브에이전트로 실행 중이면 브리프 카드 초안과 질문을 호출자에게 반환하고 멈춘다. 비대화형 실행에서 질문이 오류·시간 초과·빈 답으로 끝났을 때만 가정으로 진행한다. 그때는 모든 가정에 라벨을 붙여 첫 응답에서 밝히고 design.md 미확정 목록에 올린다.
|
||||
6. 예외는 사용자의 명시적 위임("알아서 해줘", "묻지 말고 진행")뿐이다. 그때도 가정 목록을 말하고 기록한다.
|
||||
|
||||
하네스별 질문 도구와 한도는 references/harness.md, 슬롯·질문 카드·모순 정리는 references/brief-interview.md.
|
||||
```
|
||||
|
||||
삭제하거나 고칠 문구는 다음과 같다.
|
||||
|
||||
- `SKILL.md:148`: "결과를 크게 바꿀 때만 묻는다"를 삭제한다. "이미 알려진 사실을 다시 묻지 않는다"는 남기되 "알려진 사실 = 사용자 발화 또는 제공 자료에 명시된 것"으로 정의한다.
|
||||
- `SKILL.md:161`, `SKILL.md:164`: 브랜드 자산은 필수 슬롯으로 되돌린다. 파일로 확인되면 묻지 않는다.
|
||||
- `SKILL.md:187`: "되돌리기 쉬운 습작이면"을 삭제한다(주관적 탈출구).
|
||||
- `SKILL.md:181`: "관례가 명확한 것"을 "코드·검색으로 확인되는 사실"로 좁힌다.
|
||||
- `references/images.md:22`: 같은 기준으로 맞춘다.
|
||||
- frontmatter description에 "브리프가 비면 먼저 사용자에게 묻는다"를 한 구절 더한다(700자 한도 안에서).
|
||||
|
||||
### 6-2. 브리프 슬롯 (references/brief-interview.md)
|
||||
|
||||
| 슬롯 | 필수 조건 | 확정 기준 | 모를 때 |
|
||||
|---|---|---|---|
|
||||
| 무엇을 (산출물·범위) | 항상 | 요청 문장 | 묻는다 |
|
||||
| 누구에게·목표 행동 (복수면 우선순위) | 전체·연장 | 사용자 발화 | 묻는다(multiSelect 후 우선순위 확인) |
|
||||
| 업종·성격 | 전체, 연장의 새 화면 | 사용자 발화·제공 문서 | 묻는다(스캔 결과는 추천 선택지로) |
|
||||
| 톤 | 전체. 연장은 design.md에 없을 때 | 사용자 선택 | 묻는다(선택지마다 모션 강도·프리셋 영향을 적는다) |
|
||||
| 고유명사·실제 값 | 화면에 나오면 항상 | 사용자 제공 | 묻고, 아직 없다고 하면 명시적 placeholder |
|
||||
| 기존 브랜드 자산 (색·로고·서체) | 전체 | 파일 또는 사용자의 "없음" | 묻는다 |
|
||||
| 좁은 화면 내비 | 내비가 있는 다중 화면 | 정보 구조·라벨이 정해진 뒤 | 2라운드에서 묻는다 |
|
||||
| 기본 언어 | 항상 | OS 로케일 명령 | 읽지 못할 때만 묻는다 |
|
||||
|
||||
경로별로 적용 범위가 다르다.
|
||||
|
||||
- **국소 경로**: design.md가 답하면 묻지 않는다. 브랜드나 톤을 새로 정해야 하면 경로를 올리고 묻는다.
|
||||
- **리뷰 경로**: 범위와 입력(스크린샷·URL·diff)만 묻는다.
|
||||
- **라운드 수**: 한 라운드가 기본이다. 2라운드는 답이 서로 모순될 때, 고유명사가 필요할 때, 내비를 정할 때만 연다.
|
||||
|
||||
### 6-3. 하네스별 질문 방법 (references/harness.md)
|
||||
|
||||
| 하네스 | 방법 | 예산과 배치 |
|
||||
|---|---|---|
|
||||
| Claude Code | `AskUserQuestion` | 질문 4개: 업종·성격 / 목표 행동(multiSelect) / 톤(preview로 ASCII 목업 비교) / 브랜드 자산. 고유명사는 Other 자유 답이나 2라운드로 |
|
||||
| Codex (Plan 모드, 또는 Default + 플래그) | `request_user_input` | 질문 3개(업종·성격, 목표 행동, 톤), 선택지 2~3개. 나머지 슬롯은 같은 턴에 평문 한 블록 |
|
||||
| Codex (Default 모드, 도구 없음) | 평문 번호 질문 + 턴 종료 | 첫 응답에서 "긴 디자인 작업은 Plan 모드에서 시작하면 선택지 UI로 답할 수 있다"를 한 줄 안내 |
|
||||
| Gemini CLI | `ask_user` | 질문 4개, choice·text 혼합 |
|
||||
| VS Code Copilot | `askQuestions` | 질문 4개 |
|
||||
| Cursor | Plan 모드면 하네스가 주입한 질문 흐름, Agent 모드면 평문 | — |
|
||||
| 그 밖의 하네스, AGENTS.md 경로 | 평문 번호 질문(선택지는 알파벳, 자유 답 허용) + 턴 종료 | — |
|
||||
|
||||
빈 답 처리도 정해 둔다. 자동 해제로 들어온 빈 답(Codex의 autoResolution, Gemini YOLO)은 "무응답"으로 취급한다. 규칙 5의 가정 처리로 넘기고, 선택지를 고른 것으로 해석하지 않는다.
|
||||
|
||||
### 6-4. 하네스 기능 활용 (references/harness.md)
|
||||
|
||||
- **단계 추적**: 하네스의 계획·할 일 도구로 0~6단계를 항목화하고 단계 보고와 연결한다. 도구 이름은 P0에서 1차 출처로 확인한다.
|
||||
- **병렬 조사**: 서브에이전트를 지원하면 1단계의 R1·R2·R3 실측을 나눠 맡긴다. 방향 결정과 판정은 메인 세션이 한다. 서브에이전트는 사용자에게 물을 수 없으므로 0단계는 반드시 메인 세션에서 끝낸다. 오케스트레이터가 워커에게 디자인 구현을 넘길 때는 브리프 카드를 작업 패킷에 넣는다.
|
||||
- **시각 검증**: 브라우저 MCP(chrome-devtools의 `lighthouse_audit`·`take_snapshot`·스크린샷, playwright)가 있으면 우선 쓴다. 없으면 `designpaca tools` 브라우저와 design-gate.mjs를 쓴다. 증거 출처(에뮬레이션·실기기·엔진명)는 보고에 적는다.
|
||||
- **비대화형**: `claude -p`, `codex exec`, CI는 질문 수단이 없는 실행이다. 게이트 규칙 5를 따른다.
|
||||
|
||||
### 6-5. 회귀 방지
|
||||
|
||||
1. `build/ci/lint-skill.mjs`에 두 가지 검사를 더한다. SKILL.md에 인터뷰 게이트 절과 "명시적으로 의존한다" 문구가 있는지, `references/harness.md`·`references/brief-interview.md` 링크가 있는지. 없으면 오류다.
|
||||
2. 로컬 인터뷰 평가 `build/eval/interview/`를 만든다. 시나리오는 다섯 가지다.
|
||||
- 브리프 없는 새 사이트 요청 3종
|
||||
- design.md가 있는 연장
|
||||
- "알아서 해줘" 위임
|
||||
- 버튼 하나를 고치는 국소 요청
|
||||
- 리뷰 요청
|
||||
|
||||
러너는 두 개다. Claude Agent SDK는 `canUseTool`로 AskUserQuestion 호출을 기록한다. `codex exec`는 질문 도구가 없으니 평문 질문이 나오고 파일이 생성되지 않았는지 본다.
|
||||
|
||||
통과 기준도 두 방향이다. 묻는 시나리오에서는 첫 사용자 가시 행동이 질문이고 답 전에 파일 생성이 0건이어야 한다. 묻지 않을 시나리오(국소·위임)에서는 인터뷰가 없어야 한다. 기준선은 v0.12.1이다. 실제 모델 호출 비용이 들고 인증이 필요하므로 CI에는 넣지 않는다.
|
||||
3. `AGENTS.md`의 주의사항에 한 항목을 더한다. "0단계 인터뷰 문구를 조건부로 완화하지 않는다. 행동을 바꾸는 변경은 changeset에 명시한다(`45ba92e` 사고)."
|
||||
|
||||
## 7. 문서 구조 변경
|
||||
|
||||
### 7-1. 새 references 12개
|
||||
|
||||
| 파일 | 내용 | 여는 시점 |
|
||||
|---|---|---|
|
||||
| `brief-interview.md` | 슬롯표, 스캔 → 가설 → 질문 카드 템플릿(하네스별), 모순 정리, 가정 기록 형식, 꽃집 실측 사례 상세 | 0단계 |
|
||||
| `harness.md` | 5-2와 6-3·6-4의 표(확인 날짜와 출처 포함), 비대화형·서브에이전트 규칙, 재확인 주기 | 0단계, 하네스 기능을 쓸 때 |
|
||||
| `accessibility.md` | 판정 원칙, 시맨틱·네이티브 우선, 접근 가능한 이름(Label in Name), 포커스(focus-visible, 3:1, 가림 방지, forced-colors), 키보드(tabindex, roving, APG 패턴표, 트랩·inert·복귀, SPA 라우트), 구조(스킵 링크, 랜드마크), 폼(autocomplete·inputmode 표, 붙여넣기, 제출 버튼, disabled와 aria-disabled, 오류 패턴과 타이밍, 3.3.7, 3.3.8), 라이브 리전 선택, 히트 영역(2.5.8 간격 예외, 충돌, 장식 레이어의 pointer-events), 미디어, 깜빡임, 호버 콘텐츠 1.4.13, 드래그 대안 2.5.7, 선호 신호, 감사 루프 | 4단계 구현, 5단계 |
|
||||
| `interaction-feel.md` | 입력 축의 모든 것. 반응성과 지연 감사, 상태 매트릭스, 누름 피드백, 1:1 추적, 인터럽트 가능성, 제스처 인식, 속도 인계·모멘텀 투사·러버밴드 식, 스프링 3표기 체계와 변환, dismiss 임계값, hold-to-confirm, 스와이프 동작과 대체 조작, 당겨서 새로고침(조건부), 낙관적 업데이트, 토스트, 토글, 멀티모달 피드백과 햅틱(Vibration API의 지원 범위 포함), 엄지 영역, 커스텀 컨트롤 제스처 QA | 4-4, 5단계 |
|
||||
| `elevation.md` | 3단 다층 그림자 시작값, 밀도에 따른 단계 매핑, radius와 짝짓기, 테두리를 대신하는 그림자(라이트 3층, 다크 1층), 다크모드의 깊이, 광원 일관성, 오용 휴리스틱, 머티리얼 위계와 vibrancy(조건부), 반투명 겹침 금지, 스티키 헤더 마스크, materialize 전환, reduced-transparency 폴백 | 3단계 토큰, 4-2 재질 |
|
||||
| `color.md` | 원시값과 시맨틱의 2계층(선택), 램프 생성, OKLCH 파생, 그라디언트 보간 공간, 다크모드 재조정 3항목, 전환 메커니즘(prefers-color-scheme·class·light-dark()), P3(조건부), 색의 문화적 의미(ko-KR), 대비 수정 절차(명도 먼저), 역할 확장 목록, prefers-contrast, 뷰당 채색 액션 하나, APCA(보조 지표) | 3단계 |
|
||||
| `icons.md` | 스트로크와 글자 굵기 맞춤, currentColor, 외곽선·채움 상태 쌍, 16px 렌더 검증, 광학 정렬, RTL 뒤집기, 아이콘 전환, 세트 일관성, 아이콘 전용 버튼의 이름(accessibility.md로 연결) | 4-1 |
|
||||
| `product-copy.md` | 기존 보이스·용어 확인, 용어 일관성, 톤과 위험의 매트릭스, 독자 지칭, 기기 동사, 문장 조각 조립 금지(한국어 조사 처리 포함), 버튼 동사와 확인 버튼의 결과 반복, 흐름 어휘, 토글 라벨, 오류·빈 상태 문구, 링크 텍스트, placeholder는 라벨이 아니다 | 4단계 카피, 5단계 |
|
||||
| `component-systems.md` | 감지(`components.json`, Radix·Base UI 의존성), 기존 컴포넌트 우선, 합성 규칙, Base UI와 Radix API 차이, designpaca 역할 토큰과 CSS 변수 매핑, 안전 병합, 파괴적 명령 승인, Tailwind 프로젝트 조건부 요약, 화면 유형별 조합 참고(템플릿화 경고 포함) | 컴포넌트 라이브러리를 감지했을 때 |
|
||||
| `critique.md` | 리뷰 경로. 입력별 진입, 표면별 깊이, finding의 What·Why·Fix, 심각도 매핑, 에스컬레이션 트리거, 저비용 수정 사다리, 동일 원인 병합, 스코프 규율, 미검증·미점검, 증거 방향성, Strengths와 가장 큰 효과를 낼 변경 하나, 자동 적용 범위, 톤 | 리뷰 경로, 5단계 보고 |
|
||||
| `change-review.md` | diff·PR 리뷰. 작업 트리 우선 스코프 계산, 제외 경로, 파급 범위(1홉, 토큰은 2홉), 제거된 쪽 읽기(회귀 신호 10종과 등가 대체 7종), Introduced·Regression·Pre-existing, 읽기 전용 계약, 까다로운 저장소 상태, 이름 변경, 스코프 블록 | 변경 리뷰 요청 |
|
||||
| `print-email.md` | 인쇄(기존 4-5를 일반화), 이메일(600px, 표 기반 레이아웃, 인라인 CSS, 버튼형 CTA, 호버 의존 금지) | 브리프가 인쇄·이메일을 명시할 때 |
|
||||
|
||||
심각도는 판정 위계에 그대로 대응시킨다.
|
||||
|
||||
| 심각도 | 기준 |
|
||||
|---|---|
|
||||
| Blocking | 하드 게이트 위반 |
|
||||
| Important | 프로젝트 계약 위반 또는 과업 방해 |
|
||||
| Polish | 스타일 휴리스틱 관찰 |
|
||||
|
||||
미검증(Not verified)은 finding으로 세지 않는다.
|
||||
|
||||
### 7-2. 기존 문서 보강
|
||||
|
||||
| 파일 | 추가 |
|
||||
|---|---|
|
||||
| `motion.md` | 사용 빈도 게이트 표, 체감 성능, 오케스트레이션된 한 순간, 코드 B의 "기본값" 문구 명확화, ease-in 각주, 크로스페이드 blur 보정, 트랜지션과 키프레임, `scale(0)` 금지, 모달 transform-origin 예외, 툴팁 그룹, clip-path 조건부 레시피, 드로어 이징(조건부), 클린업 규율, WAAPI·GSAP(바닐라) 코드, Motion 축약 속성, 경량 CSS 3D, will-change 표, `transition: all` 금지, 테마 전환 억제 레시피, 모션 QA, 실기기 확인, 스크롤 throttle. 기존 입력 축 내용(코드 A 등)은 옮기지 않고 interaction-feel.md와 서로 링크한다(기존 규칙 보존) |
|
||||
| `layout.md` | pointer·hover 코드, 컨테이너 쿼리 코드, 그루핑 비율(휴리스틱), 뷰당 주요 액션 하나, 점진적 공개 레시피, 컨트롤과 정적 텍스트 구별, 광학 정렬, CSS 특정성 일반 원칙, 표 숫자 정렬, 모바일 표를 카드로, 데스크톱 어포던스(조건부), RTL·논리 속성(RTL 로케일일 때), 가짜 현지화(다국어일 때), em·rem 브레이크포인트 근거, 전문가 도구의 밀도 보존, 브레드크럼(조건부) |
|
||||
| `typography.md` | text-wrap balance·pretty, widow·orphan, 밑줄 메트릭, text-box trim, 문장부호(ko-KR 기준), 헤딩 내림차순, 잘린 텍스트의 도달 수단, 선택 가능성, justify 제한, Display와 Text 변형, font-synthesis, OpenType 추가 기능, 동적 값의 tabular-nums, "자간·행간은 크기의 함수", 타입을 능동적 디자인 요소로 쓰기 |
|
||||
| `tokens.md` | 동심 radius 식, elevation·color 문서 링크, 역할 확장 자리, 조건부 드로어 이징 |
|
||||
| `images.md` | `srcset`·`sizes`·`picture`, alt 5분류, 이미지 1px 중립 외곽선(휴리스틱) |
|
||||
| `antipatterns.md` | frontend-design 5대 클러스터, 가운뎃점 메타 문자열, 화살표 접미사, 장식용 모노 라벨, 균일 radius와 흐린 그림자 카드 키트, 제목의 "단어 — 조각", Simplicity≠Minimalism, `scale(0)`, `transition: all`, 붙여넣기 차단, 내부 용어 누출, 테마화하지 않은 브라우저 표면, 브로드시트 클러스터 |
|
||||
| `preflight.md` | 접근성 표 행(accessibility.md 링크), 모달 스티키 푸터, 제스처·모션 QA, 리스크 압축 질문, 변형 상태 매트릭스, 반사실 점검을 2단계로 옮긴 사실 |
|
||||
| `audit-gate.md` | 접근성 감사 루프, 제스처 증거 출처, 미검증 상태값, backdrop-filter 최악 콘텐츠 검사, 증거 방향성, critique.md 보고 형식 연결 |
|
||||
| `mobile-app-ux.md` | 햅틱, 스와이프 대체 조작, 당겨서 새로고침(조건부), 드래그 컨트롤 QA, 엄지 우선 일반화, iOS 입력 줌 두 해법 |
|
||||
| `svg-filters.md` | vibrancy 가독성, 반투명 겹침, reduced-transparency, 무거운·가벼운 머티리얼 |
|
||||
| `style-playbook.md` | 플랫폼 네이티브 질감(Apple풍) 조건부 항목 |
|
||||
| `design-foundations.md` | Simplicity≠Minimalism, 개인화(웹앱 조건부) |
|
||||
| `evidence-ledger.md` | 외부 출처 ID(`EXT-*`)와 적용 범위 |
|
||||
|
||||
### 7-3. SKILL.md 변경
|
||||
|
||||
- 인터뷰 게이트 절을 신설하고(6-1), 0단계 인터뷰 절을 줄인다.
|
||||
- 경로 표에 **리뷰 경로**를 더한다. 0(스코프) → 5′(critique.md 형식의 감사) → 보고. 구현은 사용자가 요청하면 국소나 연장 경로로 올린다. 변경 리뷰는 change-review.md로 보낸다.
|
||||
- 2단계에 반사실 제네릭 점검 한 줄: "이 선택이 다른 업종의 브리프에도 그대로 나왔을 것인가."
|
||||
- 4단계 도입부: 기존 컴포넌트 라이브러리를 감지하면 component-systems.md, 기존 반복 UI는 재사용. 4-4를 모션(motion.md)과 인터랙션 촉감(interaction-feel.md)으로 나눈다.
|
||||
- 5단계 하드 게이트 4번에 "잘린 콘텐츠의 전체 값에 도달할 수단"을 더하고, 3번에 "깜빡임 초당 3회 이하"를 더한다.
|
||||
- 범위 절을 다듬는다. shadcn 같은 컴포넌트 기반은 브랜드 디자인 시스템이 아니므로 designpaca가 그 위에서 일한다.
|
||||
- 불확실성 라우팅 표와 참조 문서 지도에 새 문서 12개의 행을 더한다.
|
||||
- 본문은 500줄 이하로 한다. 늘어나는 만큼 0단계의 사례 표·색 절·내비 절 상세를 brief-interview.md로 옮긴다.
|
||||
|
||||
### 7-4. 도구
|
||||
|
||||
- `design-gate.mjs`의 터치 타깃 검사를 두 층으로 나눈다.
|
||||
- 24px 미만: WCAG 2.5.8 간격 예외(24px 원이 겹치는지)를 계산한다. 예외에도 해당하지 않으면 하드 게이트 실패다.
|
||||
- 24~44px: 플랫폼 계약 항목으로 보고한다. 기본 임계값은 기존 설정과 호환되게 유지한다.
|
||||
- 선택 axe 훅: `axe-core`를 해석할 수 있으면 실행하고, 없으면 "미검증"으로 보고한다. 통과로 추정하지 않는다. 문서와 구현의 괴리(`audit-gate.md:23-24`)를 없앤다.
|
||||
- 계약 테스트 `design-gate-contract.test.mjs`에 두 경우를 더한다.
|
||||
- `packages/skill/THIRD_PARTY_NOTICES.md`를 신설하고 번들에 포함되는지 확인한다.
|
||||
|
||||
## 8. 충돌 해소 결정
|
||||
|
||||
| 충돌 | 결정 |
|
||||
|---|---|
|
||||
| clip-path: motion.md "애니메이션하지 않는다" vs emil·impeccable "강력한 도구" | 텍스트 리빌의 저비용 기본은 translate를 유지한다. 형태 자체가 잘려야 할 때(탭 배경 전환, hold-to-confirm, 비교 슬라이더, 이미지 리빌)만 clip-path 애니메이션을 허용하고 성능을 측정한다. 두 용도의 차이를 각주로 적는다 |
|
||||
| ease-in: emil "절대 금지" vs 우리의 퇴장 `--ease-in` | 우리 규칙을 유지한다. "진입에 ease-in을 쓰지 않는다"를 각주로 넣는다 |
|
||||
| 스프링 표기 3체계 | 표기를 병기하고 변환표를 둔다. 값은 휴리스틱이다. 프로젝트가 라이브러리를 이미 쓰면 그 표기를 따른다 |
|
||||
| 누름 scale 0.96·0.97·0.98 | 0.96~0.98을 시작 범위로 두고 duration은 `--dur-instant`에 맞춘다. 새 duration 리터럴은 만들지 않는다 |
|
||||
| 터치 타깃 44 vs 24 | WCAG 24px와 간격 예외는 하드 게이트, HIG·M3의 44·48은 모바일 앱 수준의 프로젝트 계약이다 |
|
||||
| APCA | WCAG 2 대비가 하드 게이트로 남는다. APCA는 규범이 아닌 보조 진단으로만 둔다 |
|
||||
| 측정폭 45~75 vs 60~75 | 우리 값을 유지한다. 45~59는 좁은 컬럼의 시작값으로 허용한다는 각주를 단다 |
|
||||
| 카피 finding은 소스만으로 충분하다는 better-writing 예외 | 문구 품질은 소스로 1차 판정한다. 잘림·줄바꿈에 영향받는 카피(버튼, 제목)는 렌더로 확인한다 |
|
||||
| motion.md 코드 B의 "기본값" | "리빌을 쓰기로 했을 때의 구현 기본값"으로 명확히 쓴다. §0에 "섹션마다 리빌을 거는 것은 기본값이 아니다"를 더한다 |
|
||||
|
||||
## 9. 기각·보류 — 하지 않을 것과 이유
|
||||
|
||||
| 항목 | 이유 |
|
||||
|---|---|
|
||||
| 인터뷰를 건너뛰는 태도(frontend-design, design-review, interaction-design, apple·emil의 "고정 문구로만 응답") | 이번 작업의 목적 자체와 반대다 |
|
||||
| design-review의 텔레메트리·라이선스 게이팅 | 사용자 데이터 전송, 범위 밖 |
|
||||
| 서체 개수 상한, 타입 스케일 단계 수, 고정 글자 크기·행간 하한, "정확히 이 값" 규율 | 판정 위계 3층의 취향을 규범으로 올리는 일이다 |
|
||||
| 모바일 하단 내비·리플·모든 내비의 유리 표면을 기본값으로 삼는 것 | 기본값의 총합이 슬롭이다. 조건부로만 둔다 |
|
||||
| Tailwind·shadcn CLI 플래그, 레지스트리 스키마, Tailwind 매핑 치트시트 | designpaca는 프레임워크를 전제하지 않는다. 감지했을 때만 요약한다 |
|
||||
| finding 상한 15, 파급 범위 컨슈머 5개 같은 숫자 | 근거가 없다. 절차만 채택한다 |
|
||||
| 설치 어댑터의 하네스별 본문 컴파일(impeccable 방식) | `.agents/skills`처럼 여러 하네스가 같이 읽는 디렉터리가 있어서 중립 본문이 어차피 필요하다. 드리프트 해시·테스트 비용도 크다. 인터뷰 평가에서 하네스 오인식이 드러나면 다시 검토한다 |
|
||||
| Claude 전용 frontmatter(`allowed-tools`, `context: fork`, `!command` 동적 주입) | 다른 하네스에서 무력화되거나 오작동한다. fork는 AskUserQuestion을 깨뜨린다 |
|
||||
| 다음 날 다시 리뷰하기(emil) | 선택 권고로만 둔다 |
|
||||
|
||||
## 10. 실행 단계
|
||||
|
||||
역할은 CLAUDE.md 오케스트레이션 규칙을 따른다.
|
||||
|
||||
- **오케스트레이터**: 게이트 문구·설계·패킷·평가·통합
|
||||
- **implementer(Sonnet)**: 문서와 코드 작성
|
||||
- **researcher(Haiku)**: 조사
|
||||
- **verifier(Sonnet)**: 명령 실행과 원문 수집
|
||||
|
||||
모든 워커 산출물은 오케스트레이터가 diff를 직접 읽고 수용·반려·재배정 중 하나로 판정한다.
|
||||
|
||||
| 단계 | 내용 | 담당·병렬 | 완료 기준 |
|
||||
|---|---|---|---|
|
||||
| P0 사전 확인 | 하네스별 계획·할 일 도구 이름, 서브에이전트, 브라우저·이미지 도구 / 한국어 UX 라이팅과 문장부호 정본(국립국어원 문장 부호 규정 등) / 한국 금융 색 관례의 근거 / WCAG 2.2 기준 번호와 수치 / Codex `agents/openai.yaml` 스키마 / Zcode·Antigravity 질문 동작 | researcher 5개 병렬, 주장은 verifier가 원문 인용으로 교차 확인 | 출처 URL과 날짜가 붙은 표, `evidence-ledger.md` 후보 |
|
||||
| P1 인터뷰·하네스 | SKILL.md 게이트와 0단계 정리(오케스트레이터가 직접), brief-interview.md, harness.md, lint 검사, AGENTS.md 주의사항, 평가 스크립트와 기준선 실행 | implementer 2개(문서 / lint와 평가), verifier | 기준선 대비 평가 결과표, lint 통과 |
|
||||
| P2 새 문서 | 7-1의 나머지 10개 | implementer 병렬(파일이 겹치지 않게, 파일당 1명) | 모든 외부 규칙에 층 라벨과 출처 ID, 8절 결정 준수 |
|
||||
| P3 기존 문서 보강 | 7-2 | implementer 병렬(파일 묶음 단위), P2와 동시 진행(링크 대상 파일명은 이 계획으로 고정) | 기존 규칙 삭제 0건(8절 결정 제외), 새 링크가 모두 실재 |
|
||||
| P4 SKILL.md 통합 | 7-3 | 오케스트레이터와 implementer 1명 | 본문 ≤500줄, 라우팅 누락 0 |
|
||||
| P5 도구 | 7-4 | implementer 1명 | 계약 테스트 통과, 기존 설정 호환 |
|
||||
| P6 검증 | lint-skill, `pnpm build`, `pnpm test`(`# SKIP` 0건), verify-package, `npm pack --dry-run` 포함 파일, 원본과 번들의 LF 해시 비교, 인터뷰 평가 재실행 | verifier | 원문 로그를 `outputs/`에 보관 |
|
||||
| P7 정리 | 모든 diff 최종 리뷰, changeset(minor, 인터뷰 행동 변화 명시), 이 문서의 상태 갱신 | 오케스트레이터 | 커밋과 push는 사용자 승인 후 |
|
||||
|
||||
전체 완료 기준은 다섯 가지다.
|
||||
|
||||
1. 인터뷰 평가의 묻는 시나리오에서 Claude Code와 Codex 모두 질문을 먼저 하고 답 전 파일 생성이 0건이다. 묻지 않을 시나리오에서는 인터뷰가 없다.
|
||||
2. lint 오류·경고가 0건이고, 모든 references가 본문에 링크되어 있다.
|
||||
3. 테스트가 전부 통과하고 SKIP이 0건이다.
|
||||
4. 번들에 새 문서 12개와 THIRD_PARTY_NOTICES가 포함된다.
|
||||
5. 새로 들어온 규칙 중 층 라벨이나 출처가 없는 것이 0건이다.
|
||||
|
||||
## 11. 위험과 대응
|
||||
|
||||
| 위험 | 대응 |
|
||||
|---|---|
|
||||
| 문서가 늘어 컨텍스트를 낭비한다 | 단계별로 여는 원칙을 유지하고, 라우팅 표에 "언제 여는가"를 정확히 적는다. 조건부 문서는 트리거가 없으면 열지 않는다 |
|
||||
| 과잉 질문(버튼 하나에 인터뷰) | 국소·위임 시나리오를 평가의 "묻지 않음" 기준에 넣는다 |
|
||||
| 문서끼리 모순된다 | 8절 결정을 각 문서 각주에 반영하고, P7에서 주제별 교차 grep을 한다 |
|
||||
| 하네스 사실이 낡는다 | harness.md에 확인 날짜와 출처를 두고 릴리스 전에 재확인한다 |
|
||||
| 평가 결과가 흔들린다 | 시나리오마다 여러 번 돌려 비율로 보고한다 |
|
||||
| 라이선스 | 재서술을 원칙으로 한다. 코드 스니펫에는 출처를 달고 THIRD_PARTY_NOTICES에 고지한다 |
|
||||
| 미커밋 조각달 변경과 섞인다 | 같은 파일 6개를 건드리므로 먼저 분리 커밋하기를 권한다(사용자 결정) |
|
||||
|
||||
## 12. 사용자 확인이 필요한 것
|
||||
|
||||
1. 진행 범위: 이 계획 전체(P0~P7)인지, 인터뷰·하네스(P1)만 먼저인지.
|
||||
2. 미커밋 조각달 개선(6개 문서와 changeset)을 먼저 별도 커밋할지.
|
||||
3. 인터뷰 평가를 실제 모델로 돌릴지(Claude·Codex 구독 사용량이 든다).
|
||||
|
||||
## 부록 — 운영 메모
|
||||
|
||||
- 이 머신에 설치된 designpaca 중 Antigravity 사본(`~/.gemini/antigravity/skills/designpaca`)만 v0.8.0이다. 새 버전을 릴리스한 뒤 `designpaca update`로 맞추는 것을 권한다.
|
||||
- `outputs/skill-intake/sandbox/*/.claude/skills`는 Claude Code가 하위 디렉터리 스킬로 인식한다. 그 경로에서 작업하면 외부 스킬이 활성화될 수 있다. 분석이 끝나면 샌드박스를 지워도 된다(원본 클론은 `sources/`에 남는다).
|
||||
Loading…
Add table
Add a link
Reference in a new issue