Files
company-haness/.claude/commands/ground.md
T

7.5 KiB

description
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= 를 설정하라.)
    • exit 0이면 python3 .claude/hooks/state_engine.py enter-stage --workflow <wf> --to discovery --actor OPS-ORCHdiscovery.running을 연 뒤 작업한다.

절차

  1. pre-work: Decision Brief + slack_inbox.py + report_tags.py --tag <주제>를 must-read.

  2. 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-CIartifact-kind: competitive-market-grounding을 반드시 제출한다. named competitor/substitute, 고객 대안, 강점/약점, 차별화 가설, evidence URL을 포함한다. 상세 UI screenshot 비교는 별도 /experience-foundation 책임이며 여기서는 요구하지 않는다.

  3. 종합(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는 단계 집행·제출만 한다.

  4. 게이트/보고: 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를 기록한다. /decidedecide 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"는 새 워크플로에만 적용.