--- status: historical-snapshot applies-to-version: "registry 62 roles / 26 families / 11 lenses (설계 시점)" superseded-by: "현재 정본 registry 73 roles / 28 families / 12 lenses — org-os/00-role-registry/*" exclude-from: [must-read, default-search] note: "구현 완료된 과거 설계. 본문의 62/26/11 수치는 당시 스냅샷이며 현재 정본은 org-os 레지스트리다(finding #20)." --- # 협업 효율화 + 다양성 보존 오버레이 설계 - 작성일: 2026-07-05 - 대상 하네스: `company-haness` / Org OS (현재 100% 명세 단계) - 범위: **설계/명세만** 개선 (`.claude` 구현·validator 스크립트는 이번 범위 밖) - 인코딩 방식: **가산적 오버레이** (새 파일 추가 + 기존 파일 참조 한 줄씩만) --- ## 1. 목적과 문제 ### 문제 현재 구조는 모든 작업을 동일한 무거운 DRAI 의식으로 처리한다. Claude Code subagent는 서로 직접 대화하지 못하고 파일을 경유해 직렬로 handoff하며, **handoff마다 컨텍스트 전체를 재적재**한다. 그 결과: - 저위험 작업(오타·소규모 기능)도 다수 역할이 순차 개입해 느리고 토큰이 무겁다. - 발산(아이디어)과 수렴(결정)을 같은 무거운 기계로 처리해, 아이디어를 얻는데도 결정용 의식을 돌린다. - 62개 세분 역할이 유사 역할로 흩어져 같은 컨텍스트를 반복 재적재한다. ### 목표 협업의 **handoff 수·직렬성·재적재 비용을 낮추되, 관점 다양성은 보존/강화**한다. 핵심 통찰: **다양성 = 서로 다른 렌즈의 수이지 역할 headcount가 아니다.** 따라서 중복 역할 통합과 의식 경량화는 다양성을 줄이지 않는다. ### 비목표 (Out of scope) - `.claude/agents`·commands·hooks·`.mcp.json` 등 실행체 구현 - 참조 무결성 validator 스크립트(코드) — 다음 라운드 후속 - 신규 role 추가 또는 기존 62 role 삭제 --- ## 2. 핵심 모델: 2개의 직교 축 + 다양성 바닥 | | TIER-LIGHT (저위험·가역·단일도메인) | TIER-STANDARD (중간·교차도메인) | TIER-HEAVY (고위험·비가역·프로덕션/매출/보안/법무) | |------------|--------------------------------------|----------------------------------|------------------------------------------------------| | **DIVERGENT** (아이디어 생성) | 3개 렌즈 병렬 + 합성 1 | 5개 렌즈 + 역발상 필수 + 합성 | 전 관련 렌즈 + 역발상 필수 + 트레이드오프 매트릭스 | | **CONVERGE** (결정·승인) | owner + 리뷰어 1, 감사 없음 | decider + 추천(병렬) + 감사 1 | 풀 DRAI + 감사 병렬 팬아웃(≥3) + 인간 게이트 | - **Mode(무엇을):** `divergent` | `converge` — intake에서 **명시적으로 선택**. - **Tier(얼마나 무겁게):** `light` | `standard` | `heavy` — 위험도·가역성·영향반경에서 **파생**. - **하위호환 원칙:** **TIER-HEAVY = 오늘의 DRAI 동작 그대로.** 기존 rigor를 제거하지 않고, 그 아래 급행 차선(light/standard)을 신설한다. 기존 High/Critical 경로는 자동으로 TIER-HEAVY에 대응된다. --- ## 3. 신규 오버레이 파일 (관심사당 파일 하나) ### 3.1 `org-os/00-role-registry/lens-registry.yaml` — 다양성 바닥 서로 구별되는 11개 평가 렌즈를 불가침으로 고정한다. 각 렌즈는 "이 렌즈가 던지는 질문"과 "이 렌즈를 실을 수 있는 패밀리"를 명시한다. | lens-id | 던지는 질문 | 주 carrier 패밀리 | |---|---|---| | LENS-VALUE | 장기 회사가치·포트폴리오 적합성? | FAM-CEO, FAM-STRATEGY | | LENS-TECH | 아키텍처·안정성·확장성·기술부채? | FAM-CTO, FAM-ARCHITECTURE-TECH, FAM-PLATFORM-INFRA, FAM-DATA, FAM-VPENG | | LENS-PRODUCT | 고객문제·제품가치·로드맵·P/L? | FAM-CPO, FAM-PRODUCT-MGMT | | LENS-FINANCE | 비용·ROI·자본효율·기회비용? | FAM-CFO, FAM-REVOPS, FAM-STRATEGY | | LENS-OPS | 운영타당성·프로세스·지원부담? | FAM-COO, FAM-OPS-DELIVERY, FAM-ARCHITECTURE-BIZ | | LENS-INTEGRATION | 제품-기술 통합·충돌 감소? | FAM-CPTO | | LENS-SECURITY | 위협·shift-left·데이터 무결성? | FAM-SECURITY, FAM-PLATFORM-INFRA | | LENS-LEGAL | 계약·컴플라이언스·프라이버시? | FAM-LEGAL | | LENS-CUSTOMER | 사용자 리서치·고객의 소리·경험? | FAM-UX-RESEARCH, FAM-DESIGN, FAM-GTM-SALES, FAM-OPS-DELIVERY | | LENS-REVENUE | 매출영향·GTM motion·lead-to-cash? | FAM-REVOPS, FAM-GTM-GROWTH, FAM-GTM-SALES | | LENS-CONTRARIAN | 이걸 하지 말아야 할 이유·무엇이 깨지나? | (로테이션) 옵션 작성 패밀리가 아닌 임의 reviewer/auditor 가능 패밀리 | **규칙(파일에 명문화):** - R1. 패밀리 통합 시 **서로 다른 렌즈는 절대 병합 금지.** 같은 렌즈의 중복 역할만 합친다. - R2. `divergent` 모드는 tier별 최소 렌즈 수 이상을 **병렬** 커버해야 한다. - R3. `converge` 모드(특히 heavy)는 렌즈 의견을 하나로 뭉치지 말고 **트레이드오프째 노출**한다. (기존 `team-topology-map.yaml`의 executive-balance 계승) - R4. LENS-CONTRARIAN을 담당하는 패밀리는 해당 옵션을 작성한 패밀리와 달라야 한다(이해상충 방지). ### 3.2 `org-os/00-role-registry/capability-families.yaml` — 62 → 26 패밀리 62개 role은 **참조 분류체계로 보존**하고, 실제 인스턴스화·라우팅 단위는 아래 26개 패밀리로 한다. 각 패밀리는 같은 렌즈/역량을 공유하는 role의 묶음이다. | 패밀리 | 소속 role-id | 비고 | |---|---|---| | FAM-CEO | EXEC-CEO | 렌즈: VALUE | | FAM-ORCH | OPS-ORCH | 코디네이터(무렌즈) | | FAM-CTO | EXEC-CTO | 렌즈: TECH | | FAM-CPO | EXEC-CPO | 렌즈: PRODUCT | | FAM-CFO | EXEC-CFO | 렌즈: FINANCE | | FAM-COO | EXEC-COO | 렌즈: OPS | | FAM-CPTO | EXEC-CPTO | 렌즈: INTEGRATION | | FAM-VPENG | EXEC-VPENG | 엔지니어링 딜리버리 리더십(reviewer) | | FAM-PRODUCT-MGMT | PROD-PM, PROD-PO, PROD-TPO, PROD-PPO | 제품관리(stream/tech/platform) | | FAM-UX-RESEARCH | UX-RESEARCHER, DATA-ANALYST | 고객·데이터 인사이트 | | FAM-DESIGN | DES-PROD, DES-PLATFORM, DES-INTERNAL | 디자인 | | FAM-STRATEGY | STR-ANALYST | 전략분석 | | FAM-ENG-FRONTEND | ENG-FE, ENG-FEPLAT, ENG-FEUX | 프론트엔드 | | FAM-ENG-BACKEND | ENG-BE, ENG-BEGEN, ENG-PRODSERVER, ENG-PLATSERVER, ENG-PRODUCTMINDED, ENG-SW | 백엔드 6역할 통합 | | FAM-ENG-SPECIAL | ENG-DESKTOP, ENG-PRODCHAPTER | 데스크톱/생산성 특수 | | FAM-PLATFORM-INFRA | INFRA-DEV, INFRA-PLATFORM, INFRA-DEVOPS, SRE, SEC-DEVSECOPS | 인프라·신뢰성 (SRE=audit-capable) | | FAM-ARCHITECTURE-TECH | ARCH-EA, ARCH-SOLUTION, ARCH-APP, ARCH-TECH, ARCH-IT, ARCH-SYSANALYST, ARCH-SWAT | 기술 아키텍처 (SWAT=audit-capable) | | FAM-ARCHITECTURE-BIZ | ARCH-BA, ARCH-BIZANALYST | 비즈니스 아키텍처 | | FAM-DATA | ARCH-DATA, DATA-ENGINEER, DATA-BIGDATA | 데이터 플랫폼 | | FAM-QA | QA | 품질(audit-capable) | | FAM-SECURITY | SEC-ENGINEER, SEC-APPSEC, SEC-CHAMPION | 보안(audit-capable) | | FAM-OPS-DELIVERY | OPS-CH, OPS-CREW | 고객상담·오퍼레이션 | | FAM-GTM-GROWTH | GTM-GROWTHPM, GTM-DEMANDGEN, GTM-PMM, GTM-CI | 수요창출·성장·마케팅·경쟁정보 | | FAM-GTM-SALES | GTM-SALES, GTM-CS, GTM-PARTNER | 영업·CS·파트너 | | FAM-REVOPS | GTM-REVOPS, GTM-PRICING | 레비뉴옵스·프라이싱 | | FAM-LEGAL | GTM-LEGAL | 법무/컴플라이언스(렌즈: LEGAL) | - 총 26개 패밀리, 62개 role 전부 정확히 1개 패밀리에 배정(중복·누락 없음). - 효율 이득의 핵심: 엔지니어 11→3, 아키텍처/데이터 10→3, GTM 10→4로 통합. 임원 8개는 각자 distinct 렌즈라 통합하지 않음(다양성 유지의 직접 결과). - 각 패밀리 필드: `family-id`, `member-role-ids`, `carries-lenses`, `audit-capable`(bool), `default-team-types`, `instantiation-priority`(MVP 여부). ### 3.3 `org-os/06-agent-work/collaboration-modes.yaml` — 발산/수렴 - **DIVERGENT** - 목적: 다양한 옵션·아이디어 생성. - 메커니즘: 렌즈별 **병렬 팬아웃** — 서로 다른 렌즈/프레이밍을 부여한 N개 에이전트를 동시에 스폰. - 합성: 합성 에이전트 1명이 옵션을 **수집·정리(결정 아님)**, 렌즈별 트레이드오프 노출. 하나의 추천으로 병합 금지. - 배리어: **허용**(모든 옵션을 모아야 합성 가능 — 정당한 배리어). - **CONVERGE** - 목적: 책임소재 있는 결정·승인. - 메커니즘: tier 가중 DRAI. 추천자 병렬 실행, 감사자 병렬(heavy), decider가 종합. - 출력: decision-record = 선택 옵션 + 인정된 트레이드오프 + **반대의견(dissent) 기록**. - 규칙: High/Critical 위험 → 인간 decider (기존 유지). - **2단계 파이프라인:** `divergent → converge`를 원할 때 파이프라인으로 연결(발산 결과가 수렴 입력). ### 3.4 `org-os/06-agent-work/governance-tiers.yaml` — 기어(티어) - **파생 입력 3종:** `risk-level`(Low/Med/High/Critical), `reversibility`(two-way-door/one-way-door), `blast-radius`(single-role/cross-team/production-customer-revenue). - **파생 규칙(레벨 가산 방식 — "비가역=무조건 HEAVY" 과분류 방지):** 1. **base** = 위험도로 결정: `Low`→LIGHT, `Med`→STANDARD, `High|Critical`→HEAVY. 2. **modifier**(각 +1 레벨, HEAVY에서 상한): `one-way-door` +1, `cross-team` +1. 3. **hard floor**: `production/customer/revenue blast`이면 최소 HEAVY. - 예) Low+one-way+single = LIGHT+1 = **STANDARD** (HEAVY 아님). Med+one-way+cross = **HEAVY**. Low+two-way+single = **LIGHT**. - 인간은 언제나 상향 escalate 가능. Orchestrator는 제안만. **위험도 base 아래로 자동 하향 금지**(High/Critical는 항상 HEAVY). - **티어별 요구(converge):** - LIGHT: owner + 리뷰어1. evidence-grade 최소 E2. 보안/법무/프라이버시 접촉 시에만 감사자 +1. 인간 불필요. - STANDARD: decider + 관련 추천(병렬) + 감사1. evidence 최소 E3. 인간 informed(비차단). - HEAVY: `drai-matrix` 그대로 풀 DRAI + 감사 병렬 팬아웃(≥3) + evidence 최소 E3, unresolved-critical-risks=false (기존 state-transition Approved 조건과 동일). - **인간 게이트 조건(단일 인간 병목 완화):** 위험 `High|Critical` **또는** `production/customer/revenue blast`이면 **인간 decider(차단)**. 그 외 modifier로만 HEAVY에 도달한 경우(예: Med+비가역+교차팀)는 **EXEC-CEO decider + 인간 informed(비차단)**. 인간은 항상 상향해 직접 decider가 될 수 있다. - **티어별 요구(divergent):** LIGHT=3렌즈/역발상 선택, STANDARD=5렌즈+역발상 필수, HEAVY=전 관련 렌즈+역발상 필수+트레이드오프 매트릭스. ### 3.5 `org-os/06-agent-work/execution-policy.yaml` — 파이프라인·병렬감사 - `pipeline-default: true` — 항목이 wave 동료를 기다리지 않고 단계 간 흐름. - `barrier-allowed-only-when: [divergent-synthesis, dedup-across-all-findings, early-exit-on-zero, cross-item-comparison-required]`. - `wave-size ≤ 5` = **동시성 상한이지 배리어가 아님**(scorecard의 hard-rule 재해석). - `parallel-audit-fanout`(heavy): 독립 검증자 N≥3, 서로 다른 렌즈, 각자 **반증(refute) 지향** 프롬프트; 과반 반증 → `Blocked`. - `verifier-independence`: 검증자 패밀리는 자기 패밀리가 작성한 산출물을 검증하지 않는다(기존 independent-audit 이해상충 규칙과 정합). - `re-hydration-control`: 각 단계는 **구조화 요약(evidence 링크)**만 다음 단계로 전달, raw 로그 금지 — `context-package-spec`의 compression-policy 강제. --- ## 4. 기존 파일 최소 수정 (참조만 추가, 의미 제거 없음) ### 4.1 `role-selection-scorecard.yaml` - `output-template`에 `mode`, `tier`, `assigned-lens`, `lens-coverage` 필드 추가. - hard-rules 추가: - "wave 전에 mode와 tier를 선언해야 한다." - "divergent는 tier별 최소 렌즈 수를 충족해야 한다." - "converge-heavy는 렌즈를 하나로 병합하지 않는다." ### 4.2 `context-package-spec.yaml` - required/schema에 `mode`, `tier`, `assigned-lens`, `divergent-framing`(발산 시 각 에이전트에 주는 상이한 프레이밍) 추가. ### 4.3 `state-transition-rules.yaml` - **상태 어휘 3중 정합(state-vocabulary-map) 블록 추가** — 이번 작업의 파이프라인/티어가 돌기 위한 전제라 포함: - `workflow-stage`(라이프사이클, 단일 원천): intake→discovery→design→review→implementation→verification→release→closed (+blocked) - `document-state`(개별 산출물): Draft→Review→Approved→Closed - `review-state`(부모-자식 수용 1건): Submitted-for-Review→Accepted|Changes-Requested|Blocked - 매핑: workflow-stage가 워크플로우의 단일 원천. 각 stage 내부에서 document는 document-state를, handoff는 review-state를 가진다. hook은 document-state/review-state를 전이시키고, 해당 stage의 게이팅 문서가 Approved/Accepted에 도달하면 workflow-stage가 전진한다. - `tier-modifiers` 참조 추가: LIGHT는 감사자 요구 완화 + evidence 최소 E2 허용, HEAVY는 기존 조건 그대로. (실제 값은 `governance-tiers.yaml`이 단일 원천) ### 4.4 `org-os/README.md` - 신규 5개 파일 등재. - `03-products` 드리프트 정리: `{product-id}/pr-faq.md·roadmap.md·metrics.md` 구조를 정본으로 채택(README 기준), Claude Code 명세 쪽을 이에 맞춤은 후속 메모. - 패밀리가 인스턴스화 단위이고 62 role은 참조 분류체계임을 한 줄 명시. --- ## 5. 의도된 흐름 (나중 구현용 스펙 — 이번엔 문서화만) ``` /ceo-intake → CEO AI: (a) mode 선택받음(divergent/converge) (b) risk·reversibility·blast-radius로 tier 제안 /plan-wave → Orchestrator: mode×tier로 팬아웃 형태 결정 divergent → 렌즈별 병렬 팬아웃 + 합성 converge → tier 가중 DRAI(추천 병렬, heavy면 감사 병렬 팬아웃) /run-wave → execution-policy에 따라 배리어가 아닌 파이프라인으로 실행 ``` 이 흐름은 command 계층(=.claude) 구현 대상이므로 이번 라운드에서는 **명세 기술만** 하고 구현하지 않는다. --- ## 6. 컴포넌트 경계 (격리·독립성) | 컴포넌트 | 하는 일 | 의존 | |---|---|---| | lens-registry | 다양성 바닥·렌즈↔패밀리 매핑 제공 | capability-families | | capability-families | 62 role → 26 패밀리 인스턴스화 매핑 | roles.yaml(참조) | | collaboration-modes | 발산/수렴의 실행 형태 정의 | lens-registry, execution-policy | | governance-tiers | 위험→티어 파생·티어별 요구 정의 | drai-matrix, state-transition-rules(참조) | | execution-policy | 파이프라인·병렬감사·재적재 제어 | context-package-spec(참조) | 각 파일은 단일 관심사만 담고 다른 파일은 id/참조로만 연결 → 하나를 바꿔도 나머지가 안 깨진다. --- ## 7. 성공 기준 (수용 조건) 1. 62개 role이 정확히 1개 패밀리에 배정(중복·누락 0). 2. 11개 렌즈 각각 carrier 패밀리 ≥ 1. 3. tier×mode 6개 셀 모두 요구사항 정의됨. 4. 기존 파일 변경은 **참조 추가뿐**이고 기존 rigor 의미 제거 없음(HEAVY == 오늘 동작). 5. 신규 파일이 참조하는 모든 role-id/family-id/lens-id가 실제 정의에 존재(orphan 0). 6. TIER-HEAVY 경로가 기존 `state-transition-rules`의 Approved/Closed 조건과 모순되지 않음. --- ## 8. 리스크와 대응 | 리스크 | 대응 | |---|---| | 티어 오분류로 고위험 작업이 경량 처리 | 위험도 바닥 규칙(High/Critical→HEAVY 자동), 인간 상향 escalate 상시 허용 | | 패밀리 통합으로 시각 축소 우려 | R1(다른 렌즈 병합 금지) + 성공기준 2로 구조적 차단 | | 상태 어휘 3중이 hook 구현 시 혼란 | §4.3 state-vocabulary-map으로 단일 원천(workflow-stage) 확정 | | 명세만 바뀌고 실행체와 괴리 | §5를 구현용 스펙으로 남겨 다음 라운드(.claude) 입력으로 사용 | --- ## 9. 후속(이번 범위 밖, 메모) - 참조 무결성 validator 스크립트(모든 role/family/lens id 존재 검사). - thin vertical slice(.claude 에이전트·command·hook) — 위 §5 흐름을 실제로 구현·검증. - Claude Code 명세 문서와 README의 `03-products` 표기 일원화 반영.