Skip to content
Back to skills

Design Milestone

ASecurity

UI 마일스톤의 화면 경험 계약을 코드 프로토타입으로 확정한다 — 화면 브리프(요소 근거) → 스택 네이티브 presentational 코드·상태별 fixture → 게이트·픽셀 판정 → 사용자 승인·스냅샷 동결 → feature ## 7 기입 → contract-ready. plan-milestone 뒤, plan-workitem 앞.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 29, 2026
ai-agentsgobashvuenodegit

Security analysis

A100/100

Scanned September 29, 2026

npx -y skills add kohj1018/agentic-dev-harness --skill design-milestone --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Design Milestone?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Design Milestone
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kohj1018-design-milestone-agentic-dev-harness/badge)](https://www.skillsdirectory.com/skills/kohj1018-design-milestone-agentic-dev-harness)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: design-milestone
description: UI 마일스톤의 화면 경험 계약을 코드 프로토타입으로 확정한다 — 화면 브리프(요소 근거) → 스택 네이티브 presentational 코드·상태별 fixture → 게이트·픽셀 판정 → 사용자 승인·스냅샷 동결 → feature ## 7 기입 → contract-ready. plan-milestone 뒤, plan-workitem 앞.
argument-hint: "M<N> [--fast] [--screens <id,...>]"
disable-model-invocation: true
allowed-tools: Read Glob Grep Write Edit Agent Bash(node .claude/skills/bootstrap-design/assets/capture-refs.mjs*) Bash(pnpm validate:design*) Bash(npm run validate:design*) Bash(yarn validate:design*) Bash(bun run validate:design*) Bash(pnpm build-storybook*) Bash(npm run build-storybook*) Bash(yarn build-storybook*) Bash(bun run build-storybook*) Bash(flutter test*) Bash(npx playwright*) Bash(git ls-files*)
---

# /design-milestone

> 모드: How-to (UI 마일스톤 경험 계약 라운드 — ADR-072)
> 패턴: 메인 세션이 R0~R7을 직접 운전한다(`context: fork` 미명시). 브리프 authoring은 designer, 코드 authoring은 builder(UI 제작 계약 모드), 비평·픽셀 판정은 reviewer(design surface), 갤러리 후보는 researcher — 전부 `Agent` 단발 sub-call. 종료 후 `/clear` 권장.
> 계약 SSOT: 라운드·코드 규칙·매니페스트·스냅샷·UI 제작 계약은 ADR-072. 게이트 품질 계약은 ADR-058 D3, 실행물은 ADR-072 D6. DESIGN.md 내용·프로필·§10은 ADR-073. 갤러리 절차는 ADR-058#amend-4.

**Codex**: wrapper `$design-milestone`. `Agent` 위임(designer·builder·reviewer·researcher)은 메인 세션이 각 persona 파일을 읽고 **순차 인라인** 수행하며 생략하지 않는다. 생성(designer/builder)→감사(reviewer) 전환은 명시적 단계로 끊고 산출물·최종 출력에 `under-verified: 동일 세션 감사`를 적는다(ADR-058 D5). 게이트·캡처는 그대로 실행한다.

## 입력·모드
- `$ARGUMENTS` = `M<N>`(`M[0-9]+`만 허용). `--fast`: R2 갤러리 생략 + 브리프 요소 근거를 «핵심 요소만»으로 축약. 다른 라운드는 생략하지 않는다.
- **입력 분기**: (a) `draft` M + 대상 화면 미완 → 미완 라운드부터 재개(완료 화면 skip — 매니페스트 `approved.date` 유무로 판정). (b) `draft`·`contract-ready` M의 재진입 대상은 셋 — (i) `프로토타입:`·`프로토타입 면제:` 둘 다 없는 UI feature의 화면(최초·추가) (ii) `- 계약 수정:` 마커가 남은 UI feature의 승인 화면(브리프 delta → 재승인; 마커 자체는 plan-workitem 재검증 규칙대로 남긴다) (iii) `--screens <id,...>`로 지정된 승인 화면(`/repair-plan` 4-M·사용자 요청). (ii)(iii)는 R3부터 돌고 같은 M 스냅샷을 대체한다. **(iii)로 화면·PX·카피 의미를 바꾸면 그 화면을 쓰는 feature에 `- 계약 수정: <날짜> — 이 feature의 task 재검증 필요` 마커를 남긴다**(ADR-060 D6 — 이미 만들어진 task가 재검증 없이 통과하는 것을 막는다; 마커 회수는 plan-workitem 규칙 그대로). **매니페스트에 등록됐는데 `approved`가 비어 있는 화면은 (i)(ii)(iii)와 무관하게 항상 재개 대상이다**(재승인 중 중단 복구 — feature `## 7`에 이전 참조가 남아 있어도 누락되지 않는다). `contract-ready`는 유지(강등 없음). (c) `ready` + `- 봉인일:` 채움 → 거부 + «변경은 M<N+1>». (d) 비-UI M(산하 feature `## 11` `Design:` 줄 0) → «비-UI 마일스톤 — /plan-workitem M<N>» 안내 후 종료.

## 반드시 먼저 읽을 파일
- 마일스톤 문서 `## 1~4`·`## 9`, 산하 feature `## 2`·`## 3`·`## 7`·`## 8-1`·`## 11`
- `docs/20-system/DESIGN.md` 전체 (`## 0` 프로필 매핑표 · `## 1` 정체성(thesis·signature·imagery — 브랜드 근거) · `## 2`~`## 11`)
- `docs/20-system/prototypes/_theme/manifest.json` (R6 테마 배선 — 재사용 대상)
- 이전 마일스톤 `docs/20-system/prototypes/M<K>/manifest.json`(있으면 — 공용 컴포넌트·`supersedes` 후보 판정)
- `docs/00-meta/STACK_SETUP_PLAN.md ## Design Gate Adapter`·`## Stack Decision Registry`(UI 킷·미리보기 도구)
- `docs/20-system/ARCHITECTURE_OVERVIEW.md ## 3-1`(컴포넌트 디렉터리)·`## 7-4`/`## 7-5`

## R0 — preflight + 회수
1. 전제 확인(하나라도 아니면 무엇을 먼저 돌릴지 안내 후 종료): M `draft`(또는 분기 b) / 산하 feature에 `## 3`·`## 7 FAC` 있음 / DESIGN `## 0 Status` ≠ draft + 프로필 매핑표 있음 / Design Gate Adapter `status: ready` / `_theme/manifest.json` 존재(없으면 «`/bootstrap-design` R6 먼저»).
2. 대상 화면 = 입력 분기 (b)의 (i)(ii)(iii). 비-UI feature는 `## 7`에 `프로토타입 면제: 비-UI feature` 자동 기입. 중단 재개는 화면별로 판정한다(매니페스트 `approved` + feature `## 7` 기입 여부). **두 신호가 어긋나면 재개한다**(보수적 — 둘 다 참일 때만 skip). 중단은 바로 그 둘 사이에서 일어나기 때문이다 — 매니페스트를 쓰고 feature 를 못 쓴 채 끊기거나 그 반대. 엇갈림 자체를 출력에 `재개 신호 엇갈림: <screen> (매니페스트 <값> / feature `## 7` <값>)` 한 줄로 남긴다 — 직전 실행이 중간에 끊겼다는 신호다(dogfood Round 12 회귀 (e) 실측).
2-F. **폰트 배선 확인 (ADR-073#amend-1 결정 3 — 차단)**: DESIGN `## 3` 에 `- 배선: 미배선` 표기가 있으면 **스냅샷 승인을 진행하지 않고** «`/bootstrap-design --update` R6-1 로 폰트를 먼저 배선하세요» 안내 후 종료한다. 표기가 없어도 전달 방식이 self-host·앱 번들이면 **선언 실재를 1회 대조한다** — 웹 `@font-face`/`next/font/local`, Flutter `pubspec.yaml` `fonts:`. 0건이면 같은 경로로 돌려보낸다. **이유**: 글꼴이 없는 채로 찍힌 기준선은 «승인본 = 제품» 등식을 깨는데, 그림 자체는 정상으로 보여 사람이 알아채지 못한다(Round 12 실측 — 웹은 fallback 렌더, Flutter 는 tofu).
3. DESIGN `## 11` 확인일이 12개월 초과면 «researcher 재확인 권장» 1줄(자동 갱신 아님).
4. 이전 M 매니페스트에서 공용 컴포넌트 목록을 회수한다(재사용 후보). 대상 화면이 이전 M 승인 화면의 공용 컴포넌트·토큰을 바꾸면 그 화면을 이 M에 `supersedes`로 재등록할 후보로 표시한다(ADR-072 D5-5).
5. DESIGN `## 10`이 v1 형식(언어 블록·용어 사전 없음)이면 «`/bootstrap-design --update`로 §10 v2 마이그레이션 먼저» 안내 후 종료(구 plan-milestone R5의 §10 신설 경로 승계).

## R1 — 화면 목록 · 전환표 · 프로필 배정
- **화면의 정의**: 화면은 라우트가 아니라 «사용자가 한 번에 보는 상태 묶음»이다. 단일 라우트 앱은 상태 묶음 단위로 도출하고 브리프 첫 줄에 `- 화면 도출 메모: <근거>`를 남긴다(ADR-072#amend-5 결정 6).
- feature `## 3` 시나리오에서 화면을 도출한다(feature당 대표 1화면 기본, 다화면은 협의, 총 6~8화면 초과 시 우선순위 협상 + 세션 분할 안내).
- **이전 M 승인 화면 재사용 판정**: 도출한 화면이 이전 M 매니페스트에 이미 승인돼 있고 이번 M에서 **구성·카피·PX가 바뀌지 않으면** 새로 제작하지 않는다 — 제작 대상에서 빼고 R7에서 그 feature `## 7`에 `프로토타입: M<K>/<screen>`을 기입한다(ADR-072 D9 재사용 형식). 공용 컴포넌트·토큰이 바뀌었으면 재사용이 아니라 R0 4의 `supersedes` 재등록 대상이다.
- 각 화면에 프로필(DESIGN `## 0` 매핑표)을 배정한다 — 기준 뷰포트가 여기서 정해진다.
- **화면이 2개 이상이거나(다화면), 단일 화면이라도 비가역·파괴 동작(삭제·결제·전송)·분기·다단계 오류→복구·modal이 있으면** 마일스톤 `## 9. 화면 전환` 표를 채운다(ADR-072 D1 — ADR-056#amend-3(현재 SSOT: ADR-072 D1) 승계, 그 amendment의 적용 범위가 «다화면·복구 흐름»이다; 순수 정적 단일 화면이면 «(해당 없음)»).
- 화면 id는 kebab-case(`<screen>`) — 매니페스트·PX·브리프·코드 디렉터리가 같은 id를 쓴다. **숫자로 끝나지 않는다**(PX 문법 `\d{2,}$` 파싱 보호).
- **제작 대상이 0개면**(전 화면이 이전 M 재사용·면제) R2~R6를 건너뛰고 **R7만 수행한다** — feature `## 7`에 재사용 참조·PX를 기입하고 정합 재대조 후 `contract-ready`. 이 M 매니페스트는 만들지 않는다(하류 검사는 `프로토타입:` id가 가리키는 M을 본다).
- 출력 압축 포맷(`이번 결정 / 확인 필요 / 답변`)으로 사용자 확인 1회.

## R2 — 레퍼런스 갤러리 (ADR-058#amend-4 절차 공유 — `--fast` 생략)
- 화면 유형별(온보딩·목록·상세·폼·결제·오류 복구 등)로 researcher에 갤러리 후보를 요청한다(1층 uibowl.io·Mobbin·Refero·스토어 스크린샷 우선, 2층 실제 제품, 4층 getdesign.md 분석본은 R0 노트 재사용).
- `docs/20-system/design-refs/refs.json` 작성 → `node .claude/skills/bootstrap-design/assets/capture-refs.mjs` 실행 → `gallery.html`을 사용자에게 열게 하고 선택·메모를 받는다(취향 오라클 — 추천은 요청 시만). 3층 inbox 캡처 요청은 여기서 한다.
- 선택본을 `DESIGN_RESEARCH.md ## 레퍼런스`에 항목 추가(`출처 유형`·`사용 주의` 포함, 뒷받침한 결정 = 화면 id).

## R3 — 화면 브리프 (designer) → reviewer 비평 → 사용자 승인
- 화면마다 designer 단발 sub-call로 `docs/20-system/prototypes/M<N>/briefs/<screen>.md`를 작성한다(ADR-072 D2 항목 전부 — 목적(비즈니스 목표·시나리오), 브랜드 정체성 부합(DESIGN `## 1`), **요소마다 근거 4문항**, 상태, 카피(§10 언어 블록·용어 사전), 인터랙션 계약, 접근성, 프로필, 재사용 vs 신규, PX 후보, `구성 불확실` 표시).
- **reviewer(design surface) 단발 sub-call이 사용자보다 먼저 본다**: `[Design-element-rationale]`(근거 없는 요소) · `[Design-donts]` · `[Design-voice]`(렌즈·용어 사전) · `[Design-inventory]`(인벤토리 외 신설) · 과잉 요소. 차단 항목은 designer 재작성(≤2회).
- 사용자 승인(화면 단위, 압축 포맷). `구성 불확실` 화면은 방향 2안을 Decision Brief로(user-choice, 추천 블록은 요청 시). 승인된 브리프의 카피가 곧 실카피다.

## R4 — 코드 초안 (builder, UI 제작 계약 모드)
- **slice 크기 (ADR-074 D9-2)**: 한 dispatch 의 산출물이 **4개를 넘으면 쪼갠다.** 실측(Round 12 R4): «화면 1개 + fixtures + 스토리/위젯 테스트 + 갤러리 등록 + 검증»을 한 dispatch 에 넣었더니 **두 builder 가 다 턴 상한에서 보고 없이 멈췄다**(작업은 거의 끝난 상태였다). 화면이 둘이면 화면마다, 한 화면의 산출물이 많으면 «코드+fixtures» / «스토리·테스트» 로 가른다.
- 화면마다 builder 단발 sub-call(dispatch에 `mode: ui-authoring` 명시 — 입력: 승인 브리프 + DESIGN 토큰·`_theme` 배선 경로 + 재사용 컴포넌트 목록 + ADR-072 D3 규칙 + 추적 헤더 형식 + PX 마커 문법). **presentational만** — props-in/callbacks-out, fetch·store·router 금지.
- 웹: `screens/<screen>/<Screen>.<ext>` + `<Screen>.stories.<ext>`(확장자는 스택 관례 — `.tsx`/`.vue`/`.svelte`; 상태별 스토리: happy + 못생긴 상태 5종 + category state, `구성 불확실`이면 `A`/`B`) + `fixtures.<ext>`(출처 표기). Flutter: `lib/screens/<screen>/` + `lib/prototype/main.dart` 갤러리 등록 + `test/screens/<screen>_prototype_test.dart`(프로필 크기 렌더 + guideline 4종 + overflow 0 + PNG — ADR-059#amend-1 결정 2·3) — 상태·뷰포트마다 `group('<state> <w>x<h>')` 안에서 렌더하고 `DESIGN_GATE_OUT`에 `<screen>-<state>-<w>x<h>.png`를 저장한다(ADR-072#amend-5 결정 2 규약). **폰트·아이콘 적재 (ADR-073#amend-1)**: 위젯 테스트는 pubspec 선언 폰트를 자동 적재하지 않는다 — `test/support/load_fonts.dart` 를 두고 `setUpAll(loadAppFonts)` 로 부른다. **`FontManifest.json` 을 읽어 선언된 패밀리를 전부 적재**한다(패밀리를 손으로 나열하면 폰트를 추가할 때마다 뒤처진다). **`MaterialIcons` 도 그 매니페스트에 있다** — 빠뜨리면 체크 표시·「+」가 네모로 남는다. 적재하지 않으면 스냅샷이 육안 대조에 못 쓰일 뿐 아니라 **`meetsGuideline(textContrastGuideline)` 의 판정이 뒤집힌다**(tofu 는 획이 굵어 통과하고 실제 글꼴은 실패한다 — Round 12 실측).
- 각 코드에 PX 마커 주석을 단다(브리프 PX 후보 → 확정 id). 토큰 외 리터럴 금지.
- 매니페스트 `docs/20-system/prototypes/M<N>/manifest.json`에 화면을 등록한다(**`scope`는 그 화면 코드가 있는 패키지 디렉터리 — 단일 패키지는 `.`, monorepo는 `apps/web`·`apps/mobile` 등. 게이트가 어댑터 명령을 돌릴 작업 디렉터리다**; `states[]`는 `{id, preview}`로 상태별 스토리 id·테스트 group까지, 브리프의 «승인 필요 상태»는 `baseline: true`; `approved`·`product_entry`는 비움).
- **`구성 불확실`(A/B) 화면 (ADR-072#amend-4)** — 두 가지를 함께 한다.
  - **상태 쌍으로 등록**: 선택이 **렌더에 보이는 상태마다** `<state>-a`·`<state>-b` 두 상태를 `states[]` 에 둔다(`default-a`/`default-b`/`overflow-a`/`overflow-b` …). 웹은 스토리 id 가, Flutter 는 위젯 테스트 group 과 PNG 이름이 그 id 를 따른다. **`variant` 필드를 새로 만들지 마라** — 상태로 두면 `baseline`·`render`·스냅샷 명명이 전부 기존 기계를 그대로 쓴다. Flutter 에서 A/B 를 위젯 파라미터로 받아 한 테스트 안에서 돌리면 **PNG 파일명이 겹쳐 한 안이 조용히 덮인다**(Round 12 실측: 그래서 builder 가 저장을 A안에만 걸었고 B안 렌더가 한 장도 남지 않았다).
  - **원장 행을 만든다**: `DECISION_REGISTER.md` 에 `authority: user-choice` · `status: open` 행을 만들고, 브리프 `## 13` 이 그 `D-NNN` 을 인용하도록 고친다. R7-3 의 기존 `open` 검사가 그대로 그물이 되므로 새 검사기는 만들지 않는다.
- builder 반환은 경로·PX 목록·남은 리스크만(코드 전문 금지).

## R5 — 선택·수정 루프 (사용자)
- 안내: «`npm run storybook`에서 `Screens/<screen>` 스토리(또는 `flutter run -t lib/prototype/main.dart`)를 열어 상태별로 확인해 주세요. 원하시면 추천을 요청하실 수 있어요.»
- 피드백은 builder 재생성으로 반영(사용자 직접 편집 X). 브리프와 어긋나는 변경 요청은 브리프를 먼저 고친다. 2사이클 미수렴 시 브리프 재검토.
- **`A`/`B` 화면은 두 안의 렌더 경로를 나란히 제시한다** — `design-gate-shots/<screen>-<state>-a-…png` 와 `-b-…png` 를 상태별로 짝지어 안내한다. 한쪽만 있으면 R4 로 되돌아간다(선택을 요청해 놓고 볼 것을 한쪽만 주지 않는다).
- 선택 확정 후: 탈락안 상태·스토리·코드(enum 값·분기)·테스트를 **삭제**하고, 그 `D-NNN` 을 원장에서 `closed`(disposition·근거 기입)로 닫고, 브리프 `## 13` 을 「없음 — D-NNN 에서 <선택> 확정」으로 고친다. **남은 상태의 스냅샷은 다시 찍는다** — 선택에 딸린 수치(하단 패딩·컨테이너 폭 등)가 그때 확정되기 때문이다.

## R6 — 게이트 + 픽셀 판정 + 승인 + 스냅샷
1. `STACK_SETUP_PLAN.md ## Design Gate Adapter` `status: ready`가 아니면 `Needs Design Gate: /stack-guard` + 승격 보류(silent skip 금지).
2. `validate:design -- --manifest docs/20-system/prototypes/M<N>/manifest.json --only <이번 대상 화면>` 실행(같은 세션에서 **코드 변경 없이** 반복할 때만 `--no-build` — builder 재생성 뒤에는 반드시 재빌드한다, ADR-072 D6). exit 1 blocker는 builder에 selector·요약을 되먹여 재생성(≤2회), 초과 시 승인 보류 + 브리프 재검토. exit 2면 사유 echo + 보류. **Flutter 화면은 report의 (상태 × 뷰포트) 항목과 `viewport-coverage` report, 그리고 PNG 파일명이 커버리지 증거다**(ADR-072#amend-5 결정 2). `viewport-coverage`가 1건이라도 있으면 승인하지 않는다(R6-5 (iii)).
3. `--tokens-only <screens 경로>` 결과가 0건이 아니면 고치거나 브리프에 사유를 적는다(승인 체크리스트 항목 — 이 모드는 렌더 출력을 지우지 않는다).
4. reviewer(design surface) 단발 sub-call이 `design-gate-shots/`를 Read로 열람해 위계·밀도·slop·overlap·도메인 fit을 판정(차단은 재생성).
5. 사용자 최종 승인(화면 단위). **승인 체크리스트**: happy + 못생긴 상태 5종 + category state 렌더됨 / 실카피(§10) / 인터랙션 계약 테스트(키보드·포커스·취소·콜백) 존재·통과 / PX 마커 ≥1 / 토큰 외 리터럴 0 또는 사유 / 접근성 blocker 0 + **승인본 충실도(ADR-072#amend-5 결정 7)**: (i) 하네스 요소 0(#amend-3) (ii) 결정 글꼴 실재(ADR-073#amend-1) (iii) 렌더 조건 적용 — 파일명 `-<w>x<h>`·report viewport (iv) A/B는 **R5 선택 전**에 두 안 렌더가 있었고 **선택 후**에는 선택본 렌더 + 원장 `D-NNN` `closed`(#amend-4 결정 3(ii) + #amend-5 결정 7 (iv) — R5가 탈락안을 지우고 재촬영하므로 선택 후에 두 안을 요구하면 정상 흐름과 충돌한다) (v) 렌더 카피 = 브리프 카피 — 하나라도 아니면 승인하지 않는다. **하네스 요소 0**(ADR-072#amend-3) — 렌더에 보이는 가시 요소가 전부 그 화면 `source[]` 파일 안에 있는가. 데코레이터·wrapper 가 넣은 제목·헤더·랜드마크·폭 컨테이너가 하나라도 보이면 **승인하지 않는다**: 컴포넌트로 옮기거나 공용 셸을 별도 화면으로 등록한 뒤 재렌더한다. 대조는 `design-gate-shots/` 렌더와 매니페스트 `source[]` 를 나란히 놓고 한다. / **결정 글꼴 실재**(ADR-073#amend-1 결정 3) — 렌더에 DESIGN `## 3` 이 고른 패밀리가 실제로 적용됐는가. 게이트 2차 런타임 검사(`document.fonts.check`)가 `report` 를 냈으면 그 사유를 확인하고, 스캐폴드 기본 글꼴(`Geist`·`Inter` 등 DESIGN 이 고르지 않은 패밀리)이 보이면 **승인하지 않는다**. / **`구성 불확실` 마감**(ADR-072#amend-4) — 대상 화면 브리프 `## 13` 이 「없음」이거나 그 `D-NNN` 이 원장에서 `closed` 인가, 그리고 아직 열려 있다면 **두 안의 렌더가 모두** `design-gate-shots/` 에 있는가. 한쪽 렌더만 있는 채로 승인하지 않는다.
6. 승인 직후 `validate:design -- --manifest <경로> --only <화면> --snapshot docs/20-system/prototypes/M<N>/snapshots/`로 기준선 스냅샷(각 뷰포트 default + 1차 뷰포트 empty·error + `baseline: true` 상태)을 `snapshots/<screen>-<state>-<w>x<h>.png`로 저장한다(500KB 초과 경고). **그 화면 매니페스트 `source[]` 의 각 파일 추적 헤더 `승인: <미정>` 을 승인 일자로 바꾼다**(ADR-072 D3-4 의 추적 헤더가 승인 일자를 담기로 돼 있는데 R6 가 매니페스트만 채우고 코드를 두고 가면, 코드만 읽어서는 그 화면이 승인됐는지 알 수 없다 — Round 12 실측: 승인 후에도 `source[]` 5파일이 전부 `<미정>` 이었다). `source[]` 밖 파일(테스트·갤러리 진입·테마 배선)은 그대로 둔다 — 승인 표면이 아니다. 매니페스트 `approved{date, by: user}`·`snapshots[]`·`product_entry`(`## 9`·ARCH 라우팅에서 도출, 미정이면 `null`)·`handoff{run, remaining_wiring[]}` 채움. 이전 M 승인 화면에 영향(공용 컴포넌트·토큰 변경)이 있으면 그 화면을 **이 M 매니페스트에 `supersedes: ["M<K>/<screen>"]`로 재등록**해 함께 렌더·승인·스냅샷(이전 M 파일은 불변 — ADR-072 D5-5).

## R7 — feature 기입 · 정합 재대조 · contract-ready
1. 각 구현 feature `## 7`에 `프로토타입: <screen id> (manifest: docs/20-system/prototypes/M<N>/manifest.json, 진입: <story id | entry>)` — **R1이 재사용으로 판정한 화면은 `프로토타입: M<K>/<screen> (manifest: docs/20-system/prototypes/M<K>/manifest.json, 진입: …)`로 이전 M을 가리킨다**(이 M에 화면을 새로 등록하지 않는다) + `승인 스냅샷: <경로들>` + `경험 결정(PX):` 인벤토리(코드 주석에서 **그대로 복사** — 재추출 금지; 화면이 여러 feature에 걸치면 PX별 구현 feature에 분산). 완전성 확인: 그 화면 코드의 PX 마커 집합 = 관련 feature 인벤토리 부분집합.
2. 확정 재대조: M `## 3` ↔ F `## 3` ↔ F `## 7` FAC ↔ 매니페스트 화면·PX ↔ M `## 9` 전환표. 불일치면 해당 라운드로.
3. `DECISION_REGISTER.md`에서 이 M `영향:` + `(미할당)`의 `open` 0건일 때만 **feature 먼저, M 마지막** `contract-ready`. open이 남으면 어느 D-NNN이 막았는지 보고.
4. 커밋하지 않는다. 출력에 `권장 커밋: feat(ui): approve M<N> screen prototypes` 한 줄.

## 결정 마감 (ADR-060)
bootstrap-design과 동일 규율 — `user-*` 결정(구성 방향 선택·프로필 배정 변경 등)은 Decision Brief 6블록, `agent-delegated`는 라운드 끝 일괄 확인 1회, 미결은 `deferred`(앵커 3필드) 또는 `open`.

## 마지막 출력 (WORKFLOW 다음 단계 contract 정합)
- 대상 화면 목록 + 브리프 경로 + 코드 경로 + 매니페스트 경로 + 스냅샷 경로
- 면제 feature 목록
- 게이트 결과(blocker 0 / report 경로) + reviewer 판정 요약 + `under-verified` 여부
- 원장 요약 `closed N / deferred M / open K`
- 상태: M·feature `contract-ready` 전환됨 | 보류(사유)
- 권장 커밋 메시지
- 다음 단계: `/plan-workitem M<N>` (또는 교차검토 `/validate-plan M<N>` → `/repair-plan M<N>`; 화면 층 수정은 본 skill 재진입)
- `/clear` 권장

## Context 정책 (ADR-019)
`반드시 먼저 읽을 파일`은 최소 충분. 코드 전문·스크린샷은 sub-agent 안에서만 읽고 메인에는 경로·판정만 올린다.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.