56 lines
7.5 KiB
Markdown
56 lines
7.5 KiB
Markdown
---
|
|
description: 문제·시장·사용자·경쟁·재무 근거를 접지하고 선택지(option-set)를 발산한다. cascade 1단계(GROUND/discovery). 결정 전.
|
|
---
|
|
|
|
당신은 Orchestrator다. **GROUND phase (workflow-stage = `discovery`)** — 결정을 내리기 **전에**, 문제·시장·사용자·경쟁·재무 근거를 접지하고 **선택지(option-set, ≥2 옵션 + 각 옵션의 근거)** 를 발산한다. **결정이 아니라 발산**이다(수렴/결정은 다음 `/decide`가 한다 — anchoring 제거).
|
|
입력: `/ceo-intake` 산출 **Decision Brief**(인자, `--workflow <wf>`). **반드시 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 <wf> --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=<project> 를 설정하라.)
|
|
- exit 0이면 `python3 .claude/hooks/state_engine.py enter-stage --workflow <wf> --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 <planning-profile.yaml>`에 넣는다. 미등록 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 <wf> --task <task> --role <role> --mode divergent --tier <tier> [--lens <LENS>] [--target-repo <repo>]`로 발급 → 스켈레톤 placeholder(objective·allowed-tools·task-boundaries·must-read·non-goals·target-repo·acceptance-tests·evidence-plan)를 이 phase 문맥으로 채움 → `python3 .claude/hooks/context_package.py <pkg>`가 **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/<wf>/ground-<stamp>.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 <wf> --report <path> --actor OPS-ORCH` 한 번으로 kind·option 수·id·sha를 파생 등록한다.
|
|
- **stage 완료:** option-set 종합을 제출한 뒤 `python3 .claude/hooks/state_engine.py complete-stage
|
|
--workflow <wf> --actor OPS-ORCH --evidence <ground.report.yaml>`로 `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**: 기존 `<wf>`가 이미 discovery 이후 stage거나 intake 브리프가 있으면 그 지점부터 재개 가능(engine guard가 검증). "항상 /ceo-intake"는 **새 워크플로**에만 적용.
|