init: company-haness 설계

This commit is contained in:
DongHyeonka
2026-07-23 17:49:00 +09:00
parent 57d1bab894
commit f668d6a158
962 changed files with 98989 additions and 1 deletions
+36
View File
@@ -0,0 +1,36 @@
# 06-agent-work — 계약·정책 (SSOT only)
org-os는 **SSOT(정의·계약)만** 남긴다. 이 폴더는 이제 **에이전트 협업의 규칙(계약 YAML)만** 담는다.
실제 **작업 산출물·런타임 상태는 프로젝트별 root 폴더**로 나갔다(아래).
## 계약 (정책 YAML — 규칙 바꿀 때만 수정)
| 파일 | 정체 |
|---|---|
| `collaboration-modes.yaml` | divergent(발산)/converge(수렴) 모드 규칙 |
| `governance-tiers.yaml` | light/standard/heavy 티어 + 인간 게이트 |
| `execution-policy.yaml` | pipeline·fan-out/collapse·synthesis-rehydration·병렬감사 |
| `collaboration-map.yaml` | 설계→구현 handoff + cascade + 그룹 간 협업 엣지 |
| `context-package-spec.yaml` | subagent 입력 계약(무엇을 주고 무엇을 금지) + design-brief |
| `report-templates.yaml` | 보고서 템플릿 + YAML→MD 렌더 매핑 |
| `design-brief-spec.yaml` | 디자인·비주얼 산출물의 제약층 계약 |
| `agent-operating-kpi.yaml` | 에이전트 운영 KPI·토큰 예산 정의 |
## 산출물·상태는 프로젝트 워크스페이스로 (org-os 밖)
생성물은 더 이상 여기 쌓이지 않는다. **현재 워크스페이스**(`.orgos-workspace` 또는 env `ORGOS_WORKSPACE`, 기본 `test-labs-documents`) 아래로 간다 — 훅은 `.claude/hooks/_workspace.py`로 경로를 해석한다.
```
<project>/ # 예: test-labs-documents/, ca-tmpl/, _sandbox/
completion-records/<wf>/*.report.yaml # 에이전트 보고서 = SoT (불변, guard가 검증)
completion-records/<wf>/*.md # 대표용 렌더 (render_report.py 자동 생성)
evidence/<wf>/* # 보고서가 source-uri로 인용하는 근거 자료 (지우면 evidence 깨짐)
reports/INDEX.md, TOKENS.md # 이 프로젝트 목차·토큰 대시보드 (자동 생성)
state/ # workflow-state-registry·work-queue·evidence-ledger·token-ledger.jsonl
slack-inbox/, slack-outbox/ # 알림 큐
design-system/ # (있으면) 그 프로젝트 디자인 시스템
```
## 보고서 불변식 (변함 없음)
- 경로는 `new_report.py --workflow <wf> --role <role>`로 발급 → 현재 워크스페이스의 `completion-records/<wf>/<role>-<UTCstamp>.report.yaml`.
- 한 번 쓴 `.report.yaml`**덮어쓰기·Edit 금지**(`guard_tools``completion-records/*.report.yaml` 경로로 차단 — 위치 무관). 재작업도 새 파일로 감사 추적 보존.
- MD는 YAML의 파생 뷰(idempotent). `reports/INDEX.md`는 워크플로별 append-only 목차(`render_report.py --index`, 현재 워크스페이스 기준).
- 사람은 `<project>/completion-records/<id>.md`(또는 `reports/INDEX.md`)만 읽으면 된다. **YAML은 에이전트용, MD는 사람용.**
@@ -0,0 +1,96 @@
agent-operating-kpi:
version: 1
# fan-out 토큰 예산(권고 #1). 근거: Anthropic 멀티에이전트 ~15배 토큰, 토큰량이 성능분산 80% 설명.
# 초과 시 Orchestrator가 fan-out을 collapse(단일 종합)로 강등(execution-policy fan-out-collapse-policy).
token-budgets:
note: wave당 fan-out 누적 토큰 상한(가늠값 — 실측 token-ledger로 보정). 강제 주체는 Orchestrator, 계측·게이트는 token_ledger.py.
per-wave:
light: 150000
standard: 500000
heavy: 2000000
cost-per-1k-tokens-usd: 0.015 # cost-per-decision 추정용 대략치(모델/플랜별 상이)
enforced-by: ".claude/hooks/token_ledger.py (log/dashboard/check) + run-wave Orchestrator 강등 규칙"
ledger: state/token-ledger.jsonl (append-only)
dashboard: reports/TOKENS.md
# finding #19: 수집기. 파생 가능한 KPI는 기존 아티팩트(completion-records 시도수·acceptance-events
# 결정·token-ledger)에서 실측하고, 나머지는 수동 이벤트/미측정으로 정직히 구분한다.
collector:
tool: .claude/hooks/kpi_ledger.py
commands: "derive [--workflow WF] · log --metric M --value V · dashboard"
ledger: state/kpi-ledger.jsonl (append-only)
dashboard: reports/KPI.md
derived-now: [rework-rate, duplicate-report-rate, human-intervention-rate, release-gate-failure-rate, context-bloat-rate]
honesty: 미측정 KPI를 '측정됨'으로 위장하지 않는다(대시보드가 derived/manual/미측정 구분).
metrics:
rework-rate:
definition: Changes Requested count / submitted outputs
target: decrease-over-time
blocker-reopen-rate:
definition: reopened blockers / resolved blockers
target: below-5-percent
hallucination-rate:
definition: rejected unsupported claims / total claims reviewed
target: below-2-percent
context-bloat-rate:
definition: unused-or-duplicated-context-tokens / total-planned-context-tokens
target: below-10-percent
decision-latency:
definition: time from Decision Brief to user or CEO AI decision
target: fit-by-priority
release-gate-failure-rate:
definition: failed Release Acceptance checks / total release checks
target: decrease-over-time
human-intervention-rate:
definition: human interventions / total workflows
target: expected-for-high-risk-only
duplicate-report-rate:
definition: duplicated reports / total reports
target: below-5-percent
skipped-role-incident-rate:
definition: incidents caused by skipped roles / total incidents
target: zero-critical
time-to-market:
definition: time from approved product hypothesis to first verified delivery
target: decrease-without-quality-loss
value-stream-lead-time:
definition: time from user/business friction discovery to accepted workflow outcome
target: decrease-over-time
platform-adoption-rate:
definition: workflows using approved golden path / eligible platform workflows
target: increase-over-time
golden-path-exception-rate:
definition: approved exceptions to platform golden path / eligible platform workflows
target: below-10-percent
slo-risk-escape-rate:
definition: SLO-impacting risks found after release acceptance / SLO-impacting workflows
target: zero-critical
shift-left-detection-rate:
definition: security or quality issues found before implementation / total issues found
target: increase-over-time
capability-duplication-rate:
definition: duplicated business or platform capabilities / reviewed capabilities
target: decrease-over-time
learning-capture-rate:
definition: workflows with explicit learning and simpler-alternative reflection / total closed workflows
target: above-90-percent
pipeline-forecast-accuracy:
definition: 1 - absolute pipeline forecast variance
target: above-90-percent
PQL-to-SQL-conversion-rate:
definition: sales-qualified leads from product-qualified leads / product-qualified leads
target: increase-over-time
lead-to-cash-cycle-time:
definition: time from qualified lead or PLS trigger to closed-won or closed-lost outcome
target: decrease-without-quality-loss
net-revenue-retention:
definition: retained recurring revenue plus expansion minus contraction and churn
target: above-100-percent
pricing-governance-violation-rate:
definition: unauthorized pricing or discount exceptions / total reviewed deals
target: below-2-percent
legal-review-latency:
definition: time from contract or compliance review request to approval or changes requested
target: fit-by-priority
partner-sourced-revenue-share:
definition: partner-sourced ARR / total new ARR
target: increase-where-strategic
@@ -0,0 +1,195 @@
# artifact-type-vocabulary — handoff·required-inputs·output-artifacts가 참조하는 통제 어휘(P3-B).
# 계약(Contract v2)의 required-inputs/handoff-contract/output-artifacts가 여기 정의된 artifact-type만 참조.
# schema-ref 로 산출물 스키마 연결(있으면 handoff gate가 구조 검증). required-fields 로 최소 필드.
# Phase 5-6 wave에서 새 역할 계약 작성 시 필요한 artifact-type을 여기에 additive로 추가한다.
artifact-types:
# ── 결정·제품 ──
product-decision: { producer-roles: [EXEC-CEO, PROD-PM], schema-ref: decision.schema.json }
venture-decision: { producer-roles: [EXEC-CEO], schema-ref: decision.schema.json }
prd: { producer-roles: [PROD-PM, PROD-TPO], schema-ref: spec.schema.json }
# ── 디자인(P2 design-direction 산출물과 정합) ──
direction-input-brief: { producer-roles: [DES-PROD], schema-ref: null }
competitive-experience-benchmark: { producer-roles: [GTM-CI], schema-ref: null }
grounding-contribution: { producer-roles: [EXEC-CEO, EXEC-CTO, EXEC-CPO, EXEC-CFO, EXEC-COO, EXEC-CPTO, EXEC-VPENG, PROD-PM, PROD-PO, PROD-TPO, PROD-PPO, UX-RESEARCHER, DATA-ANALYST, DES-DIRECTOR, DES-PROD, DES-PLATFORM, DES-INTERNAL, DES-VISUAL, STR-ANALYST, ENG-FE, ENG-FEPLAT, ENG-FEUX, ENG-BE, ENG-BEGEN, ENG-PRODSERVER, ENG-PLATSERVER, ENG-PRODUCTMINDED, ENG-SW, ENG-DESKTOP, ENG-PRODCHAPTER, INFRA-DEV, INFRA-PLATFORM, INFRA-DEVOPS, SRE, SEC-DEVSECOPS, ARCH-EA, ARCH-SOLUTION, ARCH-APP, ARCH-TECH, ARCH-IT, ARCH-SYSANALYST, ARCH-SWAT, ARCH-BA, ARCH-BIZANALYST, ARCH-DATA, DATA-ENGINEER, DATA-BIGDATA, QA, SEC-ENGINEER, SEC-APPSEC, SEC-CHAMPION, OPS-CH, OPS-CREW, GTM-GROWTHPM, GTM-DEMANDGEN, GTM-PMM, GTM-CI, GTM-SALES, GTM-CS, GTM-PARTNER, GTM-REVOPS, GTM-PRICING, GTM-LEGAL, CONSULT-EM, CONSULT-STRAT, CONSULT-OPS, CONSULT-ORG, CONSULT-DIGITAL, CONSULT-FIN, DOC-LEAD, DOC-WRITER, DOC-IA, DOC-VISUAL, DOC-EDU], schema-ref: null, required-fields: [assigned-lens, producer-run-id, context-package-ref, context-package-sha256, findings, evidence-urls] }
competitive-market-grounding: { producer-roles: [GTM-CI], schema-ref: null, required-fields: [assigned-lens, producer-run-id, context-package-ref, context-package-sha256, competitors-and-substitutes, current-alternatives, strengths-weaknesses, differentiation-hypotheses, evidence-urls] }
experience-strategy: { producer-roles: [EXEC-CPO], schema-ref: null }
experience-technical-feasibility: { producer-roles: [EXEC-CTO, EXEC-CPTO], schema-ref: null }
experience-operational-feasibility: { producer-roles: [EXEC-COO], schema-ref: null }
experience-blueprint: { producer-roles: [DOC-IA], schema-ref: null }
wireframe-set: { producer-roles: [DES-PROD], schema-ref: null }
design-system-release: { producer-roles: [DES-PLATFORM], schema-ref: null }
design-engine-output: { producer-roles: [DES-PROD, DES-VISUAL, DES-PLATFORM, ENG-FEUX], schema-ref: null }
first-draft-evaluation: { producer-roles: [UX-RESEARCHER, DES-DIRECTOR], schema-ref: null }
experience-constraints: { producer-roles: [DES-PROD], schema-ref: null }
divergence-charter: { producer-roles: [DES-DIRECTOR], schema-ref: null, required-fields: [directions, pairwise-separation] }
direction-set: { producer-roles: [OPS-ORCH, DES-VISUAL], schema-ref: null }
comparative-divergence-audit: { producer-roles: [DES-VISUAL], schema-ref: null, required-fields: [pairwise-comparisons, verdict] }
selected-direction: { producer-roles: [DES-DIRECTOR], schema-ref: approved-direction.schema.json }
locked-invariants: { producer-roles: [DES-DIRECTOR], schema-ref: null }
reference-cluster: { producer-roles: [DES-VISUAL], schema-ref: null }
interaction-state-model: { producer-roles: [DES-PROD], schema-ref: null, required-fields: [states, transitions, exceptions] }
design-decision-record: { producer-roles: [DES-PROD, DES-VISUAL, DES-INTERNAL], schema-ref: null }
token-contract: { producer-roles: [DES-PLATFORM], schema-ref: null }
# ── 제품(product family) ──
user-research: { producer-roles: [UX-RESEARCHER], schema-ref: null, required-fields: [method, findings, evidence] }
metrics-analysis: { producer-roles: [DATA-ANALYST], schema-ref: null, required-fields: [north-star, metric-tree] }
acceptance-criteria: { producer-roles: [PROD-PO], schema-ref: null }
platform-prd: { producer-roles: [PROD-PPO], schema-ref: null }
# ── 임원·의사결정(EXEC family) ──
grounding-evidence: { producer-roles: [STR-ANALYST], schema-ref: null, required-fields: [problem-structure, evidence, sources] }
option-set: { producer-roles: [STR-ANALYST], schema-ref: null, required-fields: [options] }
financial-assessment: { producer-roles: [EXEC-CFO], schema-ref: null }
tech-assessment: { producer-roles: [EXEC-CTO], schema-ref: null }
product-assessment: { producer-roles: [EXEC-CPO], schema-ref: null }
ops-assessment: { producer-roles: [EXEC-COO], schema-ref: null }
integration-decision: { producer-roles: [EXEC-CPTO], schema-ref: null }
release-recommendation: { producer-roles: [EXEC-VPENG], schema-ref: null }
wave-plan: { producer-roles: [OPS-ORCH], schema-ref: null }
# ── 아키텍처(architecture family) ──
requirements-spec: { producer-roles: [ARCH-BIZANALYST], schema-ref: null, required-fields: [requirements, stakeholders, process-model] }
system-requirements: { producer-roles: [ARCH-SYSANALYST], schema-ref: null, required-fields: [use-cases, interfaces] }
business-architecture: { producer-roles: [ARCH-BA], schema-ref: null, required-fields: [capability-map, value-stream] }
enterprise-architecture: { producer-roles: [ARCH-EA], schema-ref: null, required-fields: [target, gap-analysis, roadmap] }
reference-architecture: { producer-roles: [ARCH-SWAT], schema-ref: null, required-fields: [pattern, poc-result] }
solution-architecture: { producer-roles: [ARCH-SOLUTION], schema-ref: null, required-fields: [nfr, tradeoffs, topology] }
it-architecture: { producer-roles: [ARCH-IT], schema-ref: null }
application-architecture: { producer-roles: [ARCH-APP], schema-ref: null, required-fields: [c4, bounded-contexts] }
# ── 기술·구현 ──
architecture-decision: { producer-roles: [ARCH-TECH, EXEC-CTO], schema-ref: null }
api-contract: { producer-roles: [ARCH-TECH, ARCH-APP, ENG-BE, ENG-PRODSERVER], schema-ref: null }
completion-record: { producer-roles: [ENG-BE, ENG-FE, ENG-BEGEN, ENG-PRODSERVER, ENG-SW, ENG-FEUX, ENG-PRODUCTMINDED, ENG-DESKTOP], schema-ref: completion.schema.json }
verification-record: { producer-roles: [QA], schema-ref: review.schema.json }
# ── 엔지니어링 플랫폼(engineering family 내부 공용 역량) ──
frontend-platform: { producer-roles: [ENG-FEPLAT], schema-ref: null, required-fields: [tokens, components] }
server-platform: { producer-roles: [ENG-PLATSERVER], schema-ref: null, required-fields: [shared-libs, slo] }
dev-tooling: { producer-roles: [ENG-PRODCHAPTER], schema-ref: null }
# ── 데이터(data 계열) ──
data-model: { producer-roles: [ARCH-DATA], schema-ref: null, required-fields: [conceptual, logical, physical] }
data-pipeline: { producer-roles: [DATA-ENGINEER], schema-ref: null, required-fields: [ingestion, transform, quality-tests] }
bigdata-pipeline: { producer-roles: [DATA-BIGDATA], schema-ref: null }
# ── 플랫폼·인프라·신뢰성(platform 계열) ──
infrastructure: { producer-roles: [INFRA-DEV], schema-ref: null, required-fields: [iac, state] }
developer-platform: { producer-roles: [INFRA-PLATFORM], schema-ref: null, required-fields: [golden-path, self-service] }
delivery-pipeline: { producer-roles: [INFRA-DEVOPS], schema-ref: null }
reliability-slo: { producer-roles: [SRE], schema-ref: null, required-fields: [sli, slo, error-budget] }
# ── 보안(security 계열) ──
security-architecture: { producer-roles: [SEC-ENGINEER], schema-ref: null, required-fields: [controls, framework-mapping] }
security-gate: { producer-roles: [SEC-DEVSECOPS], schema-ref: null }
threat-model: { producer-roles: [SEC-APPSEC], schema-ref: null, required-fields: [dfd, stride, mitigations] }
security-guidance: { producer-roles: [SEC-CHAMPION], schema-ref: null }
# ── GTM·수익(gtm 계열) ──
competitive-intel: { producer-roles: [GTM-CI], schema-ref: null, required-fields: [battlecards, win-loss] }
positioning: { producer-roles: [GTM-PMM], schema-ref: null, required-fields: [positioning, messaging] }
demand-pipeline: { producer-roles: [GTM-DEMANDGEN], schema-ref: null, required-fields: [icp, sourced-pipeline] }
growth-loop: { producer-roles: [GTM-GROWTHPM], schema-ref: null }
revops-model: { producer-roles: [GTM-REVOPS], schema-ref: null, required-fields: [ssot, forecast] }
pricing-guidance: { producer-roles: [GTM-PRICING], schema-ref: null, required-fields: [packaging, price-points] }
legal-review: { producer-roles: [GTM-LEGAL], schema-ref: null }
partner-program: { producer-roles: [GTM-PARTNER], schema-ref: null }
closed-deal: { producer-roles: [GTM-SALES], schema-ref: null }
retention-expansion: { producer-roles: [GTM-CS], schema-ref: null, required-fields: [nrr, health-score] }
# ── 운영(ops 계열) ──
support-resolution: { producer-roles: [OPS-CH], schema-ref: null }
process-improvement: { producer-roles: [OPS-CREW], schema-ref: null }
# ── 컨설팅(consulting 계열, EM 리드 fan-out→synthesis) ──
engagement-frame: { producer-roles: [CONSULT-EM], schema-ref: null, required-fields: [issue-tree, hypothesis, workplan] }
consult-strategy: { producer-roles: [CONSULT-STRAT], schema-ref: null }
consult-operations: { producer-roles: [CONSULT-OPS], schema-ref: null }
consult-org: { producer-roles: [CONSULT-ORG], schema-ref: null }
consult-digital: { producer-roles: [CONSULT-DIGITAL], schema-ref: null }
consult-finance: { producer-roles: [CONSULT-FIN], schema-ref: null }
consulting-storyline: { producer-roles: [CONSULT-EM], schema-ref: null, required-fields: [governing-thought, storyline] }
# ── 문서(documentation 계열, DOC-LEAD 리드 fan-out→synthesis) ──
doc-frame: { producer-roles: [DOC-LEAD], schema-ref: null, required-fields: [audience, purpose, outline] }
doc-content: { producer-roles: [DOC-WRITER], schema-ref: null }
doc-ia: { producer-roles: [DOC-IA], schema-ref: null }
doc-diagram: { producer-roles: [DOC-VISUAL], schema-ref: null }
doc-learning: { producer-roles: [DOC-EDU], schema-ref: null }
documentation-set: { producer-roles: [DOC-LEAD], schema-ref: null }
# ── Method contract checkpoint artifacts ──
# Explicit admission list. The registry compiler rejects method outputs that are not
# declared here or in workflow-contracts; method YAML alone cannot legalize a new kind.
abstraction-plan: { producer-roles: [DOC-VISUAL], schema-ref: null }
adoption-plan: { producer-roles: [GTM-CS], schema-ref: null }
alternative-proposal: { producer-roles: [ENG-PRODUCTMINDED], schema-ref: null }
analysis-synthesis: { producer-roles: [STR-ANALYST], schema-ref: null }
app-package: { producer-roles: [ENG-DESKTOP], schema-ref: null }
appsec-verification: { producer-roles: [SEC-APPSEC], schema-ref: null }
architecture-pattern: { producer-roles: [ARCH-SWAT], schema-ref: null }
assembled-draft: { producer-roles: [DOC-LEAD], schema-ref: null }
audience-purpose: { producer-roles: [DOC-LEAD], schema-ref: null }
c4-model: { producer-roles: [ARCH-APP], schema-ref: null }
capability-map: { producer-roles: [ARCH-BA], schema-ref: null }
coded-slice: { producer-roles: [DES-VISUAL], schema-ref: null }
comparison-notes: { producer-roles: [DES-VISUAL], schema-ref: null }
competitive-signals: { producer-roles: [GTM-CI], schema-ref: null }
component-library: { producer-roles: [ENG-FEPLAT], schema-ref: null }
component-spec: { producer-roles: [DES-PLATFORM], schema-ref: null }
conflicts: { producer-roles: [DES-DIRECTOR], schema-ref: null }
contract-review: { producer-roles: [GTM-LEGAL], schema-ref: null }
control-design: { producer-roles: [SEC-ENGINEER], schema-ref: null }
cost-baseline: { producer-roles: [CONSULT-OPS], schema-ref: null }
current-state-map: { producer-roles: [OPS-CREW], schema-ref: null }
data-model-layers: { producer-roles: [ARCH-DATA], schema-ref: null }
delivery-review: { producer-roles: [EXEC-VPENG], schema-ref: null }
design-brief: { producer-roles: [DES-DIRECTOR, DES-PROD], schema-ref: null }
divergence-axes: { producer-roles: [DES-DIRECTOR], schema-ref: null }
domain-implementation: { producer-roles: [ENG-PRODSERVER], schema-ref: null }
draft: { producer-roles: [DOC-WRITER], schema-ref: null }
elicitation-notes: { producer-roles: [ARCH-BIZANALYST], schema-ref: null }
evidence-digest: { producer-roles: [EXEC-CEO], schema-ref: null }
financial-model: { producer-roles: [EXEC-CFO], schema-ref: null }
friction-analysis: { producer-roles: [ENG-PRODCHAPTER], schema-ref: null }
gap-analysis: { producer-roles: [ARCH-EA], schema-ref: null }
golden-path-design: { producer-roles: [INFRA-PLATFORM], schema-ref: null }
growth-diagnosis: { producer-roles: [GTM-GROWTHPM], schema-ref: null }
ia-audit: { producer-roles: [DOC-IA], schema-ref: null }
iac-definition: { producer-roles: [INFRA-DEV], schema-ref: null }
industry-analysis: { producer-roles: [CONSULT-STRAT], schema-ref: null }
infra-blueprint: { producer-roles: [ARCH-TECH], schema-ref: null }
interaction-implementation: { producer-roles: [ENG-FEUX], schema-ref: null }
interface-contract: { producer-roles: [ENG-SW], schema-ref: null }
internal-customer-needs: { producer-roles: [PROD-PPO], schema-ref: null }
invariant-checklist: { producer-roles: [DES-PROD], schema-ref: null }
issue-tree: { producer-roles: [CONSULT-EM], schema-ref: null }
it-structure: { producer-roles: [ARCH-IT], schema-ref: null }
learning-structure: { producer-roles: [DOC-EDU], schema-ref: null }
maturity-assessment: { producer-roles: [CONSULT-DIGITAL], schema-ref: null }
metric-tree: { producer-roles: [DATA-ANALYST], schema-ref: null }
operator-brief: { producer-roles: [DES-INTERNAL], schema-ref: null }
opportunity-solution-tree: { producer-roles: [PROD-PM], schema-ref: null }
option-evaluation: { producer-roles: [EXEC-CEO], schema-ref: null }
org-diagnosis: { producer-roles: [CONSULT-ORG], schema-ref: null }
pairwise-comparisons: { producer-roles: [DES-VISUAL], schema-ref: null }
partner-onboarding: { producer-roles: [GTM-PARTNER], schema-ref: null }
per-worker-questions: { producer-roles: [DES-DIRECTOR], schema-ref: null }
pipeline-config: { producer-roles: [INFRA-DEVOPS], schema-ref: null }
pipeline-models: { producer-roles: [DATA-ENGINEER], schema-ref: null }
platform-components: { producer-roles: [ENG-PLATSERVER], schema-ref: null }
positioning-statement: { producer-roles: [GTM-PMM], schema-ref: null }
price-sensitivity: { producer-roles: [GTM-PRICING], schema-ref: null }
processing-design: { producer-roles: [DATA-BIGDATA], schema-ref: null }
product-goal: { producer-roles: [PROD-PO], schema-ref: null }
qualified-deal: { producer-roles: [GTM-SALES], schema-ref: null }
quality-of-earnings: { producer-roles: [CONSULT-FIN], schema-ref: null }
rehydration-notes: { producer-roles: [DES-DIRECTOR], schema-ref: null }
research-plan: { producer-roles: [UX-RESEARCHER], schema-ref: null }
revops-ssot: { producer-roles: [GTM-REVOPS], schema-ref: null }
routing-map: { producer-roles: [OPS-ORCH], schema-ref: null }
scan-integration: { producer-roles: [SEC-DEVSECOPS], schema-ref: null }
server-implementation: { producer-roles: [ENG-BEGEN], schema-ref: null }
signature-interaction: { producer-roles: [DES-VISUAL], schema-ref: null }
slo-definition: { producer-roles: [SRE], schema-ref: null }
solution-options: { producer-roles: [ARCH-SOLUTION], schema-ref: null }
synthesis-notes: { producer-roles: [CONSULT-EM], schema-ref: null }
target-accounts: { producer-roles: [GTM-DEMANDGEN], schema-ref: null }
team-security-guidance: { producer-roles: [SEC-CHAMPION], schema-ref: null }
technical-decomposition: { producer-roles: [PROD-TPO], schema-ref: null }
test-plan: { producer-roles: [QA], schema-ref: null }
tradeoff-matrix: { producer-roles: [DES-DIRECTOR], schema-ref: null }
triaged-tickets: { producer-roles: [OPS-CH], schema-ref: null }
ui-implementation: { producer-roles: [ENG-FE], schema-ref: null }
use-case-model: { producer-roles: [ARCH-SYSANALYST], schema-ref: null }
visual-thesis: { producer-roles: [DES-VISUAL], schema-ref: null }
workflow-model: { producer-roles: [DES-INTERNAL], schema-ref: null }
+167
View File
@@ -0,0 +1,167 @@
collaboration-map:
version: 1
purpose: >
설계→구현 handoff와 그룹 간 협업 엣지를 기계가 읽는 계약으로 인코딩한다.
"머리 쓰는 일(결정·설계·분석)은 fan-out으로 각자 관점을 남기고, 코드는 collapse로 효율" 원칙의 실행 배선.
source-of-topology: org-os/00-role-registry/team-topology-map.yaml
source-of-collaboration-default: org-os/00-role-registry/capability-families.yaml
cross-references:
- "execution-policy.yaml (fan-out-collapse-policy, synthesis-rehydration)"
- "context-package-spec.yaml (must-read 선행조건, report-return-contract)"
- "state-transition-rules.yaml (설계 승인 전 구현 시작 금지)"
# ── 캐스케이드: 발견(근거·옵션) → 결정 → 설계 → 세부 → 구현 ─────────────
# 순서 교정(#7, 사용자 승인): GROUND(discovery, 발산)가 DECIDE(converge, 수렴) 앞에 온다.
# anchoring 제거 — 하나의 안을 미리 정하지 않고 근거·선택지를 먼저 발산한 뒤 하나로 수렴한다.
# workflow-stage = state-transition-rules.yaml/execution-plans.yaml 의 통합 stage(엔진이 강제).
cascade-phases:
- phase: GROUND
workflow-stage: discovery
collaboration: fan-out
families: [FAM-STRATEGY, FAM-PRODUCT-MGMT, FAM-UX-RESEARCH, FAM-GTM-GROWTH, FAM-REVOPS, FAM-QA]
each-produces: exact context-package/SHA와 결속된 grounding-contribution(고유 role/lens/run/report)
synthesized-by: FAM-STRATEGY / STR-ANALYST — discovery synthesis lead
synthesis-output: grounding-package(source-contributions + tier lens-coverage + option-set≥2) — 결정이 아니라 발산
input-from: intake decision-brief (ceo-intake) — 결정 packet 이 아니다
next-input-to: DECIDE
rule: >
결정 전에 문제·시장·사용자·경쟁·재무 근거를 먼저 접지하고 선택지(option-set)를 발산한다.
하나의 안을 미리 정하지 않고 ≥2 옵션을 근거와 함께 남긴다. 수렴(결정)은 다음 DECIDE 가 한다.
엔진 게이트: discovery→decide 는 grounding-evidence-present + option-set-present(≥2) +
grounding-lens-coverage-satisfied를 요구한다. standard는 총 5개 렌즈 중 contrarian 1개가 필수이며,
공개형/신규/대규모는 GTM-CI competitive-market-grounding을 추가로 exact 결속한다.
- phase: DECIDE
workflow-stage: decide
collaboration: fan-out
families: [FAM-CEO, FAM-CTO, FAM-CPO, FAM-CFO, FAM-COO, FAM-CPTO, FAM-VPENG]
each-produces: 역할별 판단 보고서(.report.yaml)
synthesized-by: FAM-CEO
synthesis-output: ExecutiveDecisionPacket (합의/충돌/근거품질/권고)
input-from: GROUND grounding-evidence + option-set (근거·선택지를 읽고 하나로 수렴)
next-input-to: DESIGN
rule: >
C-Level 각자 GROUND 의 근거·option-set 을 읽고 렌즈별로 옵션을 평가(divergent) → CEO 가 원본
전부 읽고 하나로 converge. 하위엔 개별 의견이 아니라 승인된 Packet 을 전달. 근거를 새로 만들지 않는다(그건 GROUND).
- phase: DESIGN
workflow-stage: design
collaboration: fan-out
families: [FAM-PRODUCT-MGMT, FAM-UX-RESEARCH, FAM-DESIGN, FAM-ARCHITECTURE-TECH, FAM-ARCHITECTURE-BIZ, FAM-DATA, FAM-SECURITY, FAM-STRATEGY]
each-produces: 역할별 설계·분석 보고서(PRD, RFC/ADR, data-model, threat-model, 분석)
synthesized-by: FAM-ARCHITECTURE-TECH (기술) / FAM-PRODUCT-MGMT (제품) — 도메인별 lead
synthesis-output: 큰 설계 문서(overall-design) + 역할별 상세 링크
next-input-to: DETAIL
rule: 설계는 하나로 억지 병합하지 않는다. 조금씩 달라도 상위가 원본을 읽고 종합 설계로 수렴.
- phase: DETAIL
workflow-stage: spec
collaboration: fan-out
families: [FAM-PRODUCT-MGMT, FAM-ARCHITECTURE-TECH, FAM-DATA, FAM-SECURITY]
each-produces: 컴포넌트별 세부 구현 문서(api-contract, 컴포넌트 스펙, 수용기준)
synthesized-by: 담당 설계 lead
next-input-to: BUILD
- phase: BUILD
workflow-stage: build
collaboration: collapse
families: [FAM-ENG-FRONTEND, FAM-ENG-BACKEND, FAM-ENG-SPECIAL, FAM-PLATFORM-INFRA, FAM-OPS-DELIVERY]
each-produces: completion-record(구현 결과·검증·handoff)
reviewed-by: FAM-VPENG / FAM-QA / FAM-SECURITY
rule: 승인된 설계·세부문서를 must-read로 소비하고 구현. 설계 없이 코딩 시작 금지.
# ── 설계→구현 계약: 어떤 설계 산출물이 어떤 구현 family의 선행조건인가 ──
design-to-build-contract:
rule: build family는 대응 설계 산출물이 Accepted 되기 전 구현을 시작하지 않는다(BlockedReport로 대기).
# 항목3: /design-system이 산출하는 canonical ui-design은 Accepted만으로 must-read를 충족하지 않는다.
# preview_ui 렌더 게이트 receipt(evidence-ledger, exit 0, --contrast-only 단독 아님)가 있어야
# spec→build 의 must-read-designs-accepted 를 충족한다. state_engine._has_preview_receipt 가 강제.
# 렌더된 적 없는 산문만으로 UI BUILD를 여는 docs-but-no-pixels 구멍을 봉인한다.
design-system-gate:
requires: preview_ui-render-receipt # command=preview_ui.py · exit 0 · not(--contrast-only만)
artifact-kind: ui-design
enforced-by: state_engine._has_preview_receipt # _must_read_unmet 에서 ui-design 특례
applies-when: workload-profile.surfaces.ui=true
release-binding:
source: org-os/08-design/releases/index.yaml
requires: [release-id, release-ref, release-sha256, component-ids, delta]
adherence-check: .claude/hooks/lint_design_system_adherence.py
experience-foundation-gate:
requires: [competitive-experience-benchmark, experience-strategy, experience-technical-feasibility, experience-operational-feasibility, experience-blueprint, wireframe-set]
enforced-by: state_engine._has_experience_foundation
hard-if: "surfaces.ui && (surface-archetype in [public-website, interactive-learning] || experience-change in [new-product, major-redesign])"
order: "benchmark → CPO strategy + CTO/CPTO technical + COO operational feasibility → IA blueprint → wireframes → design-direction"
exact-binding: "부모 event가 child와 여섯 accepted artifact id+path+sha256를 모두 결속"
# preview gate만으로는 /design-system을 거치지 않고 spec/build로 직행하는 우회를 막지 못한다.
# ui-design은 workflow-contracts의 UI 조건부 bundle 자체에 포함되어 누락도 fail-closed된다.
# direction-gate 는 그보다 상위(cascade 의 design→spec 전이 자체)에 건다 — UI-bearing
# standard/heavy 이면 design-direction child 가 approved 되기 전까지 design→spec 자체가 막힌다
# (state_engine.py 의 design-direction-gate-satisfied 조건, _has_direction_approval 로 검증).
direction-gate:
requires: design-direction-approved
enforced-by: state_engine._has_direction_approval
applies-to: [FAM-ENG-FRONTEND]
hard-if: "ui-bearing && tier in [standard, heavy]"
also-gates: "design->spec 전이(design-direction-gate-satisfied) — /design-system 우회 차단"
# design-direction 자체 승인은 부모 링크와 `_has_direction_approval`에서 검사하고, 그 결과로 만든
# approved-design-direction artifact는 UI design bundle의 일반 exact-review 규칙을 따른다.
mappings:
- build-family: FAM-ENG-FRONTEND
must-read-designs: [prd, overall-design, approved-design-direction, ui-design, api-contract]
design-owners: [FAM-PRODUCT-MGMT, FAM-DESIGN, FAM-ARCHITECTURE-TECH]
- build-family: FAM-ENG-BACKEND
must-read-designs: [prd, overall-design, api-contract, data-model, threat-model]
design-owners: [FAM-PRODUCT-MGMT, FAM-ARCHITECTURE-TECH, FAM-DATA, FAM-SECURITY]
- build-family: FAM-PLATFORM-INFRA
must-read-designs: [overall-design, threat-model]
design-owners: [FAM-ARCHITECTURE-TECH, FAM-SECURITY, FAM-CTO]
- build-family: FAM-ENG-SPECIAL
must-read-designs: [prd, overall-design, api-contract]
design-owners: [FAM-PRODUCT-MGMT, FAM-ARCHITECTURE-TECH]
# ── 그룹 간 양방향 협업 엣지(플로우차트) ───────────────────────────────
cross-group-edges:
rule: 각 엣지는 declared handoff 채널이다. 방향별 handoff-artifact를 명시하고, 미전달 시 해당 작업은 입력 부족으로 Blocked.
edges:
- id: demand-product
a: FAM-GTM-GROWTH
b: FAM-PRODUCT-MGMT
a-to-b: "ICP·포지셔닝·캠페인 메시지"
b-to-a: "제품 가치·로드맵·출시 맥락"
- id: conversion-build
a: FAM-REVOPS
b: FAM-ENG-BACKEND
a-to-b: "온보딩·PQL·전환 실험 요구"
b-to-a: "제품 사용 이벤트·한도·계측"
- id: expansion-product
a: FAM-GTM-SALES
b: FAM-PRODUCT-MGMT
a-to-b: "이탈 위험·기능 채택·확장 신호"
b-to-a: "개선 계획·릴리스 노트"
- id: revintel-strategy
a: FAM-REVOPS
b: FAM-STRATEGY
a-to-b: "Forecast·Lead Score·Pipeline Health"
b-to-a: "시장·비용·사업 가정"
- id: sales-product
a: FAM-GTM-SALES
b: FAM-PRODUCT-MGMT
a-to-b: "고객 요구·딜 장애물·데모 피드백"
b-to-a: "가치 제안·기능 범위·FAQ"
- id: revrisk-sales
a: FAM-LEGAL
b: FAM-GTM-SALES
a-to-b: "가격·계약·컴플라이언스 제약"
b-to-a: "할인·MSA·보안 요구"
# ── 리뷰/수용 게이트(플로우차트 하단) ─────────────────────────────────
acceptance-gates:
- gate: Pre-Implementation Gate
checks: [output-contract, evidence, risk, blocker]
applies-before: BUILD
- gate: GTM Revenue Check
when: revenue/GTM/lead-to-cash 영향
checks: [PLG-PLS-SLG-motion, pipeline, NRR, pricing, compliance, handoff]
- gate: Platform·SRE·Security Check
when: golden-path/SLO/shift-left 영향
checks: [golden-path, SLO, shift-left-security]
- gate: Parent Review / Acceptance
outcomes: [Accepted, Changes-Requested, Blocked, Escalated]
on-accepted: 다음 역할 handoff 또는 ExecutiveDecisionPacket 반영
on-escalated: FAM-CEO
@@ -0,0 +1,45 @@
collaboration-modes:
version: 1
purpose: 발산(아이디어 생성)과 수렴(결정·승인)을 분리해 각각 최적 실행형태로 돌린다.
mode-selection:
declared-at: intake
declared-by: EXEC-CEO
values: [divergent, converge]
default: converge
mode-decision-checklist:
choose-divergent-when: 문제공간이 넓다, 대안·아이디어를 원한다, 브레인스토밍/탐색/역발상이 목적, 아직 결정 아님.
choose-converge-when: 결정/승인/출시가 목적, 옵션이 이미 있다, 책임소재 있는 결론이 필요.
default-if-unclear: converge
modes:
divergent:
goal: 다양한 옵션·아이디어 생성
mechanism: per-lens-parallel-fanout
fanout:
assign: 각 에이전트에 서로 다른 lens와 divergent-framing 부여
source-of-lenses: org-os/00-role-registry/lens-registry.yaml
min-distinct-lenses: from-governance-tiers
contrarian: LENS-CONTRARIAN 포함(티어 규칙에 따름), 옵션 작성 패밀리와 다른 패밀리가 담당
synthesis:
role: 합성 에이전트 1명
must: 옵션 수집·정리, 렌즈별 트레이드오프 노출
must-not: 단일 추천으로 병합하거나 결정하기
barrier: allowed
output:
artifact: option-set
must-lead-with-report-header: true
report-header: [bottom-line, decision-needed, confidence, risks, evidence]
body: 옵션별 lens 트레이드오프
converge:
goal: 책임소재 있는 결정·승인
mechanism: tier-weighted-DRAI
execution: { recommenders: parallel, auditors: parallel-when-heavy, decider: consumes }
output:
artifact: decision-record
must-lead-with-report-header: true
report-header: [bottom-line, decision-needed, confidence, risks, evidence]
body: 선택 옵션 + 인정된 트레이드오프 + dissent 기록
rule: High/Critical 위험은 인간 decider (governance-tiers human-gate 준수)
two-phase:
divergent-then-converge:
when: 사용자가 아이디어 후 결정을 함께 원할 때
execution: pipeline (발산 option-set 을 수렴 입력으로)
@@ -0,0 +1,185 @@
context-package-spec:
version: 1
required-fields:
- workflow-id
- task-id
- mode
- tier
- target-role-agent
- objective
- output-format
- allowed-tools
- task-boundaries
- must-read
- inherited-decisions
- expected-output
- token-budget
# --- P0 신규 필수(WP-5, finding #4): 모든 spawn이 context_package.py로 강제 검증 ---
- workspace # 어느 워크스페이스에서 실행되는가(경로 접지)
- target-repo # 워커가 실제로 손대는 대상 저장소/폴더
- acceptance-tests # 이 task 고유의 수용 기준(범용 아님)
- non-goals # 명시적 비목표(shared-constraints.non-goals의 1급 승격)
- evidence-plan # E4/E5 주장을 무엇으로 뒷받침할지(receipt 계획)
schema:
workflow-id:
task-id:
mode: divergent / converge
tier: light / standard / heavy
# finding #17: tier로 해석된 추론 강도(governance-tiers.model-effort-by-tier SoT). context_package.py가 채운다.
# Orchestrator는 Agent 도구 spawn 시 이 값을 model/effort 인자로 그대로 넘긴다(에이전트 frontmatter model: inherit).
model: haiku / sonnet / opus / fable # tier 파생(light·standard=sonnet, heavy=opus). 사람이 상향 가능.
effort: low / medium / high / xhigh / max # tier 파생(light=low, standard=medium, heavy=high; synthesis-lead=+1)
assigned-lens: # cascade/discovery에서는 필수. role registry가 carry 가능한 LENS-*만 허용.
divergent-framing:
target-role-agent: # = spawn 할 concrete 에이전트 카드 파일명(.claude/agents/<name>.md, 예 arch-solution).
# fam-* family는 metadata이므로 target으로 금지한다. Agent/Task subagent_type과 같아야 한다.
# ⚠ 이것은 리포트의 role-id 와 '다른 축'이다: target-role-agent=에이전트 카드명(소문자),
# report role-id=capability-families 등록 role-id(예 ARCH-SOLUTION). 같은 역할의 두 표기다.
# context_package 는 카드 실존(카드명)을, validate_report 는 등록 role-id(대소문자 무관 매칭,
# P2 fix)를 각각 검사한다. worker 카드는 role_id.lower()==card_name 이라 케이스만 다르며,
collaboration:
collaboration-default: fan-out / collapse (capability-families.yaml에서 파생)
fan-out-roles: [role-id, …] # fan-out 시 격리 subagent로 분리 호출할 멤버 role. 비면 family 전체 통합(collapse).
is-synthesis: true / false # true면 이 에이전트는 하위 보고서를 전부 읽고 종합하는 상위/lead
subreport-paths: [uri, …] # is-synthesis=true일 때 읽어야 할 하위 .report.yaml 경로(원본 재적재)
shared-constraints: # 권고#3 pre-brief: fan-out 워커에 필수. 발산 유지·충돌 결정만 사전 정렬(Cognition)
approved-packet-ref: # 승인된 ExecutiveDecisionPacket 경로(있으면)
scope: # 이번 phase가 다루는 범위
non-goals: # 다루지 않는 것(가정 충돌 방지)
glossary: [ ] # 공통 용어 정의(같은 말을 다르게 쓰지 않게)
report-return-contract:
final-message: report-path + 1줄 bottom-line # fan-out 하위는 최종 메시지로 보고서 경로를 반환
write-report-to: new_report.py로 발급받은 불변 경로 completion-records/<workflow-id>/<role>-<UTCstamp>.report.yaml
immutability: 보고서는 불변 — 덮어쓰기/수정 금지. 재작업도 새 버전 파일로(guard_tools 강제).
design-brief: # 디자인·비주얼 엔게이지먼트(FAM-DESIGN, DOC-VISUAL) 필수 입력. 전체 스키마·근거: design-brief-spec.yaml
ref: org-os/06-agent-work/design-brief-spec.yaml
brief: # 필수·최상단: 무엇을 만드나 / 누가 쓰나 / 이 산출물이 반드시 달성할 것 (2–3문장)
references: [ ] # 구체 3–6개 + 각자 나르는 '구체 신호'("modern/clean/minimal" 형용사 금지)
tokens: [ ] # 각 토큰 {value, intent, boundary} — 값만이 아니라 의도+경계(Don't)
decisions: [ ] # 언제 A vs B (컴포넌트·다이어그램 분할 판단로직)
donts: [ ] # 명시적 anti-pattern 8± (가드레일)
objective:
output-format:
allowed-tools:
allowed-paths: # task별 write/edit 경로. agent 정적 profile보다 더 좁은 실제 경계
task-boundaries: # 이 워커가 다루는/다루지 않는 작업 범위(경계)
# --- P0 신규 필수 5개 (WP-5, finding #4) — context_package.py가 강제 검증 ---
workspace: # 실행 워크스페이스명(_workspace가 해석: ORGOS_WORKSPACE / .orgos-workspace). 산출물/evidence 경로 접지.
target-repo: # 워커가 실제로 손대는 대상 저장소/폴더(org-os/01-company/company-context.yaml projects[].id 또는 절대경로). "무엇을 대상으로 일하는가".
acceptance-tests: # 이 task 고유의 수용 기준/검증 명령(범용 아님). 검증 가능해야 함 — WP-6 evidence-ledger의 E4/E5 대조 대상. [ {criterion, verify} , … ]
non-goals: # 명시적 비목표(가정 충돌 방지). shared-constraints.non-goals의 1급(top-level) 승격 필드 — 값은 여기(top-level)가 canonical이며 collaboration.shared-constraints.non-goals에 중복 기재하지 않는다(둘 다 있으면 top-level 우선). task-boundaries가 '범위'라면 non-goals는 '의도적으로 제외한 것'.
evidence-plan: # E4/E5 주장을 무엇으로 뒷받침할지 선언(receipt 계획, WP-6 C5/C6과 연동). [ {claim, grade, receipt} , … ] — receipt=실행 command(exit 0) 또는 산출 artifact 경로. 계획 없는 고등급 주장은 validator가 차단.
primary-team-topology:
value: stream-aligned / enabling / complicated-subsystem / platform / gtm-revenue
reason:
required-business-lenses:
- customer-value
- business-capability
- value-stream
- product-metric
- cost-or-roi
- operational-feasibility
- revenue-impact
- GTM-motion
- lead-to-cash
required-architecture-layers:
- business-architecture
- data-architecture
- application-architecture
- technology-architecture
- security-architecture
c-level-balance:
product-speed:
technical-stability:
cost-efficiency:
operational-readiness:
product-technology-integration:
revenue-growth:
legal-compliance:
gtm-revenue-context:
GTM-motion: PLG / PLS / SLG / hybrid
ACV-band:
ICP:
funnel-stage:
revenue-metric:
handoff-trigger:
lead-to-cash-impact:
must-read:
- uri:
reason:
optional-read:
- uri:
reason:
forbidden-context:
- raw-chat-log
- unrelated-agent-reports
- outdated-superseded-docs
- secrets
- customer-pii
inherited-decisions:
- decision-id:
summary:
open-assumptions:
- assumption:
owner:
expected-output:
report-header:
bottom-line:
decision-needed:
needed: true / false
approver:
confidence:
value: High / Med / Low
derived-from: evidence
risks: []
evidence: []
# --- P1-D 신규(#9): 보고서와 분리된 1급 실물 산출물. 보고서는 이들의 envelope(경로+검증+리스크). ---
# design/spec/build/completion 유형은 필수 — 실물(RFC/ADR·data-model·threat-model·api-contract·code)을
# 보고서 몇 줄 요약으로 대체하지 말고 실제 파일로 써서 아래에 등재한다. validate_report가 path 실존을 강제.
primary-artifacts:
- path: # 실물 산출물 파일 경로(실존해야 함)
kind: # rfc | adr | data-model | threat-model | api-contract | code | prd | design-doc | verification-record | ...
sha: # (선택) 산출물 해시 — evidence-ledger receipt(C5) artifact_sha256과 교차검증
verification: # 무엇으로 검증했는가(command/test/review). E4/E5 주장은 receipt 필요.
required-reflections:
learning:
simpler-alternative:
ownership-question:
topology-impact:
token-budget:
max-input-tokens:
max-output-tokens:
max-tool-calls:
max-attempts:
max-cumulative-tokens:
rehydration:
max-summary-input:
full-read-triggers: [tier-heavy, critical-claim, dissent-present, confidence-low, reviewer-request, projection-conflict]
rehydration-policy: structured-projection-only / projection-first-expand-on-trigger / full-originals
compression-policy:
summarize-prior-reports: true
include-raw-logs: false
include-only-evidence-links: true
rules:
- Subagent must not read optional documents before must-read documents.
- Subagent must not include forbidden-context in output.
- Parent AI must pass evidence links instead of raw large logs whenever possible.
- Context Package is required before worker execution.
- 모든 spawn은 단일 컴파일러 `.claude/hooks/context_package.py`를 거친다(finding #4). 커맨드는 `--compile`로 패키지를 발급하고, 채운 뒤 `context_package.py <pkg>`로 검증(exit 0)해야 워커를 spawn한다 — cascade(/decide·/ground·/design·/spec·/build)와 /run-wave 공통. objective/boundaries 즉석 추론 금지.
- P0 신규 필수 5개(workspace·target-repo·acceptance-tests·non-goals·evidence-plan)가 비면 컴파일러가 spawn을 막는다(placeholder 미충전 = 미검증).
- Context Package must declare primary-team-topology before execution.
- Context Package must not include all architecture layers by default; include only layers relevant to the task and explain why.
- If product-speed and technical-stability conflict, CTO/CPO or CPTO review is required before implementation.
- If the task touches golden path, SLO, or shift-left security, platform and auditor roles must be considered in role selection.
- If the task touches GTM, revenue, pricing, sales, customer success, partnership, demand generation, or lead-to-cash, gtm-revenue roles must be considered in role selection.
- If outbound sales, enterprise contract, pricing, compliance claim, or customer-facing revenue commitment is involved, Legal/Compliance must be considered before execution.
- family는 candidate pool이다. role_selector가 minimum sufficient concrete role만 선택하고 각 하위는 최종 메시지로 report-path를 반환한다.
- 종합/결정 에이전트는 tier별 rehydration-policy를 따른다(light=projection, standard=projection-first 조건부 원문, heavy=전 원문).
- build family는 collaboration-map.yaml design-to-build-contract의 must-read-designs가 Accepted 되기 전 구현을 시작하지 않는다(설계 없이 코딩 금지).
- 종합 시에도 raw-chat-log/tool-trace/secrets/customer-pii는 여전히 forbidden-context다(.report.yaml만 재적재 허용).
- "모든 보고서는 최상단에 `tags: [주제, 직무계열, …]`를 단다. 비슷한 직무 subagent가 `report_tags.py --tag`로 서로의 결정을 찾을 수 있게 한다."
- fan-out 전, Orchestrator는 (1) 관련 태그의 동료 보고서(`report_tags.py`)와 (2) 작업 전 Slack 인박스(`slack_inbox.py`가 만든 `slack-inbox/<wf>.md`)를 워커 must-read에 넣는다.
- 워커는 작업 결과를 전역 Slack 결과보고 템플릿(~/.claude)으로 `notify_slack.py report`를 통해 보고할 수 있다(승인 채널·outbox 경유).
- 디자인·비주얼 엔게이지먼트(FAM-DESIGN·DOC-VISUAL)는 design-brief 없이 워커 실행 금지. brief(무엇/누구/달성)·references(구체 신호)·donts를 비워 두지 않는다 — 비면 에이전트가 generic한 추론층을 지어낸다(제약>묘사, design-brief-spec.yaml).
- "design/spec/build/completion 유형 산출은 실물 deliverable(RFC/ADR·data-model·threat-model·api-contract·code)을 expected-output.primary-artifacts[]에 실제 파일 경로로 등재한다(#9). 보고서(.report.yaml)는 그 실물의 envelope(경로+검증+리스크)이며 보고서 몇 줄 요약으로 실물을 대체하지 않는다 — validate_report가 primary-artifacts 실존(과 sha receipt)을 강제한다."
- 다이어그램 산출은 D2(아키텍처·의존성·중첩) 또는 Excalidraw(설명·손그림)를 우선하고 Mermaid는 최후 폴백이다(diagram-craft skill).
+100
View File
@@ -0,0 +1,100 @@
# design-brief-spec — 디자인·비주얼 산출물의 "제약층" 계약 (DESIGN.md 패턴 내재화)
#
# 왜 존재하나 (근거 E3, 웹조사):
# 디자인 직무의 working-method는 프레임워크·프로세스 '서술'이다(무엇처럼 보이나).
# LLM은 이 추론층이 비어 있으면 '그럴듯하지만 generic한 값'으로 채운다(fabricates the reasoning layer).
# → 평균적·일반적 산출. 전문가는 값이 아니라 *제약(constraint)·판단로직·구체 레퍼런스*를 준다.
# "잘 고른 8개 규칙이 토큰 2배보다 나쁜 산출을 더 막는다."
# source: https://processtopixels.substack.com/p/writing-a-designmd-file-claude-can
# https://github.com/VoltAgent/awesome-design-md
# https://www.nngroup.com/articles/vague-prototyping/
# https://stensyl.ai/blog/reference-images-ai-style-consistency
#
# 어디에 쓰나: FAM-DESIGN(DES-PROD/PLATFORM/INTERNAL)·DOC-VISUAL 엔게이지먼트의 필수 입력.
# context-package-spec.yaml schema.design-brief가 이 파일을 ref로 가리킨다.
# worker는 design-brief 없이 시작 금지(= "context-package 없이 시작 금지"의 디자인판).
design-brief-spec:
version: 1
# 앵커 순서는 강제다 — brief가 항상 먼저(토큰·미학보다 문제·독자·목표가 앞).
required-anchors: [brief, references, tokens, decisions, donts]
schema:
# P2 S1 — brief-phase 분리: direction 승인 전/후 구분
brief-phase: # pre-direction | system-ready
approved-direction-ref: # system-ready 필수 — 승인 방향 불변 report 경로
approved-direction-sha256: # system-ready 필수 — staleness 대조
# ⓪ (선택·additive) DISCOVERY — 기존 프로젝트/시스템 조사 결과.
# design-system 파이프라인(/design-system)이 스택을 못박기 전에 채운다.
# 그린필드면 생략 가능(required-anchors 아님 → backward compatible).
# 기존 시스템이 있으면 이 블록이 reuse/adapt/create 판단의 근거가 된다.
existing-system:
stack: # 기존 프레임워크/번들러/언어/CSS 방식 (없으면 greenfield)
design-system: # 기존 디자인시스템/컴포넌트 라이브러리/테마 (경로·이름)
tokens-source: # 기존 토큰 SoT 위치 (있으면 재사용 대상 — 새로 만들지 말 것)
components: # 재사용 가능한 기존 컴포넌트 인벤토리
brand: # 기존 브랜드 색·타이포·로고 제약
data-density: # 데이터 밀도(dashboard/table-heavy vs marketing/low) — 토큰·레이아웃에 직결
# 스택/시스템 판단 — 조사 후 무엇을 할지. 스택은 고정값이 아니라 preset(선택)다.
stack-decision:
choice: # reuse | adapt | create (기존 시스템 있으면 create보다 reuse/adapt 우선)
preset: # create일 때만: greenfield-react | <해당 스택 관례>
rationale: # 왜 이 판단인지 (기존 시스템 적합성 근거)
# ① 제품/산출물 브리프 — 필수·최상단. 미학 이전에 문제·독자·목표를 언어화.
brief:
what: 무엇을 만드나 (한 문장)
who: 누가 쓰나 (독자·사용 맥락)
must-accomplish: 이 산출물이 반드시 달성해야 하는 것 (성공 조건)
# ② 레퍼런스 — 형용사가 아니라 구체 신호. 독창성은 여기서 나온다.
# 규칙: 3–6개 집중(20개 산만보다 6개 집중이 낫다). 각 레퍼런스는 '나르는 신호'를 명명.
# 금지: "modern/clean/minimal/sleek" 같은 인터넷-평균 형용사(= generic 유발).
references:
- name: # 구체 대상(예: "Linear", "Stripe docs", "C4 container 다이어그램")
signal: # 그것이 나르는 *구체* 신호(예: "13px base·4px grid·단일 accent color")
why-relevant: # 이 산출물에 왜 이 신호를 빌리나
references-rules:
- 3–6개로 제한. 스타일이 잡히면 더 넣어도 drift만 는다.
- 형용사가 아니라 신호(텍스처·밀도·간격·색 규율·표기)를 명명한다.
- 하나의 순수 레퍼런스가 열 개의 모호한 무드보드보다 낫다(모델은 혼합 신호를 평균낸다).
# ③ 토큰 — 값+의도+경계. 경계(Don't)가 빠지면 일관성이 무너진다.
# UI: 색·타이포·간격. 다이어그램: notation 토큰(shape=무엇, arrow=무엇, color=예약).
tokens:
- name: # 예: primary / body-scale / gap / node-shape / edge-color
value: # 예: #1B4DFF / 13px·1.5 / 8px grid / rounded-rect / gray
intent: # 언제·왜 쓰나 (예: "CTA·active state 표시")
boundary: # 절대 하지 않는 것 (예: "배경/장식 금지, 화면당 1회")
# ④ 판단로직 — 언제 A vs B. 컴포넌트/다이어그램 분할의 결정 규칙.
decisions:
- question: # 예: "card vs list row?" / "한 그림 vs 분할?"
rule: # 결정 규칙 (예: "3필드 초과·독립 액션 있으면 card, 아니면 list")
# ⑤ Don'ts — 명시적 anti-pattern 8±. 가드레일이 토큰보다 나쁜 산출을 더 막는다.
donts:
- 'gradient 금지 · status color는 의미 전용(장식 금지) · one diagram one message 위반 금지 (예시)'
# 다이어그램 전용 확장 (DOC-VISUAL) — diagram-craft skill과 짝.
diagram-extension:
abstraction-first: 도구보다 추상화 계층(C4 레벨)·독자·전달 메시지를 먼저 정한다.
c4-level: L1 System Context / L2 Container(가장 범용) / L3 Component(복잡할 때만) / L4 Code(자동생성)
engine-priority:
- d2: 소프트웨어 아키텍처·의존성·중첩 컨테이너 (1급, 레이아웃엔진 dagre/elk·테마·CI 친화)
- excalidraw: 설명·손그림·워크숍 발산 (.excalidraw, roughness·auto-layout)
- mermaid: 최후 폴백만 (경량·플랫폼 네이티브지만 실무급 아님)
notation-discipline: 그림마다 스코프 한 줄 제목 + 범례 + 일관된 방향 + 예약색. 한 그림에 한 메시지.
exhibit-schema-in-renderer: "{type: d2, code, layout?: dagre|elk, theme?: int, sketch?: bool, pad?: int}"
rules:
- 'discovery-first(design-system 엔게이지먼트): existing-system을 조사해 stack-decision(reuse/adapt/create)을 정한 뒤 스택을 고른다. 기존 시스템이 있으면 스택 강제(create) 금지 — reuse/adapt 우선. existing-system/stack-decision은 additive(그린필드면 생략 가능, required-anchors 아님).'
- brief가 references·tokens보다 항상 먼저다(문제·독자·목표 우선).
- references는 형용사가 아니라 구체 신호로 3–6개. generic 형용사 금지.
- 모든 token은 value뿐 아니라 intent+boundary를 갖는다(경계 없는 토큰 금지).
- donts는 최소 5개 이상 명시(빈 가드레일 금지 — 침묵을 모델이 generic으로 채운다).
- 다이어그램은 abstraction-first(레벨·독자·메시지) → 엔진(D2 우선) 순. Mermaid는 폴백.
- design-brief는 completion-record가 아니다(불변 아님, 엔게이지먼트 입력 아티팩트). 산출물 보고서는 별도 .report.yaml.
- 'design-system-brief 는 brief-phase=system-ready 이며 approved-direction-ref/sha256 를 인용한다(P2). reference-cluster·색·typography·token 은 승인 방향에서 확정하고 발명하지 않는다. pre-direction(direction-input-brief)에는 확정 시각 항목 금지(발산 전 고착 방지).'
@@ -0,0 +1,125 @@
# design-direction-spec — design-direction child plan 의 9 아티팩트 계약(정본).
# 정본 = 이 YAML + lint_design_direction.py(hand-coded). 별도 JSON Schema 파일 없음.
# spec: docs/superpowers/specs/2026-07-13-p2-design-direction-design.md (rev2: 7 아티팩트·finalize·exact 바인딩)
design-direction-spec:
version: 3
purpose: "제품 cascade 종속 child plan 의 아티팩트 계약. brief 를 발산 이전/승인 이후로 분리(S1)."
artifacts:
# ① 발산 이전 입력 — 부모 /design 이 완성·불변화, child init 에서 hash 바인딩. child 는 수정 금지.
direction-input-brief:
required: [product-goal, core-users, core-tasks, information-density,
required-accessibility, brand-constraints, avoid-cliches,
representative-screen-requirement, tech-platform-constraints]
prohibited: [reference-cluster, color-palette, typography, layout-grammar, tokens, visual-metaphor]
note: "prohibited 항목은 승인 이후 design-system-brief 가 approved-direction 으로부터 확정."
conditional-required:
when: "parent workload가 public-website 또는 new-product|major-redesign"
fields: [competitive-experience-benchmark-ref, competitive-experience-benchmark-sha256,
experience-blueprint-ref, experience-blueprint-sha256,
wireframe-set-ref, wireframe-set-sha256]
enforcement: "state_engine.init_ledger가 부모 experience-foundation approval exact refs와 대조"
# ② discovery 산출 — 불변 brief 를 분석(수정 아님).
direction-discovery:
required: [direction-input-brief-sha256, findings, constraints-restated, opportunity-notes]
# ③ 발산 전 계약 — 완성 direction-set 과 분리한다. 각 워커가 답할 질문과
# 조형 영역을 먼저 직교 분할하여 "같은 카드 셸의 색상 변주"를 차단한다.
divergence-charter:
required: [direction-cycle-id, representative-screen, directions, pairwise-separation]
direction-required: [id, design-question, layout-topology, navigation-model,
typography-voice, imagery-strategy, motion-model,
dominant-primitives, exclusive-primitives, forbidden-primitives]
rules:
- "정확히 3개 방향, id 중복 금지"
- "모든 방향 쌍은 layout/navigation/type/imagery/motion/primitives 중 최소 4축이 다르다"
- "exclusive-primitives 는 방향 간 겹치지 않는다"
- "한 방향이 centered-card/progress-rail/pill-cta 조합을 쓰면 다른 방향은 이를 금지한다"
# ④ divergence 산출 — 3안 독립 생산 + 실제 비교 렌더.
direction-set:
required: [direction-cycle-id, divergence-charter-ref, divergence-charter-sha256,
representative-screen, directions, comparison-preview]
representative-screen: {required: [id, kind, description], kind-enum: [first-entry, core-task, signature-moment]}
comparison-preview:
required: [receipt-ref, receipt-sha256, gallery-path, representative-screen-id]
experience-foundation-binding:
when: "parent workload가 foundation을 요구"
required: [experience-blueprint-ref, experience-blueprint-sha256,
wireframe-set-ref, wireframe-set-sha256]
per-direction-required: [content-contract-sha256]
rule: "세 방향의 content-contract-sha256은 동일한 accepted wireframe-set SHA여야 한다."
direction-required: [id, producer-role-id, producer-run-id, context-package-id,
concept-artifact, reference-cluster, visual-thesis, layout-grammar,
interaction-grammar, typography-token-direction, primitive-inventory,
reference-board-ref, reference-board-sha256,
full-size-preview-ref, full-size-preview-sha256,
coded-slice, coded-slice-sha256]
reference-cluster-rules:
- "3~6개로 집중한다(20개 산만보다 6개 집중)"
- "각 항목은 name, signal, why-relevant 를 가진다"
- "형용사(modern/clean/minimal/sleek)만으로 설명하지 않는다"
- "방향 쌍 사이 reference name 중복은 최대 1개"
# ⑤ 선택 전 비교 감사 — 이 렌즈만 sibling isolation 을 적용하지 않는다.
comparative-divergence-audit:
required: [direction-cycle-id, divergence-charter-ref, divergence-charter-sha256,
direction-set-ref, direction-set-sha256, reviewer-role-id, reviewer-run-id,
verdict, pairwise-comparisons, full-size-previews, blocking-findings]
verdict-enum: [pass, revise, re-diverge]
benchmark-relative-required-when-foundation:
fields: [competitive-experience-benchmark-ref,
competitive-experience-benchmark-sha256, benchmark-relative-findings]
min-findings: 3
rules:
- "pass 는 모든 방향 쌍 비교와 full-size preview hash 검증이 완료된 경우만 가능"
- "각 방향 쌍은 최소 4개 조형 축에서 달라야 한다"
- "primitive collision 또는 blocking finding 이 하나라도 있으면 pass 금지"
- "색을 제거해도 layout/type/imagery/interaction 구조로 식별 가능해야 한다"
# ⑥ decision 산출 — 1안 선택(승인 아님). 평균금지(S5). direction-set 에 바인딩.
selected-direction:
required: [direction-cycle-id, direction-set-ref, direction-set-sha256, selection-decision,
rejected-directions, parent-workflow-id, product-decision-id,
direction-input-brief-sha256, selection-acceptance-receipt]
optional: [flexible-elements, adopted-elements]
rules:
- "selection-decision은 selected 또는 none-of-the-above. selected이면 selected-direction-id 정확히 1개이고 direction-set에 실존"
- "selected이면 locked-invariants >= 3"
- "none-of-the-above이면 세 안을 모두 사유와 함께 reject하고 locked/adopted 요소 없이 discovery로 되돌린다"
- "rejected-directions 가 모든 비선택 방향을 정확히 덮는다(유령/누락 금지), 각 reason 필수"
- "locked-invariants >= 3"
- "secondary-influence-id 필드 금지(평균의 뒷문)"
- "adopted-elements <= 1, from-direction-id 실존, element-id+rationale 필수, 포괄표현 금지, locked-invariant 침범 금지"
# ⑦ prototype 산출 — 승자 핵심흐름 + 실제 preview receipt. revision 추적.
winner-prototype:
required: [direction-cycle-id, selected-direction-ref, selected-direction-sha256,
prototype-path, prototype-sha256, preview-receipt-ref, preview-receipt-sha256, revision]
# ⑧ critique 산출 — 다관점 패널(S3). producer != reviewer.
design-review-panel:
required: [direction-cycle-id, target-prototype, preview-receipt, reviews, synthesis]
review-required: [reviewer-role-id, reviewer-run-id, lens, verdict, report-ref, report-sha256]
required-lenses: [product-fit, usability, distinctiveness, visual-craft,
systematizability, market-memorability, implementability]
synthesis: {required: [role-id, verdict, unresolved-dissent], verdict-enum: [pass, minor-revision, concept-flaw]}
veto-rules:
- "모든 개별 lens verdict 가 pass 여야 synthesis pass 가능"
- "distinctiveness 또는 visual-craft 비통과는 synthesis 가 덮을 수 없다"
- "blocking/critical finding 또는 unresolved-dissent 가 있으면 pass 금지"
# ⑨ terminal 불변 report — 전부를 hash 로 묶음(S2). completion-records 경로.
approved-direction:
required: [child-workflow-id, direction-cycle-id, selected-direction-ref, selected-direction-sha256,
winner-prototype-ref, winner-prototype-sha256, critique-report-refs, critique-pass-receipt,
preview-receipt-ref, locked-invariants, approved-at,
parent-workflow-id, product-decision-id, direction-input-brief-sha256]
path: "<ws>/completion-records/<child-workflow-id>/approved-direction-<ts>.report.yaml"
parent-ledger-ref: {key: design-direction-approval, fields: [report-ref, report-sha256, child-workflow-id]}
cross-references:
- "design-brief-spec.yaml (design-system-brief = brief-phase: system-ready)"
- "state-transition-rules.yaml / execution-plans.yaml (design-direction plan)"
- "collaboration-map.yaml (direction-gate)"
+80
View File
@@ -0,0 +1,80 @@
execution-plans:
version: 1
purpose: >
호환/문서용 plan mirror다. 런타임 stage 순서·actor·output·exit gate의 단일 정본은
workflow-contracts.yaml이며 state_engine.py가 그 계약을 직접 읽는다.
source-of-graph: org-os/06-agent-work/workflow-contracts.yaml
cross-references:
- "workflow-contracts.yaml (stage·artifact·전이 정본)"
- "governance-tiers.yaml (tier 파생·evidence-grade-min·human-gate·governance-limits)"
- "collaboration-map.yaml (design-to-build-contract must-read-designs — spec→build 게이트)"
plans:
cascade:
description: >
결정 → 설계 → 세부 → 구현 → 검증 → 수용 → 릴리스 전체 계층 순차(collaboration-map DECIDE..BUILD).
머리 쓰는 일(discovery/decide/design/spec)은 fan-out, 구현(build)은 collapse.
stages: [intake, discovery, decide, design, spec, build, verification, acceptance, released]
terminal-stage: released
default-tier: standard
note: >
순서 교정(리뷰 권고): discovery(근거 접지 + option-set 발산) 가 decide(수렴) 앞에 온다.
anchoring 제거 — 결정 전에 근거·선택지를 먼저 발산한다.
wave:
description: >
Orchestrator 가 wave 로 계획·실행하는 Magentic 듀얼 원장 루프. plan=계획, run=실행 라운드(반복).
run 은 정체(stall)/상한(governance-limits) 전까지 자기 자신으로 반복 전이한다.
stages: [intake, plan, run, verification, acceptance, released]
loop-stage: run
terminal-stage: released
default-tier: standard
light:
description: >
경량 경로 — plan-wave 없이 바로 run. 저위험(two-way-door · single-role · 고객/매출/보안 영향 없음).
stages: [intake, run, verification, acceptance]
loop-stage: run
terminal-stage: acceptance
default-tier: light
venture-bootstrap:
description: >
회사 수립(1회성). founder-context 를 입력으로 기회탐색→벤처검증→벤처결정→
company-context commit 을 거쳐 company-context.yaml(provisional) 을 산출한다.
제품 cascade 의 선행이며 별도 lifecycle 이다. 모든 전이는 OPS-ORCH 가 집행.
stages: [intake, founder-setup, opportunity-discovery, venture-validation,
venture-decision, company-context-commit, bootstrap-complete]
terminal-stage: bootstrap-complete
default-tier: standard
outputs: "org-os/01-company/company-context.yaml (status: provisional)"
experience-foundation:
description: >
제품 cascade 종속 child. 실제 경쟁 경험 증거를 접지한 뒤 experience strategy를 결정하고,
content/IA blueprint와 무채색 wireframe을 승인한다. 시각 방향 탐색보다 반드시 먼저 끝난다.
stages: [experience-foundation-intake, experience-benchmark, experience-strategy,
information-architecture, wireframes, foundation-approved]
terminal-stage: foundation-approved
default-tier: standard
parent-binding: [parent-workflow-id, product-decision-id]
outputs: "accepted competitive benchmark + CPO strategy + CTO/CPTO technical feasibility + COO operational feasibility + blueprint + wireframes + 부모 experience-foundation-approval 링크"
design-direction:
description: >
제품 cascade 종속 child. direction-input-brief(불변)을 입력으로 discovery+divergence-charter→
3안 독립발산+선택전 비교감사→단일수렴→승자 prototype→7-lens 비평 재작업 루프→
finalize→approved. /design-system·design→spec 선행.
stages: [design-direction-intake, design-direction-discovery, design-direction-divergence,
design-direction-decision, design-direction-prototype, design-direction-critique,
design-direction-finalize, design-direction-approved]
terminal-stage: design-direction-approved
default-tier: standard
parent-binding: [parent-workflow-id, product-decision-id, direction-input-brief-sha256]
outputs: "approved-direction 불변 report(completion-records/<child>/) + 부모 원장 design-direction-approval"
mid-start:
rule: >
선행 stage 의 gating 산출물(예: 승인된 설계, 수락된 decision-packet)이 이미 존재하면
그 stage 로 바로 진입할 수 있다(전체를 다시 밟지 않음).
verified-by: state_engine.can_transition # 선행조건 미충족이면 거부(BlockedReport)
example: "설계가 이미 Accepted 면 /spec 부터 시작(engine 이 design-accepted 확인)."
wave-internal-stages:
note: plan/run 은 wave/light 실행 전용 내부 stage 이며 cascade 의 내용 stage 와 구분된다.
stages: [plan, run]
@@ -0,0 +1,93 @@
execution-policy:
version: 1
purpose: wave를 배리어가 아닌 파이프라인으로 실행하고, 감사를 병렬화하며, 재적재 비용을 통제한다.
pipeline-default: true
barrier-allowed-only-when:
- divergent-synthesis
- dedup-across-all-findings
- early-exit-on-zero
- cross-item-comparison-required
wave:
max-concurrent-role-agents: 5
semantics: concurrency-cap-not-barrier
note: scorecard의 wave-size 5는 동시성 상한이며 wave 완료를 기다리는 배리어가 아니다.
parallel-audit-fanout:
applies-to-tier: heavy
min-independent-verifiers: 3
verifier-prompt-stance: refute
verifier-lens-diversity: required
kill-on: majority-refute
on-kill: set-state-Blocked
verifier-independence:
rule: 검증자 패밀리는 자기 패밀리가 작성한 산출물을 검증할 수 없다
source: roles.yaml independent-audit-policy 이해상충 규칙과 정합
re-hydration-control:
pass-forward: structured-summary-and-evidence-links-only
forbid: raw-logs
enforce: org-os/06-agent-work/context-package-spec.yaml compression-policy
exception: synthesis-rehydration (아래 tier별 projection-first 정책에 따라 필요한 원문만 확장한다)
fan-out-collapse-policy:
source-of-default: org-os/00-role-registry/capability-families.yaml (collaboration-default)
fan-out:
when: family.collaboration-default == fan-out (판단·설계·분석·수익 계열)
driven-by: Orchestrator (메인 세션 — Agent/Task 도구 보유). subagent는 subagent를 못 부르므로 fan-out은 Orchestrator가 구동한다.
agent-artifacts: concrete role마다 개별 subagent 정의 존재(.claude/agents/<role-id>.md). family router/resolver card는 생성하지 않는다.
mechanism: >
Orchestrator가 fan-out family의 멤버 role 에이전트를 각각 격리 subagent로(병렬) 호출한다. 각 워커는 자기 관점·근거만 가진
깨끗한 context에서 시작해(context 오염 방지) 자기 .report.yaml을 쓰고, 최종 메시지로 그 경로 + 1줄 bottom-line을 반환한다.
member-split-condition: role_selector가 required coverage를 만족하는 최소 멤버만 선택한다. family members는 candidate pool이지 spawn list가 아니다.
report-return-contract: 워커 subagent 최종 메시지 = report-path + 1줄 bottom-line (Orchestrator가 경로로 원본을 Read)
synthesis:
who: Orchestrator 또는 지정된 상위 직무자(C-Level/CEO) — 워커가 아니다
must: 워커 보고서들을 전부 읽고(synthesis-rehydration) 합의·충돌을 보존해 종합/최종결정 문서를 남긴다
must-not: 워커가 스스로 종합하는 것 / 요약으로 축소하거나 dissent를 삭제하는 것
collapse:
when: family.collaboration-default == collapse (코드·실행 산출 계열)
mechanism: 멤버 role을 1 에이전트(=그 family)로 통합해 단일 보고서. 효율 우선(family-collapse와 동일).
overrides:
- if: tier == heavy
then: collapse family도 적대적 검증(parallel-audit-fanout)을 위해 fan-out 허용
- if: mode == converge and tier == light
then: fan-out family도 멤버 분리 생략하고 단일 종합만 허용(경량 경로)
- if: context-package.fan-out-roles 존재
then: 명시된 role만 분리 호출
synthesis-rehydration:
rule: projection-first. light는 structured projection만, standard는 projection 우선 후 충돌·저신뢰·dissent만 원문 확장, heavy는 전 원문을 읽는다.
rationale: decision-summary/evidence-index/dissent/open-risks/artifact-refs로 provenance를 유지하고 불필요한 full read를 제한한다.
full-read-triggers: [tier-heavy, critical-claim, dissent-present, confidence-low, reviewer-request, projection-conflict]
still-forbidden: [raw-chat-log, tool-trace, secrets, customer-pii]
note: .report.yaml은 구조화 산출물이라 forbid raw-logs에 해당하지 않는다. 금지 대상은 원시 로그/툴 트레이스/비밀/PII다.
# fan-out의 비용(토큰)과 품질(발산 충돌·관점 유실)을 통제하는 5개 컨트롤.
# 출처: docs/superpowers/harness-efficiency-audit-2026-07-07.md (유사 하네스 웹조사 5 권고)
fan-out-cost-and-quality-controls:
"1-token-budget":
rule: fan-out 누적 토큰이 tier per-wave 예산 초과 시 collapse(단일 종합)로 강등하거나 tier 상향(사람 승인).
budget: agent-operating-kpi.yaml token-budgets.per-wave
enforce: ".claude/hooks/token_ledger.py (log/check/dashboard) + run-wave Orchestrator"
grounding: "Anthropic — 멀티에이전트 ~15배 토큰, 토큰량이 성능분산 80% 설명"
"2-lens-cap":
rule: light/standard tier는 같은 lens에 워커 1명(primary carrier)만. 같은 렌즈 sub-angle 분화는 heavy에서만.
source-of-truth: lens-registry.yaml shared-lens-selection
enforce: ".claude/hooks/lens_cap.py (check) + role-selection-scorecard"
grounding: "Anthropic — 단순 질의에 subagent 50개 spawn 낭비"
"3-shared-constraint-pre-brief":
rule: 한 phase 병렬 fan-out 시 각 워커 context-package에 승인 Packet + shared-constraints(scope/non-goals/glossary)를 동봉.
why: 발산 다양성은 유지하되 '충돌하는 결정'만 사전 정렬(Cognition Flappy Bird)
enforce: "Orchestrator 계약 — context-package.shared-constraints 필수(fan-out 시)"
"4-dissent-preservation":
rule: 종합 보고서(linked-reports/synthesized-by/members)는 conflicts|dissent 필드 + linked-reports 필수(요약으로 관점 유실 차단).
enforce: ".claude/hooks/validate_report.py (강제, exit 2)"
grounding: "스펙 must-not(dissent 삭제 금지) + Anthropic 종합 실패원"
"5-compaction":
rule: fan-out 워커 원시 트레이스가 context 초과 시에만 핵심 결정으로 compaction. 결정/종합 지점의 synthesis-rehydration(.report.yaml 전문)은 압축 대상에서 제외.
still-forbidden: raw-log는 여전히 배제(re-hydration-control)
grounding: "12-factor Factor3 own-your-context·dumb-zone 40~60%; Cognition/Anthropic context 초과 최난제"
family-collapse:
rule: 실행 직전, DRAI/scorecard가 참조하는 role 집합에서 같은 family의 복수 role은 1 에이전트(=그 family)로 collapse한다.
preserve: 서로 다른 family는 유지한다(다른 렌즈 보존). collapse는 같은 렌즈의 중복만 제거한다.
routing-unit: capability-family
handoff-context-policy:
converge: 선행 결정 트레이스(inherited-decisions + 관련 근거)를 전달한다. 요약만으로 축소하지 않는다(Cognition).
divergent: 병렬 유지. 각 lens 에이전트는 독립적으로 시작한다.
note: 발산은 관점 충돌이 목적이라 병렬 격리가 맞고, 수렴은 결정 충돌을 피하려면 트레이스를 더 공유해야 한다.
@@ -0,0 +1,37 @@
first-draft-experiment-spec:
version: 1
purpose: "동일 모델·동일 요청의 수정 전 첫 결과를 current harness(A)와 experience-foundation treatment(B)로 비교한다."
control-invariants:
same-model: true
same-request-sha256: true
first-result-only: true
generation-attempts-per-arm: 1
revision-count-at-capture: 0
evaluator-blinded: true
arms:
A:
treatment: current-harness
forbidden-input-kinds: [competitive-experience-benchmark, experience-blueprint, wireframe-set, design-md, component-registry]
B:
treatment: experience-foundation
required-input-kinds: [competitive-experience-benchmark, experience-blueprint, wireframe-set, design-md, component-registry]
generation-scope: representative-section-or-core-screen
metrics:
score-1-to-5:
- product-purpose-understood-in-5s
- primary-action-found
- information-hierarchy
- category-quality-parity
- visual-craft
- mobile-clarity
- design-system-consistency
- human-preference
lower-is-better:
- revision-count-to-acceptance
- tokens-to-acceptance
decision-rule:
treatment-supported-when:
- "B human-preference > A"
- "B quality-score mean > A"
- "B revision-count-to-acceptance < A 또는 B tokens-to-acceptance < A"
no-claim-before-completed: true
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,94 @@
governance-tiers:
version: 1
purpose: 위험도에 비례해 협업 의식의 무게를 조절한다. HEAVY는 기존 DRAI 동작과 동일.
backward-compatibility: >
TIER-HEAVY == 기존 drai-matrix + state-transition Approved 조건. 기존 High/Critical 경로는 자동으로 HEAVY.
derivation:
inputs:
risk-level: [Low, Med, High, Critical]
reversibility: [two-way-door, one-way-door]
blast-radius: [single-role, cross-team, production-customer-revenue]
rule:
base: { Low: light, Med: standard, High: heavy, Critical: heavy }
modifiers:
- { if: reversibility-is-one-way-door, effect: bump-up-one-level }
- { if: blast-radius-is-cross-team, effect: bump-up-one-level }
hard-floor:
- { if: blast-radius-is-production-customer-revenue, effect: min-tier-heavy }
cap: heavy
no-auto-downgrade-below: base
human-can-escalate-up: true
examples:
- { risk: Low, reversibility: one-way-door, blast: single-role, result: standard }
- { risk: Med, reversibility: one-way-door, blast: cross-team, result: heavy }
- { risk: Low, reversibility: two-way-door, blast: single-role, result: light }
tiers:
light:
converge:
deciders: [owner-role-agent]
reviewers: 1
auditors: 0
auditor-added-when: [security, legal, privacy]
evidence-grade-min: E2
human: not-required
divergent: { min-distinct-lenses: 3, contrarian-required: false, synthesis: 1 }
wave-execution: pipeline
standard:
converge:
deciders: [decider-role-agent]
recommenders: parallel
auditors: 1
evidence-grade-min: E3
human: informed-non-blocking
divergent: { min-distinct-lenses: 5, contrarian-required: true, synthesis: 1 }
wave-execution: pipeline
heavy:
converge:
drai: full-per-drai-matrix
audit-fanout: { min-independent-verifiers: 3, kill-on: majority-refute }
evidence-grade-min: E3
unresolved-critical-risks: false
human-gate:
human-decider-when: [risk-High-or-Critical, blast-production-customer-revenue]
else: { decider: EXEC-CEO, human: informed-non-blocking }
divergent: { min-distinct-lenses: all-relevant, contrarian-required: true, synthesis: tradeoff-matrix }
wave-execution: pipeline-with-barrier-at-synthesis
# finding #17: tier에 비례해 **추론 강도(model·effort)**도 올린다 — heavy 작업이 에이전트 수만 늘고
# 추론 품질은 그대로이던 문제를 고친다. 이 값은 SSOT다. context_package.py 가 선언된 tier로 이걸
# 해석해 spawn 계약(context-package.model / .effort)에 실어보내고, Orchestrator 는 Agent 도구의
# model/effort 인자로 그대로 넘긴다. 에이전트 frontmatter는 `model: inherit`(= spawn이 고른 model 사용).
# model 값은 Agent 도구 alias(haiku|sonnet|opus|fable), effort 는 low|medium|high|xhigh|max.
model-effort-by-tier:
light: { model: sonnet, effort: low } # 저위험·저비용 경로
standard: { model: sonnet, effort: medium } # 기본
heavy: { model: opus, effort: high } # 고위험 — 가장 강한 추론(모델+effort 동시 상향)
synthesis-lead-bump: # 종합 리드(consult-em·doc-lead 등)는 한 단계 위 effort로(교차 종합은 어렵다)
effort: high
note: >
값은 기본값이며 사람이 상향(escalate)할 수 있다. tier 는 governance-tiers.derivation 으로 결정된다.
light 라도 blast-production-customer-revenue면 hard-floor로 heavy가 되어 opus/high가 된다.
tier-declaration:
owner: OPS-ORCH
proposed-by: EXEC-CEO-at-intake
independent-tier-check-required-when: blast touches production, customer, or revenue
checked-by: an audit-capable family not authoring the work
risk-classification-rubric:
risk-level:
Low: 되돌리기 쉽고 단일 도메인, 고객/매출/보안 영향 없음.
Med: 교차 도메인 또는 일부 비가역, 제한적 영향.
High: 프로덕션/고객/매출/보안/법무에 실질 영향 또는 큰 비가역.
Critical: 대규모 비가역 손해, 데이터/보안/법적 중대.
blast-radius:
single-role: 한 family 산출물 내부에 국한.
cross-team: 둘 이상 family/스트림에 영향.
production-customer-revenue: 배포·고객관찰가능·매출·PII 접촉.
governance-limits:
max-rounds: 12
max-stalls: 3
max-resets: 2
on-breach: escalate-to-OPS-ORCH-then-CEO, replan or human-review
note: 무한 리뷰 루프·폭주 방지(Magentic/MacNet). 라운드 진전 없음이 max-stalls 초과 시 자동 escalate.
plan-signoff:
required-when: tier == heavy
approver: HUMAN-001 (또는 human-gate가 위임하면 EXEC-CEO)
rule: AI는 제안까지(RACI Consulted), 최종 승인권은 사람. 승인 전 heavy 실행 불가.
+395
View File
@@ -0,0 +1,395 @@
report-templates:
version: 1
provenance: "직무별 보고서 템플릿 및 소통 체계.md (추출 후 원문 삭제 예정)"
purpose: 75개 concrete AI 역할이 작업 후 상급자에게 올리는 표준 보고서 템플릿을 기계가 읽을 스키마로 흡수한다.
cross-references:
- "org-os/06-agent-work/collaboration-modes.yaml (report-header BLUF)"
- "org-os/06-agent-work/context-package-spec.yaml (expected-output.report-header)"
- "org-os/00-role-registry/drai-matrix.yaml (문서유형별 Decider/Recommender/Auditor/Informed)"
# 2단 보고: YAML(에이전트끼리, SoT) → render_report.py → MD(대표용, 가독성)
human-md-rendering:
principle: 에이전트는 .report.yaml만 쓴다(SoT, hook 검증). 대표용 MD는 render_report.py가 결정적으로 생성한다(손으로 안 씀 → drift 없음).
renderer: .claude/hooks/render_report.py
output: 같은 basename .md + reports/INDEX.md(목차 자동)
md-sections: [결론(BLUF 콜아웃), 결정 필요, 확신도, 결정 질문, 권고안, "역할별 핵심 결론(요약 표)", "역할별 상세(관점 원문 embed — findings/설계/지표/다음액션)", 합의/충돌, 리스크, 근거 표, 원본 YAML 링크]
self-contained: true # 사람이 MD 하나만 읽으면 되도록 본문 상세를 embed(링크로 떠넘기지 않음)
type-map: # render_report.py --type
decision: ExecutiveDecisionPacket / DecisionBrief
completion: CompletionRecord
work: AIWorkReport
review: ReleaseAcceptance / LearningReview
blocked: BlockedReport
design: "RFC/ADR / overall-design"
# finding #13: render_report.py 는 이 배지를 **읽어서** MD 제목 아이콘/라벨을 정한다
# (예전엔 코드에 TYPE_BADGE 하드코딩 → SSOT 미소비). 이 YAML을 고치면 렌더 결과가 바뀐다.
# 파일 부재/파싱 실패 시 render_report 내장 기본값으로 폴백(하드페일 없음).
render-badges: # render_report.py --type <T> -> [emoji, label]
decision: ["🟢", "결정"]
work: ["📝", "작업"]
completion: ["✅", "완료"]
review: ["🔍", "리뷰"]
blocked: ["🚨", "블로커"]
design: ["📐", "설계"]
spec: ["📋", "명세"]
fan-out-aggregation: render_report.py <synthesis.report.yaml> --members <role1.report.yaml> <role2.report.yaml> … → "역할별 핵심 결론" 표로 집계
# Slack 결과보고 규약(기본). ~/.claude 템플릿 3(agent-report)을 사용.
slack-reporting:
template: "~/.claude/CLAUDE.md 템플릿 3 — agent-report(BLUF·SBAR·STAR·DACI 합성)"
thread-convention: >
fan-out wave는 부모=종합 결정 1건 + 각 워커의 개별 agent-report를 그 부모의 스레드 답글로 붙인다
(slack_reply_to_thread). 누가 무엇을 판단했는지 다 보이되 채널 스팸은 없다. collapse wave는 부모 1건만.
scope: blocker/human-review/critical/digest는 자동(notify_slack), fan-out 결과는 스레드 단위로.
tools: ".claude/hooks/notify_slack.py report + mcp__slack__slack_reply_to_thread"
# 정책: 모든 보고서는 answer-first(BLUF). report-header가 항상 문서 최상단.
# 원문이 과정-우선 순서로 서술한 템플릿은 answer-first 순서로 재배열해 반영했다.
answer-first-policy:
rule: 모든 상위 보고서는 결론을 맨 앞에 둔다. report-header(BLUF)를 최상단에 배치하고 그 뒤에 근거·과정을 둔다.
enforced-by: "must-lead-with: report-header (각 템플릿 필드) + ceo-intake Stop hook 검증"
rationale: 상급자와 사용자가 30초 안에 결론·권고·결정 필요 여부를 판단할 수 있어야 한다.
# 모든 보고서 최상단 필수 헤더(BLUF). context-package-spec expected-output.report-header와 정합.
common-report-header:
- bottom-line
- "decision-needed(needed, approver)"
- "confidence(value, derived-from)"
- risks
- evidence
structured-projection:
version: 1
purpose: bounded synthesis와 tiered rehydration을 위한 표준 읽기 표면
required-fields: [decision-summary, evidence-index, dissent, open-risks, artifact-refs]
expansion-policy:
light: projection-only
standard: projection-first; full report only on conflict, dissent, low-confidence, critical-claim, reviewer-request
heavy: full-report
report-header-schema:
bottom-line: 한 문장 결론 또는 권고
decision-needed:
needed: "true / false"
approver: 사람(HUMAN-001) 또는 EXEC-CEO 등 결정권 역할
confidence:
value: "High / Med / Low"
derived-from: evidence
risks: []
evidence:
- source-uri: 실존 파일 경로 또는 근거 URI
grade: "E0 / E1 / E2 / E3 / E4 / E5"
report-header-rules:
- report-header 없이 보고서를 종료하지 않는다.
- evidence 없는 confidence High 는 금지한다.
- confidence Low 보고서는 단독 승인·실행하지 않는다.
- "decision-needed.needed=true 이면 approver 를 반드시 명시한다."
method-execution-contract:
applies-to: active Contract v2 role의 standard/heavy 산출물
current-checkpoint-rule: >
지금 제출하는 required-output step은 artifact-refs로 자기 SHA를 적지 않고
output-binding: current-artifact로 바인딩한다. 그 이전 output step만 trusted artifact의
report-id+sha256을 artifact-refs로 참조하며, 미래 step 결과는 기록하지 않는다.
example:
role-id: ENG-BE
method-id: backend-implementation
contract-sha256: "<active-contract-sha256>"
step-results:
- step-id: design-api
status: completed
output-binding: trusted-artifact
artifact-refs: [{ report-id: api-v1, sha256: "<exact-sha256>" }]
- step-id: implement-verify
status: completed
output-binding: current-artifact
self-check-results:
- { step-id: implement-verify, gate-id: contract-verified, verdict: Passed, evidence-refs: ["<receipt-id>"] }
independent-judgment-rule: >
reviewer-role이 producer와 다르면 대상 artifact를 먼저 Submitted로 등록하고,
reviewer가 exact id+sha에 결속된 method-judgment-review를 제출한 뒤에만 원본을 Accepted 처리한다.
# 근거 등급(원문 7.4). report-header.evidence[].grade 및 근거 품질 평가에 공통 사용.
evidence-grades:
E0: 근거 없는 주장 — 결정 근거 사용 금지
E1: AI 추론·가정·경험칙 — assumptions 로만 사용
E2: 외부 사례·경쟁사·일반 시장 자료(raw) — 참고 근거
E3: 내부 문서·기존 결정·회고·고객 상담 기록 — 강한 근거
# finding #20(외부자료 E2/E3 혼용 해소): 원출처가 외부라도 **하네스 표준으로 채택된 방법론**
# (skill '근거' 섹션: Refactoring UI·C4·Diátaxis·12-Factor 등)은 '채택 결정'이 있으므로 E3로 본다.
# 아직 채택 안 된 raw 외부 시장/경쟁 자료는 E2. 즉 등급 차이는 '채택 여부'로 갈린다(출처 국적 아님).
E4: 내부 지표·로그·행동 데이터·재무 데이터 — 매우 강한 근거
E5: 실험·운영 검증·테스트 결과·배포 후 계측 — 핵심 결정 근거
rule: High 이상 리스크 결정은 E4/E5 근거 없이 자동 승인하지 않는다. C-Level 권고는 최소 하나의 E3 이상 근거가 필요하다.
templates:
# 1) 직무 AI 표준 작업 보고서 (원문 2.8 AI Work Report). 상위 AI 검토용.
- id: AIWorkReport
drai-document-type: "LearningReview (parent-review 계열)"
audience: parent-role-agent
decider: parent-role-agent
must-lead-with: report-header
# answer-first 재배열: 원문(직무관점→입력→핵심판단→...)을 결론 우선으로 재정렬.
answer-first-note: 원문은 직무 관점부터 서술하나, 핵심 판단·결정 필요를 상단으로 올려 재배열.
sections:
- 핵심 판단
- 결정 필요 사항
- 판단 근거
- 가정과 반대 가능성
- 직무 관점
- 입력 요약
- 다음 액션과 핸드오프
required-fields:
- task-id
- role-agent
- role-perspective
- team-type
- input-documents
- output-artifacts
- status
- confidence
- assumptions
- "handoff-to(role-agent, expected-output)"
- human-review-needed
enums:
status: "Draft / Review / Approved / Blocked / Closed"
confidence: "High / Med / Low" # 정본 enum(validate_report 강제): High/Med/Low. severity 는 별개(Low/Medium/High/Critical).
quality-gate: 입력 문서·핵심 판단·근거·가정·신뢰도·handoff-to 필수. 미충족 시 Changes Requested.
rules:
- handoff-to 가 비면 다음 실행으로 이어지지 않는 종료형으로 본다.
- 여러 AIWorkReport 가 모이면 6-Pager/PR-FAQ/RFC-ADR 등 정식 문서로 승격할 수 있다.
# 2) 상위 통합 의사결정 문서 (원문 7.6). drai-matrix: ExecutiveDecisionPacket.
- id: ExecutiveDecisionPacket
drai-document-type: ExecutiveDecisionPacket
audience: [EXEC-CEO, HUMAN-001]
decider: [EXEC-CEO, HUMAN-001]
recommender: [EXEC-CTO, EXEC-CPO, EXEC-CFO, EXEC-COO, EXEC-CPTO]
auditor: [OPS-ORCH, ARCH-SWAT]
must-lead-with: report-header
# answer-first: 권고를 최상단(30초 판단). 원문 1~9 순서를 권고·사용자결정 우선으로 재배열.
answer-first-note: 원문은 결정 질문부터 대안·권고 순서이나, 권고안과 사용자 결정 항목을 상단으로 재배열.
sections:
- 결정해야 할 질문
- 권고안
- CEO 또는 사용자 결정 필요 항목
- 역할별 핵심 결론
- 합의된 내용
- 충돌하는 내용
- 근거 품질 평가
- 선택 가능한 대안
- 하위 팀 전달 지시
required-fields:
- decision-id
- source-brief
- authoring-agent
- "participating-roles(CTO/CPO/CFO/COO/CPTO)"
- status
- human-review-needed
- linked-reports
- selected-option-id
- evaluation-criteria
- option-evaluations
- tradeoffs
- dissent
- kill-criteria
- revisit-conditions
- evidence-refs
enums:
status: "Draft / Review / Approved / Blocked / Closed"
quality-gate: 역할별 결론·합의/충돌·근거 등급·대안·CEO 권고·사용자 결정 항목 필수. 미충족 시 Escalated.
rules:
- C-Level 개별 보고서 링크를 linked-reports 에 모두 연결한다.
- 합의된 내용과 충돌하는 내용을 모두 보존한다(이견 삭제 금지).
- 근거 품질 평가 없는 권고안은 Review 를 넘길 수 없다.
- human-review-needed true 이면 사용자 승인 없이 하위 팀 실행으로 넘기지 않는다.
- 하위 팀에는 C-Level 개별 의견이 아니라 승인된 Packet 을 입력으로 전달한다.
# 3) 작업 완료 기록 (원문 6.7.2 completion-record). 상위 AI acceptance-decision 입력.
- id: CompletionRecord
drai-document-type: "completion-record (parent-review 대상)"
audience: parent-role-agent
decider: parent-role-agent
must-lead-with: report-header
answer-first-note: work-summary 결론을 bottom-line 으로 상단화하고 산출물·검증·리스크를 뒤에 둔다.
sections:
- 작업 요약
- 산출물
- 사용 근거
- 검증 결과
- 남은 리스크
- 핸드오프
required-fields:
- completion-id
- source-request-id
- completed-by
- completed-team
- work-summary
- "output-artifacts(type, uri)"
- evidence-used
- "verification-performed(check, result)"
- remaining-risks
- "handoff-to(role-agent, reason, expected-next-output)"
- status
enums:
status: "Submitted-for-Review / Accepted / Changes-Requested / Blocked / Escalated"
quality-gate: 산출물 링크·검증 결과·남은 리스크·handoff-to 필수. 미충족 시 Changes Requested.
rules:
- 상위 AI 의 acceptance-decision 없이는 Closed 가 될 수 없고 Submitted-for-Review 로 남는다.
- handoff-to 가 비면 종료형 산출물이어야 하며 그 이유를 적는다.
- 다음 AI 직무가 필요하면 expected-next-output 을 반드시 쓴다.
# 4) 작업 중단 보고서 (원문 2.9). drai-matrix: BlockedReport.
- id: BlockedReport
drai-document-type: BlockedReport
audience: [OPS-ORCH, EXEC-CEO, HUMAN-001]
decider: [OPS-ORCH]
recommender: [worker-role-agent, parent-role-agent]
auditor: [QA, ARCH-SWAT]
informed: [EXEC-CEO, HUMAN-001]
must-lead-with: report-header
answer-first-note: 무엇이 왜 막혔고 누가 풀어야 하는지를 bottom-line 으로 상단화한다.
sections:
- 문제 요약
- 영향
- 근거
- 필요한 검토 역할
- 해결 경로
- 재개 조건
required-fields:
- blocker-id
- detected-by
- detected-team
- blocked-task
- blocker-type
- severity
- status
- "source-documents(title, uri, relevant-section)"
- problem-summary
- "evidence(finding, uri)"
- impact
- "required-review-roles(role-agent, reason)"
- suggested-resolution-path
- resume-condition
- slack-notification-needed
- human-review-needed
enums:
blocker-type: "design-inconsistency / missing-decision / implementation-impossible / test-failure-from-design / security-blocker / reliability-blocker / data-contract-conflict"
severity: "Low / Medium / High / Critical"
status: Blocked
quality-gate: blocker 유형·영향·근거·필요 검토 역할·resume-condition 필수. 미충족 시 Escalated.
rules:
- 구현 AI 는 설계 충돌 발견 시 임시 우회 구현 대신 BlockedReport 를 먼저 작성한다.
- required-review-roles 에 원인 역할과 검토 역할을 모두 적는다.
- severity High 이상이면 slack-notification-needed 와 human-review-needed 기본값 true.
- resume-condition 충족 전까지 해당 작업을 재개하지 않는다.
# 5) CEO 인테이크 산출물 (원문 1.7 / .claude/commands/ceo-intake.md).
- id: DecisionBrief
drai-document-type: "none (CEO 인테이크 산출물, User Intake 단계)"
audience: [HUMAN-001, OPS-ORCH, EXEC-CEO]
authored-by: EXEC-CEO
must-lead-with: report-header
answer-first-note: 사용자 의도 재진술 뒤 report-header(BLUF)로 시작. mode/tier/candidate-families 를 선언.
sections:
- 사용자 의도 재진술
- 결정 질문
- 목표와 성공 기준
- mode 선언
- tier 제안
- 후보 capability-family
required-fields:
- report-header
- mode
- tier
- candidate-families
enums:
mode: "divergent / converge"
tier: "light / standard / heavy"
quality-gate: report-header 없이 종료 금지. evidence 없는 confidence High 금지. candidate family는 전부 등록·고유·non-empty이고 tier 렌즈 바닥을 이론적으로 커버해야 한다.
rules:
- CEO AI 는 사용자 요청을 바로 실행 지시로 바꾸지 않고 결정 질문과 성공 기준을 먼저 정리한다.
- mode 불명확 시 converge, production/customer/revenue 접촉이면 독립 tier-check 필요.
- workflow queue/state 직접 조작 금지(Orchestrator 담당), 사용자 최종 승인 대체 금지.
# 6) 기술 결정 기록 (원문 2.3). drai-matrix: RFC/ADR.
- id: "RFC/ADR"
drai-document-type: "RFC/ADR"
audience: [EXEC-CTO]
decider: [EXEC-CTO]
recommender: [ARCH-SOLUTION, ARCH-APP, ARCH-TECH, ARCH-DATA, SRE, SEC-APPSEC]
auditor: [SEC-ENGINEER, QA, ARCH-SWAT]
informed: [ENG-BE, ENG-FE, INFRA-PLATFORM, DATA-ENGINEER]
must-lead-with: report-header
# answer-first: report-header(제안 결정 BLUF)를 최상단에 두고 본문은 RFC 논리 구조 유지.
answer-first-note: report-header 에 제안 결정을 BLUF 로 요약. 본문은 Proposed Design(결정)을 Context 앞으로 올려 재배열.
sections:
- Proposed Design
- Context
- Alternatives Considered
- "Security / Privacy / Compliance"
- "Consequences & Trajectory"
- Fitness Functions
required-fields:
- rfc-adr-id
- author
- co-authors
- tech-approver
- status
- effective-date
- related-docs
- context
- proposed-design
- alternatives-considered
- security-privacy-compliance
- consequences-trajectory
- fitness-functions
enums:
status: "Proposed / Accepted / Deprecated / Superseded"
quality-gate: Context·Proposed Design·Alternatives·Security·Consequences·Fitness Functions 필수. 미충족 시 Blocked.
rules:
- 결정 이유와 기각한 대안을 반드시 남긴다.
- EA 5계층(Business/Data/Application/Technology/Security) 검토 렌즈를 적용한다.
- 제목은 현재형 명령문으로 쓴다.
# 7) 최종 릴리스 수용 (원문 1.22). drai-matrix: ReleaseAcceptance.
- id: ReleaseAcceptance
drai-document-type: ReleaseAcceptance
audience: [EXEC-CEO, HUMAN-001]
decider: [EXEC-CEO, HUMAN-001]
recommender: [EXEC-VPENG, PROD-PO, QA, SRE, SEC-APPSEC]
auditor: [OPS-ORCH, SEC-ENGINEER]
informed: [EXEC-CTO, EXEC-CPO, EXEC-CFO, EXEC-COO]
must-lead-with: report-header
answer-first-note: final-status 와 미해결 리스크·사용자 결정 필요 여부를 bottom-line 으로 상단화한다.
sections:
- 최종 상태
- 승인 요건
- 검증 기록
- 미해결 리스크
- 사용자 결정 상태
- Fit 체크리스트
required-fields:
- release-id
- workflow-id
- scope
- "required-approvals(role-agent, status)"
- verification-records
- "unresolved-risks(risk, owner)"
- user-decision-status
- final-status
enums:
final-status: "Approved / Changes-Requested / Blocked / Stopped"
fit-checklist:
- "Product Fit: PR/FAQ 또는 제품 목표와 구현 결과 일치"
- "Technical Fit: RFC/ADR 와 실제 구현 일치"
- "Quality Fit: 테스트·QA 검증·미검증 영역 공개"
- "Security Fit: AppSec/보안 체크 완료"
- "Reliability Fit: SRE/SLO 영향 확인"
- "Data Fit: 계측·데이터 모델·분석 가능성 확인"
- "Operations Fit: 운영/지원 흐름과 예외 처리 확인"
- "Financial Fit: 비용/ROI 제약 위반 없음"
- "User Decision Fit: 사용자 승인 또는 수정 지시 반영"
quality-gate: 필수 승인·검증 기록·미해결 리스크·사용자 결정 상태 필수.
rules:
- final-status Approved 전에는 전체 workflow 를 Closed 로 표시하지 않는다.
- unresolved-risk 는 owner 와 후속 조치를 남긴다.
- 사용자 결정이 필요한 release 는 CEO AI 권고안 정리 후 사용자 승인 없이 완료하지 않는다.
@@ -0,0 +1,19 @@
# venture-option-spec.yaml — opportunity/venture-option 데이터 스키마(§6.1).
# 변경 이유 = 산출물 구조 변화. 역할 매핑은 venture-validation-map.yaml(변경 이유 다름).
venture-option-spec:
version: 1
opportunity-cluster: # opportunity-discovery 산출(제품명 이전, 문제 클러스터)
required: [id, problem-domain, target-user, triggering-event,
current-alternative, why-now, founder-fit]
venture-option: # venture-validation 산출(옵션별)
required: [id, customer, painful-job, current-alternative, wedge,
monetization, expected-price, reachable-customers,
rough-revenue-ceiling, acquisition-channel, build-cost,
operation-cost, founder-fit, defensibility, kill-criteria,
unresolved-assumptions]
notes:
- "'unknown' 은 허용값(모른다고 적을 수 있어야 한다) — 단 unresolved-assumptions 에 명시."
- "kill-criteria 는 필수 — 없으면 venture-validation→venture-decision 차단."
validation-result: # 게이트별 판정 스냅샷
required: [option-id, gate, verdict, evidence, dissent]
verdict-enum: [pass, fail, unknown]
@@ -0,0 +1,18 @@
# venture-validation-map.yaml — 9-gate 역할 매핑(§6.2). 변경 이유 = 조직·협업 방식 변화.
# role-id 는 capability-families member-role-ids/lead 에 존재해야 한다(doctor 대조, Task 20).
venture-validation-map:
version: 1
synthesis-owner: EXEC-CEO # 종합(수렴)은 CEO, 최종 선택은 사람(HUMAN-001)
gates:
- { gate: problem-intensity, primary: [UX-RESEARCHER], auditor: [PROD-PM] }
- { gate: competition-alternatives, primary: [GTM-CI], auditor: [STR-ANALYST] }
- { gate: willingness-to-pay, primary: [GTM-PRICING], auditor: [EXEC-CFO] }
- { gate: revenue-unit-economics, primary: [EXEC-CFO, GTM-REVOPS], auditor: [GTM-PRICING] }
- { gate: tech-feasibility-moat, primary: [ARCH-TECH], auditor: [EXEC-CFO] }
- { gate: operability, primary: [CONSULT-OPS], auditor: [ARCH-TECH] }
- { gate: distribution, primary: [GTM-GROWTHPM, GTM-SALES], auditor: [EXEC-CFO] }
- { gate: founder-fit, primary: [EXEC-CEO], auditor: [ARCH-TECH] }
- { gate: kill-criteria, primary: [EXEC-CFO], auditor: [EXEC-CEO] }
opportunity-discovery-roles:
diverge: [EXEC-CEO, STR-ANALYST, PROD-PM, UX-RESEARCHER, GTM-PMM]
contrarian: [EXEC-CFO] # 왜 실패하는가 — 초기 아이디어의 경제구조 반증(§6.2)
@@ -0,0 +1,523 @@
workflow-contracts:
version: 1
purpose: >
Cascade runtime의 artifact vocabulary, stage bundle, reviewer 권한을 한 곳에서 정의한다.
state_engine은 이 파일에서 artifact-kind와 bundle을 직접 읽으며 command는 gate fact를
인자로 전달하지 않는다.
default-payload-schema-ref: generic-workflow-artifact-payload.schema.json
payload-enforcement:
strict-tiers: [standard, heavy]
# Light remains a deliberate low-paperwork path. These kinds use their dedicated
# schemas and full required fields only in standard/heavy; light keeps the listed core.
tiered-kinds:
executive-decision-packet: [recommendation]
overall-design: [basis-artifact-id, basis-artifact-sha256]
api-design: [basis-artifact-id, basis-artifact-sha256]
threat-model: [basis-artifact-id, basis-artifact-sha256]
ui-design: [basis-artifact-id, basis-artifact-sha256]
prd: [basis-artifact-id, basis-artifact-sha256]
api-contract: [basis-artifact-id, basis-artifact-sha256]
data-contract: [basis-artifact-id, basis-artifact-sha256]
migration-plan: [basis-artifact-id, basis-artifact-sha256]
wave-plan: []
company-context: []
venture-validation: []
competitive-experience-benchmark: []
experience-strategy: []
experience-blueprint: []
wireframe-set: []
design-system-release: []
design-engine-output: []
approved-direction: [parent-workflow-id, child-workflow-id, product-decision-id, direction-input-brief-sha256, selected-direction-ref, selected-direction-sha256, winner-prototype-ref, winner-prototype-sha256]
role-capabilities:
transition-executor: [OPS-ORCH]
artifact-reviewer: [EXEC-CEO, EXEC-CPO, EXEC-CTO, EXEC-CPTO, EXEC-VPENG, PROD-PO, PROD-TPO, PROD-PPO, QA, HUMAN-001]
decision-approver: [HUMAN-001, EXEC-CEO]
design-approver: [EXEC-CPO, EXEC-CPTO, PROD-PO, DES-DIRECTOR, HUMAN-001]
spec-approver: [PROD-PO, PROD-TPO, PROD-PPO, EXEC-CPO, EXEC-CPTO, HUMAN-001]
quality-auditor: [QA, EXEC-VPENG, SEC-ENGINEER, SEC-APPSEC, HUMAN-001]
data-quality-auditor: [QA, ARCH-DATA, EXEC-CPO, EXEC-CTO, HUMAN-001]
architecture-auditor: [ARCH-EA, ARCH-SOLUTION, ARCH-SWAT, EXEC-CTO, HUMAN-001]
security-auditor: [SEC-ENGINEER, SEC-APPSEC, SEC-CHAMPION, QA, HUMAN-001]
product-quality-auditor: [PROD-PO, EXEC-CPO, EXEC-CPTO, QA, HUMAN-001]
infrastructure-auditor: [SRE, INFRA-PLATFORM, SEC-DEVSECOPS, EXEC-VPENG, HUMAN-001]
technical-accuracy-auditor: [ARCH-TECH, ARCH-APP, ARCH-SWAT, QA, EXEC-VPENG, HUMAN-001]
documentation-approver: [DOC-LEAD, EXEC-CPO, HUMAN-001]
release-decider: [HUMAN-001, EXEC-CEO]
# Runtime state graph SSOT. Each transition is derived from a stage's next + exit-gate.
# execution-plans.yaml and state-transition-rules.yaml are compatibility/documentation mirrors.
workflows:
cascade:
terminal-stage: released
stages:
intake:
command: ceo-intake
next: discovery
actor: { executor: [OPS-ORCH], decision-author-capability: [decision-approver] }
outputs: { bundle: [decision-brief, workload-profile] }
exit-gate: [decision-brief-present, workload-profile-present, company-context-ready]
discovery:
command: ground
next: decide
actor: { executor: [OPS-ORCH] }
inputs: [decision-brief, workload-profile]
outputs: { bundle: [grounding-contribution, competitive-market-grounding, grounding-package] }
exit-gate: [grounding-evidence-present, option-set-present, grounding-lens-coverage-satisfied]
decide:
command: decide
next: design
actor: { executor: [OPS-ORCH], decision-author-capability: [decision-approver] }
outputs: { bundle: [executive-decision-packet] }
exit-gate: [decision-packet-accepted, evidence-grade-min]
design:
command: design
next: spec
actor: { executor: [OPS-ORCH], decision-author-capability: [design-approver] }
outputs: { dynamic-bundle: design-bundle }
exit-gate: [design-accepted, experience-foundation-gate-satisfied, design-system-release-attached, design-direction-gate-satisfied]
spec:
command: spec
next: build
actor: { executor: [OPS-ORCH], decision-author-capability: [spec-approver] }
outputs: { dynamic-bundle: spec-bundle }
exit-gate: [spec-accepted, must-read-designs-accepted]
build:
command: build
next: verification
actor: { executor: [OPS-ORCH] }
outputs: { bundle: [completion-record] }
exit-gate: [completion-record-present]
verification:
command: review-output
next: acceptance
actor: { executor: [OPS-ORCH], decision-author-capability: [quality-auditor] }
outputs: { bundle: [quality-gate-review] }
exit-gate: [quality-gate-passed, blocker-open-false]
acceptance:
command: release-check
next: released
actor: { executor: [OPS-ORCH], decision-author-capability: [release-decider] }
outputs: { bundle: [release-decision] }
exit-gate: [release-approved, no-unresolved-critical-risks, human-gate]
released:
command: null
actor: { executor: [OPS-ORCH] }
exit-gate: []
additional-transitions:
- from: verification
to: build
allowed-by: { executor: [OPS-ORCH] }
required-conditions: [quality-gate-failed]
wave:
terminal-stage: released
stages:
intake: { command: ceo-intake, next: plan, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [decision-brief, workload-profile] }, exit-gate: [decision-brief-present, workload-profile-present, company-context-ready] }
plan: { command: plan-wave, next: run, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [wave-plan] }, exit-gate: [wave-plan-present] }
run: { command: run-wave, next: verification, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [completion-record] }, exit-gate: [completion-record-present] }
verification: { command: review-output, next: acceptance, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [quality-gate-review] }, exit-gate: [quality-gate-passed, blocker-open-false] }
acceptance: { command: release-check, next: released, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [release-decision] }, exit-gate: [release-approved, no-unresolved-critical-risks, human-gate] }
released: { command: null, actor: { executor: [OPS-ORCH] }, exit-gate: [] }
light:
terminal-stage: acceptance
stages:
intake: { command: ceo-intake, next: run, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [decision-brief, workload-profile] }, exit-gate: [decision-brief-present, workload-profile-present, company-context-ready] }
run: { command: run-wave, next: verification, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [completion-record] }, exit-gate: [completion-record-present] }
verification: { command: review-output, next: acceptance, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [quality-gate-review] }, exit-gate: [quality-gate-passed, blocker-open-false] }
acceptance: { command: null, actor: { executor: [OPS-ORCH] }, exit-gate: [] }
venture-bootstrap:
terminal-stage: bootstrap-complete
stages:
intake: { command: ceo-intake, next: founder-setup, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [decision-brief] }, exit-gate: [decision-brief-present] }
founder-setup: { command: venture-validate, next: opportunity-discovery, actor: { executor: [OPS-ORCH] }, exit-gate: [founder-context-present] }
opportunity-discovery: { command: venture-validate, next: venture-validation, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [opportunity-cluster] }, exit-gate: [opportunity-clusters-present] }
venture-validation: { command: venture-validate, next: venture-decision, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [venture-validation] }, exit-gate: [venture-options-validated] }
venture-decision: { command: company-bootstrap, next: company-context-commit, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [venture-decision] }, exit-gate: [venture-decision-accepted, human-acceptance-receipt-present] }
company-context-commit: { command: company-bootstrap, next: bootstrap-complete, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [company-context] }, exit-gate: [company-context-provisional-committed, company-context-lint-passed, company-context-artifact-recorded] }
bootstrap-complete: { command: null, actor: { executor: [OPS-ORCH] }, exit-gate: [] }
experience-foundation:
terminal-stage: foundation-approved
stages:
experience-foundation-intake: { command: experience-foundation, next: experience-benchmark, actor: { executor: [OPS-ORCH] }, exit-gate: [experience-parent-binding-present] }
experience-benchmark: { command: experience-foundation, next: experience-strategy, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [competitive-experience-benchmark] }, exit-gate: [competitive-benchmark-accepted] }
experience-strategy: { command: experience-foundation, next: information-architecture, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [experience-strategy, experience-technical-feasibility, experience-operational-feasibility] }, exit-gate: [experience-strategy-accepted, experience-technical-feasibility-accepted, experience-operational-feasibility-accepted] }
information-architecture: { command: experience-foundation, next: wireframes, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [experience-blueprint] }, exit-gate: [experience-blueprint-accepted] }
wireframes: { command: experience-foundation, next: foundation-approved, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [wireframe-set] }, exit-gate: [wireframe-set-accepted, experience-foundation-link-recorded] }
foundation-approved: { command: null, actor: { executor: [OPS-ORCH] }, exit-gate: [] }
design-direction:
terminal-stage: design-direction-approved
stages:
design-direction-intake: { command: design-direction, next: design-direction-discovery, actor: { executor: [OPS-ORCH] }, exit-gate: [parent-binding-present, direction-input-brief-valid, experience-foundation-gate-satisfied] }
design-direction-discovery: { command: design-direction, next: design-direction-divergence, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [pre-direction-framing, direction-discovery, divergence-charter] }, exit-gate: [direction-discovery-present, divergence-charter-present] }
design-direction-divergence: { command: design-direction, next: design-direction-decision, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [direction-set, comparative-divergence-audit] }, exit-gate: [directions-diverged, divergence-audit-passed] }
design-direction-decision: { command: design-direction, next: design-direction-prototype, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [selected-direction] }, exit-gate: [selected-direction-accepted] }
design-direction-prototype: { command: design-direction, next: design-direction-critique, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [winner-prototype] }, exit-gate: [winner-prototype-present] }
design-direction-critique: { command: design-direction, next: design-direction-finalize, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [design-lens-review, design-review-panel] }, exit-gate: [direction-critique-passed] }
design-direction-finalize: { command: design-direction, next: design-direction-approved, actor: { executor: [OPS-ORCH] }, outputs: { bundle: [approved-direction] }, exit-gate: [approved-direction-valid, approval-receipt-bound, parent-approval-link-recorded] }
design-direction-approved: { command: null, actor: { executor: [OPS-ORCH] }, exit-gate: [] }
additional-transitions:
- { from: design-direction-decision, to: design-direction-discovery, allowed-by: { executor: [OPS-ORCH] }, required-conditions: [none-of-the-above-recorded] }
- { from: design-direction-critique, to: design-direction-prototype, allowed-by: { executor: [OPS-ORCH] }, required-conditions: [critique-revision-requested] }
- { from: design-direction-critique, to: design-direction-divergence, allowed-by: { executor: [OPS-ORCH] }, required-conditions: [concept-rejection-recorded] }
side-transitions:
- { from: "*", to: blocked, allowed-by: { executor: [OPS-ORCH] }, required-conditions: [blocked-report-present, resume-condition-present] }
- { from: blocked, to: "<resume>", allowed-by: { executor: [OPS-ORCH] }, required-conditions: [resume-condition-satisfied, human-instruction-applied-if-needed] }
artifact-kinds:
decision-brief:
producer-roles: [EXEC-CEO]
reviewer-capability: decision-approver
required-payload-fields: [mode, tier, candidate-families]
payload-schema-ref: decision-brief.artifact.schema.json
method-binding: { mode: workflow-control }
workload-profile:
producer-roles: [EXEC-CEO]
reviewer-capability: decision-approver
required-payload-fields: [surfaces, risk, required-capabilities]
payload-schema-ref: workload-profile.artifact.schema.json
method-binding: { mode: workflow-control }
competitive-experience-benchmark:
producer-roles: [GTM-CI]
reviewer-capability: product-quality-auditor
required-payload-fields: [parent-workflow-id, product-decision-id, category, target-job, surface-archetype, references, synthesis, no-copy-attestation]
payload-schema-ref: competitive-experience-benchmark.artifact.schema.json
method-binding: { mode: stage-synthesis }
experience-strategy:
producer-roles: [EXEC-CPO]
reviewer-capability: decision-approver
required-payload-fields: [parent-workflow-id, product-decision-id, benchmark-ref, benchmark-sha256, experience-thesis, target-users, jobs-to-be-done, value-proposition, differentiation, message-hierarchy, success-metrics, decision]
payload-schema-ref: experience-strategy.artifact.schema.json
method-binding: { mode: stage-synthesis }
experience-technical-feasibility:
producer-roles: [EXEC-CTO, EXEC-CPTO]
reviewer-capability: decision-approver
required-payload-fields: [parent-workflow-id, product-decision-id, strategy-ref, strategy-sha256, architecture-fit, delivery-sustainability, constraints, risks, mitigations, verdict]
allow-empty-payload-fields: [risks, mitigations]
payload-schema-ref: experience-technical-feasibility.artifact.schema.json
method-binding: { mode: stage-synthesis }
experience-operational-feasibility:
producer-roles: [EXEC-COO]
reviewer-capability: decision-approver
required-payload-fields: [parent-workflow-id, product-decision-id, strategy-ref, strategy-sha256, operating-model, content-operations, support-and-recovery, constraints, risks, mitigations, verdict]
allow-empty-payload-fields: [risks, mitigations]
payload-schema-ref: experience-operational-feasibility.artifact.schema.json
method-binding: { mode: stage-synthesis }
experience-blueprint:
producer-roles: [DOC-IA]
reviewer-capability: product-quality-auditor
required-payload-fields: [parent-workflow-id, product-decision-id, benchmark-ref, benchmark-sha256, strategy-ref, strategy-sha256, experience-thesis, target-users, jobs-to-be-done, value-proposition, differentiation, content-model, page-inventory, navigation-model, message-hierarchy, task-flows, state-matrix, responsive-priorities, accessibility-intent, success-metrics]
payload-schema-ref: experience-blueprint.artifact.schema.json
method-binding: { mode: stage-synthesis }
wireframe-set:
producer-roles: [DES-PROD]
reviewer-capability: design-approver
required-payload-fields: [parent-workflow-id, product-decision-id, blueprint-ref, blueprint-sha256, screens, validation, art-direction-deferred]
payload-schema-ref: wireframe-set.artifact.schema.json
method-binding: { mode: stage-synthesis }
design-system-release:
producer-roles: [DES-PLATFORM]
reviewer-capability: design-approver
required-payload-fields: [release-id, version, state, source-ref, source-sha256, principles-ref, taste-profile-ref, token-source-ref, component-ids, pattern-ids, page-archetype-ids, generated-artifacts]
payload-schema-ref: design-system-release.artifact.schema.json
method-binding: { mode: stage-synthesis }
design-engine-output:
producer-roles: [DES-PROD, DES-VISUAL, DES-PLATFORM, ENG-FEUX]
reviewer-capability: design-approver
required-payload-fields: [engine, screen-refs, editable-source, preview-url, screenshots, design-system-ref, source-provenance, verification]
payload-schema-ref: design-engine-output.artifact.schema.json
method-binding: { mode: stage-synthesis }
first-draft-evaluation:
producer-roles: [UX-RESEARCHER, DES-DIRECTOR]
reviewer-capability: product-quality-auditor
required-reviewer-roles: [HUMAN-001]
required-payload-fields: [experiment-id, subject, arm-id, model-id, request-sha256, first-result-only, revision-count-at-capture, output-ref, output-sha256, screenshots, evaluator-blinded, metrics]
payload-schema-ref: first-draft-evaluation.artifact.schema.json
method-binding: { mode: independent-review }
grounding-package:
producer-roles: [STR-ANALYST]
reviewer-capability: decision-approver
required-payload-fields: [problem-structure, analysis-synthesis, evidence, options, source-contributions, lens-coverage]
option-count-min: 2
payload-schema-ref: grounding-package.artifact.schema.json
method-binding:
mode: aggregate
role-methods:
STR-ANALYST:
method-id: strategy-analysis
checkpoint-step-id: diverge-options
embedded-outputs:
grounding-evidence: [problem-structure, evidence]
analysis-synthesis: [analysis-synthesis]
option-set: [options]
grounding-contribution:
producer-roles: [EXEC-CEO, EXEC-CTO, EXEC-CPO, EXEC-CFO, EXEC-COO, EXEC-CPTO, EXEC-VPENG, PROD-PM, PROD-PO, PROD-TPO, PROD-PPO, UX-RESEARCHER, DATA-ANALYST, DES-DIRECTOR, DES-PROD, DES-PLATFORM, DES-INTERNAL, DES-VISUAL, STR-ANALYST, ENG-FE, ENG-FEPLAT, ENG-FEUX, ENG-BE, ENG-BEGEN, ENG-PRODSERVER, ENG-PLATSERVER, ENG-PRODUCTMINDED, ENG-SW, ENG-DESKTOP, ENG-PRODCHAPTER, INFRA-DEV, INFRA-PLATFORM, INFRA-DEVOPS, SRE, SEC-DEVSECOPS, ARCH-EA, ARCH-SOLUTION, ARCH-APP, ARCH-TECH, ARCH-IT, ARCH-SYSANALYST, ARCH-SWAT, ARCH-BA, ARCH-BIZANALYST, ARCH-DATA, DATA-ENGINEER, DATA-BIGDATA, QA, SEC-ENGINEER, SEC-APPSEC, SEC-CHAMPION, OPS-CH, OPS-CREW, GTM-GROWTHPM, GTM-DEMANDGEN, GTM-PMM, GTM-CI, GTM-SALES, GTM-CS, GTM-PARTNER, GTM-REVOPS, GTM-PRICING, GTM-LEGAL, CONSULT-EM, CONSULT-STRAT, CONSULT-OPS, CONSULT-ORG, CONSULT-DIGITAL, CONSULT-FIN, DOC-LEAD, DOC-WRITER, DOC-IA, DOC-VISUAL, DOC-EDU]
reviewer-capability: decision-approver
required-payload-fields: [assigned-lens, producer-run-id, context-package-ref, context-package-sha256, findings, evidence-urls]
payload-schema-ref: grounding-contribution.artifact.schema.json
method-binding: { mode: lens-contribution }
competitive-market-grounding:
producer-roles: [GTM-CI]
reviewer-capability: product-quality-auditor
required-payload-fields: [assigned-lens, producer-run-id, context-package-ref, context-package-sha256, competitors-and-substitutes, current-alternatives, strengths-weaknesses, differentiation-hypotheses, evidence-urls]
payload-schema-ref: competitive-market-grounding.artifact.schema.json
method-binding: { mode: lens-contribution }
executive-decision-packet:
producer-roles: [EXEC-CEO]
reviewer-capability: decision-approver
required-payload-fields: [recommendation, selected-option-id, evaluation-criteria, option-evaluations, tradeoffs, dissent, kill-criteria, revisit-conditions, evidence-refs]
allow-empty-payload-fields: [dissent]
payload-schema-ref: executive-decision-packet.artifact.schema.json
method-binding:
mode: aggregate
role-methods:
EXEC-CEO:
method-id: decide-direction
checkpoint-step-id: converge-decision
embedded-outputs:
evidence-digest: [evidence-refs]
option-evaluation: [evaluation-criteria, option-evaluations]
product-decision: [recommendation, selected-option-id, tradeoffs, kill-criteria, revisit-conditions]
overall-design:
producer-roles: [ARCH-SOLUTION]
reviewer-capability: architecture-auditor
required-payload-fields: [basis-artifact-id, basis-artifact-sha256, source-artifact-refs, summary, architecture-boundaries, quality-attributes, decisions, dependencies, compatibility-assumptions]
allow-empty-payload-fields: [dependencies]
payload-schema-ref: overall-design.artifact.schema.json
method-binding: { mode: stage-synthesis }
api-design:
producer-roles: [ARCH-APP, ARCH-TECH]
reviewer-capability: technical-accuracy-auditor
required-payload-fields: [basis-artifact-id, basis-artifact-sha256, summary, resources, auth-model, error-model, versioning, compatibility-assumptions]
payload-schema-ref: api-design.artifact.schema.json
data-model:
producer-roles: [ARCH-DATA]
reviewer-capability: data-quality-auditor
required-payload-fields: [basis-artifact-id, basis-artifact-sha256, conceptual, logical, physical, ownership, classification, lineage, retention, compatibility, data-quality-thresholds]
payload-schema-ref: data-model.artifact.schema.json
metrics-analysis:
producer-roles: [DATA-ANALYST]
reviewer-capability: data-quality-auditor
required-payload-fields: [metric-contract, dataset-snapshot, analysis-run, findings, limitations]
payload-schema-ref: metrics-analysis.artifact.schema.json
data-pipeline:
producer-roles: [DATA-ENGINEER]
reviewer-capability: data-quality-auditor
required-payload-fields: [source-contract, schema-contract, correctness, time-semantics, lineage, operations, evidence-receipt-ids]
payload-schema-ref: data-pipeline.artifact.schema.json
bigdata-pipeline:
producer-roles: [DATA-BIGDATA]
reviewer-capability: data-quality-auditor
required-payload-fields: [source-contract, schema-contract, processing-semantics, correctness, performance, recovery-tests, lineage, evidence-receipt-ids]
payload-schema-ref: bigdata-pipeline.artifact.schema.json
threat-model:
producer-roles: [SEC-APPSEC, SEC-ENGINEER]
reviewer-capability: security-auditor
required-payload-fields: [basis-artifact-id, basis-artifact-sha256, dfd, trust-boundaries, threats, mitigations, residual-risks]
allow-empty-payload-fields: [residual-risks]
payload-schema-ref: threat-model.artifact.schema.json
ui-design:
producer-roles: [DES-PROD, DES-VISUAL, DES-DIRECTOR]
reviewer-capability: product-quality-auditor
required-payload-fields: [basis-artifact-id, basis-artifact-sha256, user-flows, screen-inventory, state-matrix, accessibility, design-system-bindings, visual-rationale]
payload-schema-ref: ui-design.artifact.schema.json
approved-design-direction:
producer-roles: [DES-DIRECTOR]
reviewer-capability: design-approver
required-payload-fields: [basis-artifact-id, basis-artifact-sha256]
prd:
producer-roles: [PROD-PM, PROD-PO, PROD-TPO]
reviewer-capability: product-quality-auditor
required-payload-fields: [basis-artifact-id, basis-artifact-sha256, problem, outcomes, non-goals, user-stories, success-metrics, constraints]
allow-empty-payload-fields: [non-goals, constraints]
payload-schema-ref: prd.artifact.schema.json
acceptance-criteria:
producer-roles: [PROD-PO, PROD-PM]
reviewer-capability: spec-approver
required-payload-fields: [basis-artifact-id, basis-artifact-sha256, criteria]
payload-schema-ref: acceptance-criteria.artifact.schema.json
api-contract:
producer-roles: [ARCH-TECH, ARCH-APP, ENG-BE, ENG-PRODSERVER]
reviewer-capability: technical-accuracy-auditor
required-payload-fields: [basis-artifact-id, basis-artifact-sha256, summary, protocol, version, operations, schemas, errors, compatibility]
payload-schema-ref: api-contract.artifact.schema.json
data-contract:
producer-roles: [ARCH-DATA, DATA-ENGINEER]
reviewer-capability: data-quality-auditor
required-payload-fields: [basis-artifact-id, basis-artifact-sha256, datasets, schemas, ownership, quality-rules, privacy, versioning]
payload-schema-ref: data-contract.artifact.schema.json
migration-plan:
producer-roles: [ARCH-DATA, DATA-ENGINEER, ENG-BE]
reviewer-capability: data-quality-auditor
required-payload-fields: [basis-artifact-id, basis-artifact-sha256, phases, rollback-plan, validation-plan, data-loss-tolerance, cutover-criteria]
payload-schema-ref: migration-plan.artifact.schema.json
completion-record:
producer-roles: [ENG-BE, ENG-FE, ENG-BEGEN, ENG-PRODSERVER, ENG-SW, ENG-FEUX, ENG-PRODUCTMINDED, ENG-DESKTOP, DATA-ENGINEER, DATA-BIGDATA, DATA-ANALYST, ARCH-DATA, INFRA-DEVOPS, INFRA-PLATFORM, SRE, SEC-DEVSECOPS, SEC-ENGINEER, SEC-APPSEC, OPS-ORCH]
reviewer-capability: quality-auditor
required-payload-fields: [summary, source-revision, primary-artifacts, acceptance-criteria-coverage, verification-receipt-ids, remaining-risks]
allow-empty-payload-fields: [remaining-risks]
payload-schema-ref: completion-record.artifact.schema.json
quality-gate-review:
producer-roles: [QA, EXEC-VPENG, SEC-ENGINEER, SEC-APPSEC, ARCH-DATA]
reviewer-capability: quality-auditor
required-payload-fields: [quality-gate, blocker-open, reviewed-artifact-id, reviewed-artifact-sha256, checks, findings]
allow-empty-payload-fields: [findings]
payload-schema-ref: quality-gate-review.artifact.schema.json
method-binding: { mode: independent-review }
release-decision:
producer-roles: [EXEC-CEO, HUMAN-001]
reviewer-capability: release-decider
required-payload-fields: [release-decision, unresolved-critical-risks, reviewed-completion-artifact-id, reviewed-completion-artifact-sha256, reviewed-quality-event-id, reviewed-quality-artifact-id, reviewed-quality-artifact-sha256]
payload-schema-ref: release-decision.artifact.schema.json
method-binding: { mode: workflow-control }
blocked-report:
reviewer-capability: artifact-reviewer
required-payload-fields: [blocker, resume-condition]
payload-schema-ref: blocked-report.artifact.schema.json
resume-evidence:
producer-roles: [OPS-ORCH, HUMAN-001]
reviewer-capability: artifact-reviewer
required-payload-fields: [resume-condition-satisfied]
payload-schema-ref: resume-evidence.artifact.schema.json
company-context:
producer-roles: [OPS-ORCH]
reviewer-capability: decision-approver
required-payload-fields: [status, company, products, operating-constraints, assumptions, evidence-refs]
allow-empty-payload-fields: [operating-constraints, assumptions]
payload-schema-ref: company-context.artifact.schema.json
opportunity-cluster:
producer-roles: [STR-ANALYST]
reviewer-capability: decision-approver
required-payload-fields: [source-artifact-refs, id, problem-domain, target-user, triggering-event, current-alternative, why-now, founder-fit]
payload-schema-ref: opportunity-cluster.artifact.schema.json
method-binding: { mode: stage-synthesis }
venture-validation:
producer-roles: [EXEC-CEO]
reviewer-capability: product-quality-auditor
required-payload-fields: [source-artifact-refs, hypotheses, experiments, evidence, option-evaluations, kill-criteria, recommendation]
payload-schema-ref: venture-validation.artifact.schema.json
method-binding: { mode: stage-synthesis }
venture-decision:
producer-roles: [EXEC-CEO]
reviewer-capability: decision-approver
required-payload-fields: [recommendation, selected-option-id, evaluation-criteria, option-evaluations, tradeoffs, dissent, kill-criteria, revisit-conditions, evidence-refs]
allow-empty-payload-fields: [dissent]
payload-schema-ref: executive-decision-packet.artifact.schema.json
method-binding:
mode: aggregate
role-methods:
EXEC-CEO:
method-id: decide-direction
checkpoint-step-id: converge-decision
embedded-outputs:
evidence-digest: [evidence-refs]
option-evaluation: [evaluation-criteria, option-evaluations]
product-decision: [recommendation, selected-option-id, tradeoffs, kill-criteria, revisit-conditions]
direction-discovery:
producer-roles: [DES-DIRECTOR]
reviewer-capability: design-approver
required-payload-fields: [direction-input-brief-sha256, findings, constraints-restated]
divergence-charter:
producer-roles: [DES-DIRECTOR]
reviewer-capability: design-approver
required-payload-fields: [direction-cycle-id, representative-screen, directions, pairwise-separation]
direction-set:
producer-roles: [DES-VISUAL]
reviewer-capability: design-approver
required-payload-fields: [direction-cycle-id, divergence-charter-ref, divergence-charter-sha256, representative-screen, directions, comparison-preview]
comparative-divergence-audit:
producer-roles: [DES-VISUAL]
reviewer-capability: design-approver
required-payload-fields: [direction-cycle-id, divergence-charter-ref, divergence-charter-sha256, direction-set-ref, direction-set-sha256, reviewer-role-id, reviewer-run-id, verdict, pairwise-comparisons, full-size-previews, blocking-findings]
allow-empty-payload-fields: [blocking-findings]
selected-direction:
producer-roles: [DES-DIRECTOR]
reviewer-capability: design-approver
required-reviewer-roles: [HUMAN-001]
required-payload-fields: [direction-set-ref, direction-set-sha256, rejected-directions, parent-workflow-id, product-decision-id, direction-input-brief-sha256, selection-acceptance-receipt]
winner-prototype:
producer-roles: [DES-PLATFORM, ENG-FEUX, ENG-FE]
reviewer-capability: design-approver
required-payload-fields: [selected-direction-ref, selected-direction-sha256, source-artifact-refs, prototype-path, prototype-sha256, preview-receipt-ref, revision]
method-binding: { mode: stage-synthesis }
design-review-panel:
producer-roles: [DES-DIRECTOR]
reviewer-capability: design-approver
required-payload-fields: [direction-cycle-id, target-prototype-id, target-prototype-sha256, reviews, synthesis]
payload-schema-ref: design-review-panel.artifact.schema.json
design-lens-review:
producer-roles: [DES-PROD, UX-RESEARCHER, DES-VISUAL, DES-PLATFORM, GTM-PMM, ENG-FE]
reviewer-capability: design-approver
required-payload-fields: [direction-cycle-id, target-prototype-id, target-prototype-sha256, reviewer-role-id, reviewer-run-id, lens, verdict, findings]
allow-empty-payload-fields: [findings]
payload-schema-ref: design-lens-review.artifact.schema.json
method-binding: { mode: independent-review }
approved-direction:
producer-roles: [DES-DIRECTOR]
reviewer-capability: design-approver
required-payload-fields: [parent-workflow-id, child-workflow-id, product-decision-id, direction-input-brief-sha256, selected-direction-ref, selected-direction-sha256, winner-prototype-ref, winner-prototype-sha256, visual-thesis, interaction-model, design-token-contract, acceptance-receipt-ref]
payload-schema-ref: approved-direction.artifact.schema.json
pre-direction-framing:
producer-roles: [DES-PROD]
reviewer-capability: design-approver
required-payload-fields: [brief, experience-constraints, direction-input-brief]
method-binding:
mode: aggregate
role-methods:
DES-PROD:
method-id: pre-direction
checkpoint-step-id: author-input-brief
embedded-outputs:
design-brief: [brief]
experience-constraints: [experience-constraints]
direction-input-brief: [direction-input-brief]
wave-plan:
producer-roles: [OPS-ORCH]
reviewer-capability: architecture-auditor
required-payload-fields: [scope, work-items, dependencies, acceptance-criteria, risks, owners]
allow-empty-payload-fields: [dependencies, risks]
payload-schema-ref: wave-plan.artifact.schema.json
compatibility-review:
producer-roles: [QA, ARCH-SOLUTION, ARCH-SWAT, ARCH-DATA, SEC-ENGINEER]
reviewer-capability: quality-auditor
required-payload-fields: [left, right, dimensions, findings, verdict, reviewer-role-id]
allow-empty-payload-fields: [findings]
payload-schema-ref: compatibility-review.artifact.schema.json
method-binding: { mode: independent-review }
method-judgment-review:
producer-roles: [QA, ARCH-SWAT, ARCH-DATA, SEC-ENGINEER, SEC-APPSEC, DES-DIRECTOR, DES-PROD, UX-RESEARCHER, EXEC-VPENG]
reviewer-capability: quality-auditor
required-payload-fields: [method-role-id, method-id, step-id, gate-id, criterion, reviewed-artifact-id, reviewed-artifact-sha256, reviewer-role-id, verdict, findings]
allow-empty-payload-fields: [findings]
payload-schema-ref: method-judgment-review.artifact.schema.json
method-binding: { mode: independent-review }
compatibility-contracts:
- { left: overall-design, right: api-design, dimensions: [boundary, auth, versioning] }
- { left: overall-design, right: data-model, dimensions: [ownership, lifecycle, consistency] }
- { left: overall-design, right: threat-model, dimensions: [trust-boundary, controls, residual-risk] }
- { left: approved-design-direction, right: ui-design, dimensions: [interaction, tokens, accessibility] }
- { left: prd, right: api-contract, dimensions: [use-case, error-semantics, acceptance] }
- { left: data-contract, right: migration-plan, dimensions: [schema, cutover, rollback] }
- { left: api-contract, right: data-contract, dimensions: [identity, consistency, versioning] }
artifact-bundles:
design-bundle:
always: [overall-design]
conditional:
- { when: public-api, require: [api-design] }
- { when: persistence, require: [data-model] }
- { when: security-bearing, require: [threat-model] }
- { when: ui, require: [approved-design-direction, ui-design] }
spec-bundle:
always: [acceptance-criteria]
conditional:
- { when: product-feature, require: [prd] }
- { when: public-api, require: [api-contract] }
- { when: persistence, require: [data-contract, migration-plan] }