54 lines
6.0 KiB
Markdown
54 lines
6.0 KiB
Markdown
---
|
|
description: 선택된 direction의 winner-prototype을 7-lens(제품적합·사용성·차별성·시각완성도·시스템화·시장기억성·구현가능성) 패널로 감사해 DES-DIRECTOR 종합 verdict(pass/minor-revision/concept-flaw)를 산출한다. producer-run-id ≠ reviewer-run-id. `/design-direction`의 -critique 스테이지가 호출한다(단독 실행도 가능).
|
|
---
|
|
|
|
당신은 Orchestrator다. **design-review** — `design-direction` child(`<child>`)의 **활성 cycle** winner-prototype을 7개 독립 렌즈로 감사하는 패널이다. 입력(인자): `--workflow <child>`. 이 커맨드 **자체는 상태를 전이시키지 않는다** — `design-review-panel` 아티팩트를 산출할 뿐이며, `record`+`transition`(verdict 라우팅)은 호출자(`/design-direction`의 -critique 스테이지)의 책임이다.
|
|
|
|
## 0. pre-work
|
|
활성 cycle의 `winner-prototype`(대상 코드 + preview-receipt)과 `direction-set`(3개 방향의 `producer-run-id` 목록 — 배제용)을 읽는다. **핵심 불변식**: 이 두 산출물을 만든 divergence run의 `producer-run-id`는, 이번 패널의 어떤 `reviewer-run-id`와도 겹쳐서는 안 된다(`_critique_panel_ok`가 강제) — 방향을 만든 바로 그 실행이 자기 자신을 심사하는 것을 막는다. OPS-ORCH는 critique마다 **새** run-id를 발급한다(divergence 때 쓴 값을 재사용하지 않는다).
|
|
|
|
## 1. 7-lens 패널 — 각자 완전히 격리된 subagent
|
|
각 렌즈를 독립 context-package로 spawn한다(mode=divergent, must-read=winner-prototype+selected-direction만 — 서로의 리뷰는 못 읽는다):
|
|
`python3 .claude/hooks/context_package.py --compile --workflow <child> --task review-<lens> --role <ROLE> --mode divergent --tier <tier>` → `context_package.py <pkg>` exit 0 → 출력된 `context-package:`/`context-package-sha256:` 2줄을 spawn 프롬프트 최상단에 포함(guard_tools spawn gate 강제). 컴파일된 패키지의 sha256(또는 그 task 값)을 `reviewer-run-id`로 그 워커에 전달 — 워커는 자기 산출물의 `reviewer-run-id` 필드에 echo한다.
|
|
|
|
| lens | 질문 | subagent |
|
|
|---|---|---|
|
|
| product-fit | 고객 문제가 이해 가능한 흐름으로 해결되는가 | `des-prod`(DES-PROD) |
|
|
| usability | 실제 사용자 행동·불편·맥락에서 사용 가능한가 | `ux-researcher`(UX-RESEARCHER) |
|
|
| distinctiveness | 이 방향이 시각적으로 무엇을 주장하는지가 다른 안·인터넷 평균과 구별되는가 | `des-visual`(DES-VISUAL) — **반드시 새 격리 run**. divergence에서 이 방향(들)을 만든 그 run이면 안 된다 — 새 context-package·새 `reviewer-run-id`로 spawn한다 |
|
|
| visual-craft | 타입·위계·비례·spacing·imagery·motion·optical polish가 출시 가능한 완성도인가 | `des-visual`(DES-VISUAL) — distinctiveness와 별도 새 run. annotated finding은 화면 영역/근거를 지목한다 |
|
|
| systematizability | 디자이너·엔지니어가 반복해서 쓸 수 있는 토큰/컴포넌트로 시스템화 가능한가 | `des-platform`(DES-PLATFORM) |
|
|
| market-memorability | 시장이 수용할 가치 언어로 번역·기억될 수 있는가 | `gtm-pmm`(GTM-PMM) |
|
|
| implementability | 실제 프론트엔드 구현·성능·접근성 관점에서 구현 가능한가 | `eng-fe`(ENG-FE) |
|
|
|
|
각 리뷰어는 자기 렌즈로만 판단하고 typed `workflow-artifact` envelope를 쓴다. 개별 lens review도
|
|
artifact-kind=`design-lens-review`를 명시하고, payload에 `reviewer-role-id`·`reviewer-run-id`·`lens`·
|
|
`verdict`(`pass|revise|blocking`)·`findings`를 둔다. finding은 severity와 화면 영역/코드/렌더 근거를 갖는다.
|
|
|
|
## 2. 종합(converge) — DES-DIRECTOR
|
|
`des-director`(DES-DIRECTOR)가 7개 리뷰 **원본**을 전부 읽는다(synthesis-rehydration — 요약이 아니라 원본, dissent 보존). 스스로를 단독 평가자로 두지 않고 트레이드오프를 드러내 하나의 `synthesis`로 수렴한다:
|
|
- `role-id: DES-DIRECTOR`, `verdict` ∈ `pass` \| `minor-revision` \| `concept-flaw`, `unresolved-dissent`(리뷰 간 남은 이견 — 없으면 빈 리스트, 삭제 금지).
|
|
- **verdict 판단 기준**: 개별 lens 중 `blocking`이 있으면 `concept-flaw`, `revise`가 있으면 최소
|
|
`minor-revision`, 7개 전부 `pass`이고 unresolved-dissent가 없을 때만 `pass`다. 특히 distinctiveness와
|
|
visual-craft는 veto lens이며 synthesis가 concerns를 비차단 의견으로 낮출 수 없다.
|
|
|
|
## 3. `design-review-panel` 아티팩트 조립
|
|
`new_report.py --workflow <child> --role DES-DIRECTOR --stub --artifact-kind design-review-panel
|
|
--stage design-direction-critique`로 발급한 envelope payload에 direction-cycle-id, target-prototype,
|
|
preview-receipt, reviews(7개 id+sha), synthesis를 묶는다.
|
|
|
|
`state_engine.py`는 전이 시점에 `_critique_panel_ok`로 7개 lens의 정확한 coverage, 각 hash-bound 원본
|
|
review와 panel 요약의 lens/run/verdict 일치, producer/reviewer 분리, 모든 개별 verdict=pass,
|
|
blocking/critical finding 부재, unresolved-dissent=[]를 검증한다. synthesis 문자열만 `pass`로 쓰는 우회는 막힌다.
|
|
|
|
## handoff
|
|
최종 메시지 = `design-review-panel` 경로 + `synthesis.verdict` + 1줄 bottom-line. 상태 변경은 하지
|
|
않는다. 호출자가 `submit-artifact`한 뒤 verdict에 따라 `complete-stage --to ...`와 `enter-stage`를
|
|
호출한다.
|
|
|
|
## 규칙
|
|
- 7 렌즈 전원 독립 spawn(fan-out) — 서로의 결론을 못 읽는다. 종합만 DES-DIRECTOR가 원본 재적재로 한다.
|
|
- producer-run-id ≠ reviewer-run-id는 자기신고가 아니라 `state_engine`이 direction-set의 실제 `producer-run-id` 집합과 대조해 강제한다 — 위조/재사용은 전이 시점에 fail-closed로 거부된다.
|
|
- report-header(BLUF) 없이 종료 금지. evidence 없는 confidence:High 금지. external side-effect(slack/PR/deploy 등) 기본 금지.
|
|
- **mid-start 아님**: 이 커맨드는 매 -critique 호출마다 7 렌즈를 새로 돈다(과거 패널 재사용 금지 — 프로토타입이 바뀌면 판단도 새로 나와야 한다).
|