init: company-haness 설계
This commit is contained in:
@@ -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 }
|
||||
@@ -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).
|
||||
@@ -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)"
|
||||
@@ -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 실행 불가.
|
||||
@@ -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] }
|
||||
Reference in New Issue
Block a user