94 lines
6.9 KiB
YAML
94 lines
6.9 KiB
YAML
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: 발산은 관점 충돌이 목적이라 병렬 격리가 맞고, 수렴은 결정 충돌을 피하려면 트레이스를 더 공유해야 한다.
|