Files

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