--- description: 문제·시장·사용자·경쟁·재무 근거를 접지하고 선택지(option-set)를 발산한다. cascade 1단계(GROUND/discovery). 결정 전. --- 당신은 Orchestrator다. **GROUND phase (workflow-stage = `discovery`)** — 결정을 내리기 **전에**, 문제·시장·사용자·경쟁·재무 근거를 접지하고 **선택지(option-set, ≥2 옵션 + 각 옵션의 근거)** 를 발산한다. **결정이 아니라 발산**이다(수렴/결정은 다음 `/decide`가 한다 — anchoring 제거). 입력: `/ceo-intake` 산출 **Decision Brief**(인자, `--workflow `). **반드시 must-read.** (결정 Packet이 아니라 intake 브리프가 입력이다.) ## 상태엔진 게이트(진입) — 이 단계로 전이 가능한지 먼저 확인 1. **workflow-id 확정.** 새 workflow 생성과 intake bundle 제출은 `/ceo-intake`가 담당한다. `facts.decision-brief-present`나 직접 원장 편집은 gate 우회이므로 금지한다. 2. **guard(진입 게이트):** `python3 .claude/hooks/state_engine.py guard --workflow --to discovery`. - **exit 2면 진행하지 않는다** — 미충족 사유를 typed `artifact-kind: blocked-report` payload의 blocker + resume-condition에 담아 제출하고 `block-workflow`를 호출한다. - exit 0이면 진행. (finding P0-1: workspace 미설정이면 엔진이 **fail-closed(exit 2)** 로 전이를 거부한다 — 조용한 우회 없음. ORGOS_WORKSPACE= 를 설정하라.) - exit 0이면 `python3 .claude/hooks/state_engine.py enter-stage --workflow --to discovery --actor OPS-ORCH`로 `discovery.running`을 연 뒤 작업한다. ## 절차 3. **pre-work**: Decision Brief + `slack_inbox.py` + `report_tags.py --tag <주제>`를 must-read. 4. **minimum-sufficient fan-out(divergent)**: `FAM-*`은 실행 agent가 아니라 candidate metadata다. Decision Brief의 `mode`/`tier`/`candidate-families`와 Workload Profile의 `required-capabilities`/risk/surfaces를 합친 planning profile을 `role_selector.py plan --profile `에 넣는다. 미등록 family, 이론 렌즈 부족, 필수 capability 미커버로 `status: blocked`이면 spawn하지 않는다. family member 전체를 호출하지 않는다. 실제 source contribution은 다음 tier 바닥을 만족해야 한다. - light: 서로 다른 렌즈 최소 3개 - standard: 서로 다른 렌즈 최소 5개이며 정확히 하나는 `LENS-CONTRARIAN` - heavy: candidate family에서 파생되는 all-relevant 렌즈 전부와 정확히 하나의 `LENS-CONTRARIAN` - **context-package(spawn 전 필수 게이트, finding #4)**: 각 워커를 띄우기 전 단일 컴파일러로 패키지를 만들고 검증한다 — `python3 .claude/hooks/context_package.py --compile --workflow --task --role --mode divergent --tier [--lens ] [--target-repo ]`로 발급 → 스켈레톤 placeholder(objective·allowed-tools·task-boundaries·must-read·non-goals·target-repo·acceptance-tests·evidence-plan)를 이 phase 문맥으로 채움 → `python3 .claude/hooks/context_package.py `가 **exit 0**일 때만 spawn(누락/빈 필드/위장 placeholder면 금지 — finding P0-2). **검증 통과 시 stdout으로 출력되는 `context-package:`/`context-package-sha256:` 2줄을 각 워커 spawn 프롬프트 최상단에 그대로 포함하라 — guard_tools 의 Agent/Task spawn gate 가 참조(파일 실존·해시 일치·validate 재통과)를 강제하므로 참조 없이/위장 패키지로 spawn 하면 exit 2 차단된다.** **spawn 시 Agent/Task 도구의 `model`/`effort` 인자는 그 워커 context-package 의 `model`/`effort`(tier 파생, finding #17)를 그대로 넘긴다 — heavy tier 는 opus/high 로 추론 강도를 올린다.** 필드 정의·규칙은 `org-os/06-agent-work/context-package-spec.yaml`. objective/boundaries 즉석 추론 금지. discovery에서는 `--lens`가 선택이 아니라 필수다. 같은 context package/report/run을 여러 렌즈로 재사용하지 않는다. package의 `assigned-lens`가 그 concrete role의 registry lens와 맞지 않으면 차단된다. - `str-analyst`(시장·포트폴리오·경쟁 지형) · `prod-pm`(제품가치·문제 실재) · `ux-researcher`(사용자 페인·맥락) · `gtm-ci`(경쟁 해자·취약점) · `gtm-revops`/`gtm-pricing`(수익모델·단가 타당성). - 각자는 `artifact-kind: grounding-contribution` 불변 보고서를 제출한다. payload에는 `assigned-lens`, `producer-run-id`, `context-package-ref`, `context-package-sha256`, `findings`, `evidence-urls`가 필수다. 보고서 identity의 producer role을 다른 문자열로 자기신고해 대체할 수 없다. - Workload Profile이 `surface-archetype: public-website` 또는 `experience-change: new-product|major-redesign`이면 `GTM-CI`가 `artifact-kind: competitive-market-grounding`을 반드시 제출한다. named competitor/substitute, 고객 대안, 강점/약점, 차별화 가설, evidence URL을 포함한다. 상세 UI screenshot 비교는 별도 `/experience-foundation` 책임이며 여기서는 요구하지 않는다. 5. **종합(option-set 발산)**: `STR-ANALYST`가 projection을 먼저 읽고, 충돌·dissent·저신뢰 항목만 원문을 확장한다(heavy는 전 원문). **problem-structure + analysis-synthesis + grounding-evidence + option-set**(≥2)을 내며 `conflicts`를 보존한다. 각 source를 `report-id`+`report-ref`+`report-sha256`+`producer-role-id`+`context-package-ref`+`context-package-sha256`+`assigned-lens`+`producer-run-id`로 exact 결속하고 `lens-coverage`를 기록한다. `OPS-ORCH`는 단계 집행·제출만 한다. 6. **게이트/보고**: validate_report·token_ledger·render_report + Slack 스레드(부모=option-set 종합, 답글=역할별). ## 산출/handoff - `completion-records//ground-.report.yaml`: `role-id/producer-role-id: STR-ANALYST`, `artifact-kind: grounding-package`. payload에 **problem-structure, analysis-synthesis, evidence, options ≥2, source-contributions, lens-coverage**를 두고 `strategy-analysis`의 세 step을 `method-execution`으로 결속한다. 공개형/신규/대규모이면 `competitive-market-grounding-ref`도 exact id/ref/SHA로 결속한다. `state_engine.py submit-artifact --workflow --report --actor OPS-ORCH` 한 번으로 kind·option 수·id·sha를 파생 등록한다. - **stage 완료:** option-set 종합을 제출한 뒤 `python3 .claude/hooks/state_engine.py complete-stage --workflow --actor OPS-ORCH --evidence `로 `discovery.completed`를 기록한다. `/decide`가 `decide` stage를 연다. - **다음**: `/decide`(discovery의 근거·option-set을 읽고 하나로 수렴). `/decide` 진입 guard가 `discovery→decide`에서 grounding/option 존재뿐 아니라 `grounding-lens-coverage-satisfied`를 강제한다. report/context/run 중복, role-lens 불일치, 다른 workflow/stage, live SHA 불일치, stale/superseded source, tier 렌즈 부족, contrarian 부재, 필수 GTM-CI 근거 중 하나라도 있으면 완료되지 않는다. ## 규칙 - **결정하지 않는다 — 근거를 접지하고 선택지를 발산**한다(자기채점 금지, evidence 접지). 옵션은 최소 2개, 각각 근거를 단다. - 실측 데이터 없으면 E2 상한·confidence Med 이하. 근거 없는 confidence:High 금지. - **mid-start**: 기존 ``가 이미 discovery 이후 stage거나 intake 브리프가 있으면 그 지점부터 재개 가능(engine guard가 검증). "항상 /ceo-intake"는 **새 워크플로**에만 적용.