diff --git a/CHANGELOG.md b/CHANGELOG.md index 1be8060..41d83c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,11 +8,15 @@ - 신규 에이전트/스킬 생성 전 중복 검토 단계 (Phase 3-0, Phase 4-0) - `references/agent-design-patterns.md` "에이전트 재사용 설계" 섹션 - `references/skill-writing-guide.md` §9 "스킬 재사용 설계" +- **Phase 7-6: 증거 주도 자율 진화 루프 (옵트인)** — 결정적 검증기를 갖춘 하네스가 실행 트레이스에서 실패를 채굴하고, 바운디드·표면 결박 편집을 제안하며, held-in/held-out 비퇴행 게이트(`Δ_in ≥ 0 AND Δ_ho ≥ 0 AND max > 0`)로만 채택하는 자율 진화 모드. 자격 게이트(결정적 신호 + 분할 가능 과제 집합)를 통과한 하네스에만 적용. Self-Harness(arXiv:2606.09498) paradigm 기반. (Add evidence-driven autonomous self-evolution loop, opt-in for verifier-equipped harnesses.) +- `references/self-evolution-loop.md` — 자격 분류(A/B/C), 실패 시그니처 스키마 `(c, q, m)`, 3단계 루프, 비퇴행 수용 규칙, 되돌리기·로깅 프로토콜, 주관 하네스 golden-sample 폴백, 오케스트레이션 스케치, 실패 모드 가드 수록. ### Changed - Phase 선택 매트릭스에 3-0/4-0 명시 - Phase 2-3에 재사용 검토 단계 포인터 추가 - 산출물 체크리스트에 재사용 검토 항목 2개 추가 +- Phase 7 진화를 두 모드(피드백 주도 기본 / 증거 주도 자율 옵트인)로 명시 구분 +- 산출물 체크리스트에 자격 게이트(7-6) 판정 항목 추가 --- diff --git a/skills/harness/SKILL.md b/skills/harness/SKILL.md index 83a09c3..4ecc854 100644 --- a/skills/harness/SKILL.md +++ b/skills/harness/SKILL.md @@ -360,7 +360,12 @@ Phase마다 다른 모드를 섞어 구성한다. 자주 쓰이는 조합: ### Phase 7: 하네스 진화 -하네스는 한 번 만들고 끝나는 정적 산출물이 아니다. 사용자 피드백에 따라 계속 진화하는 시스템이다. +하네스는 한 번 만들고 끝나는 정적 산출물이 아니다. 계속 진화하는 시스템이다. 진화에는 두 모드가 있다: + +- **피드백 주도 (기본, 7-1~7-4)** — 사용자 피드백을 수정 대상에 매핑한다. 모든 하네스에 적용된다. +- **증거 주도 자율 루프 (옵트인, 7-6)** — 실행 트레이스에서 실패를 채굴해 스스로 바운디드 편집을 제안·검증한다. **결정적 검증기를 갖춘 하네스에만** 적용된다. + +두 모드는 배타적이지 않다. 결정적 검증기가 없는 하네스는 7-1~7-4만 따르고, 있는 하네스는 7-6을 추가로 가동한다. #### 7-1. 실행 후 피드백 수집 @@ -426,6 +431,25 @@ Phase마다 다른 모드를 섞어 구성한다. 자주 쓰이는 조합: - 대규모 변경(아키텍처 변경, 에이전트 3개 이상 추가/삭제) 시 Phase 6-3(실행 테스트), 6-5(드라이런)까지 수행 - CLAUDE.md와 실제 파일의 일치 여부 최종 확인 +#### 7-6. 증거 주도 자율 진화 루프 (옵트인) + +피드백 주도 진화(7-1~7-4)는 사람이 말해야 시작되고, 사람의 문장을 근거로 삼으며, 편집 후 회귀를 자동으로 막지 못한다. 검증기를 갖춘 하네스라면 이 루프를 **실행 증거 기반의 자율 루프**로 격상할 수 있다. 출처: Self-Harness (arXiv:2606.09498) — 고정 모델이 자기 하네스를 propose-validate-accept 루프로 개선한다는 paradigm을, 하네스 팩토리의 진화 단계에 맞게 적용한 것이다. + +**자격 게이트 (이 게이트를 통과한 하네스에만 적용).** 두 전제가 모두 충족돼야 자율 루프가 의미를 갖는다. 무리하게 적용하면 "가짜 정밀성"이 된다. +1. **결정적/재현 가능한 검증 신호** — pass/fail 검증기, 수치 KPI, 스키마 적합성, 탐지기 재실행 등 사람 판단 없이 반복 측정 가능한 outcome. 대개 이미 존재하는 QA·팩트체크·감사 에이전트의 출력이 신호원이 된다. +2. **분할 가능한 반복 과제 집합** — held-in / held-out으로 나눌 수 있는 task 모집단. 매 실행이 1회성 bespoke 잡(예: "이 칼럼 한 편")이면 분할이 성립하지 않으므로 자격 미달이다. + +> 자격 분류(A: 적용 / B: 구조적 하위검사만 / C: 미적용)와 각 클래스 판정 기준은 `references/self-evolution-loop.md` "자격 분류" 참조. + +**3단계 루프 (요약).** 상세 절차·실패 시그니처 스키마·수용 규칙은 `references/self-evolution-loop.md` 참조. +1. **약점 채굴** — 현재 하네스를 held-in 과제에 실행해 트레이스를 모으고, **실패** 트레이스를 시그니처 `(검증기 원인, 행동의 인과 상태, 편집 표면)`로 군집화한다. "무엇이 거부됐나"와 "어떤 재사용 행동이 원인인가"를 분리하는 것이 핵심 — 편집을 처방하지 않고 증거 번들만 만든다. +2. **바운디드 제안** — 같은 모델/팀이 제안자로 돌아, 군집당 **서로 다른 · 최소 단위** 후보 편집 K개를 생성한다. 각 편집은 1 실패 메커니즘 ↔ 1 편집 표면(시스템 프롬프트·검증 지시·실패복구 지시·런타임 정책·에이전트·스킬)에 결박한다. +3. **검증 게이트** — 각 후보를 held-in **및 held-out**에 재평가하고, 보수적 비퇴행 규칙으로만 채택한다: `Δ_in ≥ 0 AND Δ_ho ≥ 0 AND max(Δ_in, Δ_ho) > 0`. held-out은 제안자가 보지 못한 회귀 테스트로, 관측된 실패에 대한 과적합을 막는다. 통과분만 병합한다. + +**되돌리기·로깅 (필수).** 편집 전 대상(에이전트/스킬/오케스트레이터)의 스냅샷을 보존하고, 모든 전이(편집 표면·양쪽 split 점수·accept/reject·사유)를 CLAUDE.md 변경 이력에 기록한다. 채택이 헛발질이면 스냅샷으로 즉시 롤백한다. + +**검증기가 없거나 주관적인 하네스 (B/C 클래스).** 결정적 게이트를 강요하지 말 것. 대신 (1) 채굴·바운디드 제안·되돌리기·로깅이라는 *규율*은 유지하되, (2) 게이트만 **기존 QA/리뷰 에이전트 판정 + 고정 golden-sample(과거 우수작 5~10개)에 대한 LLM-judge/사용자 승인**으로 강등한다. 이는 논문의 "사람 없는 자율"을 포기하는 대신, 증거 기반·최소·표면 결박·되돌리기 가능이라는 드리프트 방지 속성을 보존한다. + ## 산출물 체크리스트 생성 완료 후 확인: @@ -446,6 +470,7 @@ Phase마다 다른 모드를 섞어 구성한다. 자주 쓰이는 조합: - [ ] **CLAUDE.md에 하네스 포인터 등록** (트리거 규칙 + 변경 이력) - [ ] **CLAUDE.md 변경 이력에 에이전트/스킬 추가/삭제/수정 기록** - [ ] **오케스트레이터 Phase 1에 컨텍스트 확인 단계** (초기/후속/부분 재실행 판별) +- [ ] 결정적 검증기를 갖춘 하네스는 자격 게이트(7-6) 판정 — 통과 시 자율 진화 루프 옵트인 여부 기록 ## 참고 @@ -455,3 +480,4 @@ Phase마다 다른 모드를 섞어 구성한다. 자주 쓰이는 조합: - **스킬 작성 가이드**: `references/skill-writing-guide.md` — 작성 패턴, 예시, 데이터 스키마 표준 - **스킬 테스트 가이드**: `references/skill-testing-guide.md` — 테스트/평가/반복 개선 방법론 - **QA 에이전트 가이드**: `references/qa-agent-guide.md` — 빌드 하네스에 QA 에이전트를 포함할 때 참조. 통합 정합성 검증 방법론, 경계면 버그 패턴, QA 에이전트 정의 템플릿 포함. 실제 프로젝트에서 발견된 7개 버그 사례 기반. +- **자율 진화 루프**: `references/self-evolution-loop.md` — Phase 7-6 옵트인 자율 진화 루프 참조. 자격 분류(A/B/C), 실패 시그니처 스키마, 3단계 루프 절차, 비퇴행 수용 규칙, 주관 하네스 폴백(golden-sample judge) 포함. Self-Harness(arXiv:2606.09498) paradigm 기반. diff --git a/skills/harness/references/self-evolution-loop.md b/skills/harness/references/self-evolution-loop.md new file mode 100644 index 0000000..85a4d5d --- /dev/null +++ b/skills/harness/references/self-evolution-loop.md @@ -0,0 +1,151 @@ +# 자율 진화 루프 (Self-Evolution Loop) + +> SKILL.md **Phase 7-6**의 상세 참조 문서. 검증기를 갖춘 하네스가 실행 증거로 스스로를 개선하는 자율 루프의 절차·스키마·규칙을 담는다. +> 출처 paradigm: **Self-Harness: Harnesses That Improve Themselves** (arXiv:2606.09498). 논문은 "고정 모델이 자기 operating harness를 propose-validate-accept 루프로 개선한다"를 제안한다. 이 문서는 그 paradigm을 하네스 팩토리의 진화 단계(Phase 7)에 맞춰 일반화한 것이다. + +## 목차 + +1. [언제 이 문서를 읽는가](#1-언제-이-문서를-읽는가) +2. [왜 자율 루프인가 — 피드백 주도의 한계](#2-왜-자율-루프인가--피드백-주도의-한계) +3. [자격 분류 (A / B / C)](#3-자격-분류-a--b--c) +4. [Stage 1 — 약점 채굴 (Weakness Mining)](#4-stage-1--약점-채굴-weakness-mining) +5. [Stage 2 — 바운디드 제안 (Bounded Proposal)](#5-stage-2--바운디드-제안-bounded-proposal) +6. [Stage 3 — 검증 게이트 (Validation Gate)](#6-stage-3--검증-게이트-validation-gate) +7. [되돌리기·로깅 프로토콜](#7-되돌리기로깅-프로토콜) +8. [주관 하네스 폴백 (B/C 클래스)](#8-주관-하네스-폴백-bc-클래스) +9. [오케스트레이션 스케치](#9-오케스트레이션-스케치) +10. [실패 모드와 가드](#10-실패-모드와-가드) + +--- + +## 1. 언제 이 문서를 읽는가 + +다음 중 하나라도 해당하면 읽는다. +- Phase 7에서 하네스가 **자격 게이트**(SKILL.md 7-6)를 통과해 자율 진화 루프를 가동하려 할 때. +- 기존 하네스에 결정적 검증기(QA/팩트체크/탐지기/KPI)가 이미 있고, 진화를 사람 피드백에서 증거 기반으로 격상하려 할 때. +- 주관 하네스(B/C)에 드리프트 방지 규율만이라도 도입하려 할 때 → §8만 읽어도 된다. + +자격 미달(결정적 신호 없음 + 1회성 bespoke 잡)이면 이 문서는 불필요하다. SKILL.md 7-1~7-4(피드백 주도)만 따른다. + +## 2. 왜 자율 루프인가 — 피드백 주도의 한계 + +피드백 주도 진화(7-1~7-4)는 세 가지 구조적 약점이 있다. + +| 약점 | 증상 | +|------|------| +| 사람이 시작해야 함 | 사용자가 말하지 않으면 실패가 누적돼도 진화가 멈춘다. | +| 근거가 주관적 | "분석이 피상적" 같은 문장 → 수정 방향이 모호하고 재현 불가. | +| 회귀 무방비 | 편집이 이전에 통과하던 케이스를 깨도 자동으로 잡지 못한다. 변경 이력 표는 *기록*일 뿐 *게이트*가 아니다. | + +자율 루프는 이 셋을 각각 (1) 실행 후 자동 채굴, (2) 검증기 기반 실패 시그니처, (3) held-out 비퇴행 게이트로 대체한다. **단, 그러려면 검증기와 분할 가능한 과제 집합이 있어야 한다** — 그래서 자격 게이트가 선행한다. + +## 3. 자격 분류 (A / B / C) + +하네스를 세 클래스로 판정한다. 판정은 진화 직전 1회 수행하고 결과를 CLAUDE.md 변경 이력에 기록한다. + +| 클래스 | 정의 | 자율 루프 적용 | 게이트 | +|--------|------|----------------|--------| +| **A** | 결정적 검증 신호 + 분할 가능한 반복 과제 집합을 **모두** 보유 | 전체 루프 적용 | held-in/held-out 비퇴행 (§6) | +| **B** | 결과 품질은 주관적이나, **하드 하위검사**가 존재(스키마 적합성·링크 유효성·렌더 무결성·수치 KPI·탐지기 재실행 등) | 하위검사 표면에만 부분 적용 | 하위검사는 §6, 본체는 §8 | +| **C** | 결정적 신호 없음 + 매 실행이 1회성 bespoke | 자율 루프 미적용 | §8 규율만(선택) | + +**판정 질문 (순서대로):** +1. 사람 판단 없이 반복 측정 가능한 pass/fail·수치 신호가 있는가? → 없으면 C. +2. 그 신호를 held-in/held-out으로 나눌 task 모집단이 있는가, 아니면 매번 유일한 1회성 잡인가? → 모집단 있으면 A, 하위검사만 모집단화 가능하면 B. + +**예시(일반화):** 표준 테스트 스위트를 가진 코드/파이프라인 하네스, 고정 시뮬레이션 케이스 + 수치 KPI를 가진 분류·블라인드 하네스, 탐지기 재실행으로 잔존율을 재는 텍스트 하네스 → A. 문서/덱/사이트 생성기에서 "스키마 적합성·폰트 무결성·링크 유효성·접근성 점수"만 떼면 → B. 톤·미감·서사가 산출물의 본질인 하네스 → C. + +## 4. Stage 1 — 약점 채굴 (Weakness Mining) + +목적: **편집을 처방하지 않고**, 실패를 재사용 가능한 메커니즘으로 구조화한 증거 번들을 만든다. + +1. **실행** — 고정 모델/팀을 현재 하네스로 held-in 과제 집합에 돌려 트레이스 + 검증기 outcome을 수집한다. 이미 QA·팩트체크·감사 에이전트가 있으면 그 출력을 신호원으로 재사용한다(새 검증기를 만들 필요 없음). +2. **실패 격리** — outcome이 fail인 트레이스만 추린다. +3. **시그니처 부여** — 각 실패에 시그니처를 붙인다: + + ``` + signature = (c, q, m) + c = 검증기 수준 종단 원인 (verifier가 무엇을 거부했나) + q = 행동의 인과 상태 (그 거부에 기여한 agent 행동이 원인인가/부수적인가) + m = 추상 행동 메커니즘 (어떤 재사용 가능한 behavior가 관여했나 — 편집 표면의 후보) + ``` + + 핵심은 `c`(증상)와 `m`(원인 메커니즘)의 **분리**다. 같은 timeout(c)이라도 원인 메커니즘(m)이 다르면 다른 편집이 필요하다. 표면 증상이 아니라 메커니즘으로 군집화해야 재사용 가능한 편집이 나온다. +4. **군집화·정렬** — 시그니처가 정확히 일치하는 실패를 한 군집으로 묶고, 군집 크기·추정 가치 순으로 정렬한다. 산출물 = **증거 번들**(군집별 대표 사례·공유 증상·검증기 근거·추정 메커니즘). 번들은 편집을 지시하지 않는다. + +> 채굴은 결정론적이고 evaluator에 근거해야 한다. 트레이스 간 잠재적 의미 유사도가 아니라 "같은 하네스 편집으로 완화될 법한가"로 묶는다. + +## 5. Stage 2 — 바운디드 제안 (Bounded Proposal) + +목적: 증거 번들의 각 군집을 **최소·표면 결박** 후보 편집으로 번역한다. 제안자는 무제한 탐색권을 가진 외부 옵티마이저가 아니다. + +- **제안자 컨텍스트(바운디드)**: 편집 가능 표면 목록 + 채굴된 실패 패턴 + 보존해야 할 통과 행동 + 과거 시도 편집 요약. 원시 로그가 아니라 구조화된 cross-case 증거를 준다. +- **병렬 다양성**: 군집당 서로 **물질적으로 구별되는** 후보 K개를 생성한다(서로 다른 메커니즘/표면/가설). 같은 군집을 표현만 바꿔 반복하지 않는다. +- **개별 최소성**: 각 후보는 선택한 메커니즘 해결에 필요한 표면 하나만 건드리고, 무관한 행동은 보존하며, 제어 아키텍처의 광범위 재작성을 피한다. +- **표면 결박**: 각 편집은 `(1 실패 메커니즘 ↔ 1 편집 표면)`으로 묶고 audit 레코드(타깃 패턴·편집 표면·기대 효과·회귀 위험)를 단다. + +**편집 가능 표면(일반):** 시스템/역할 프롬프트 · bootstrap 지시 · 실행 지시 · 검증 지시 · 실패복구 지시 · 런타임 제어 정책(툴 에러/메시지 상한 등) · 서브에이전트 구성 · 스킬 목록. addressable하지 않은 군집(과제 고유 난이도·모델 능력 한계)은 억지로 패치하지 말고 제외한다. + +## 6. Stage 3 — 검증 게이트 (Validation Gate) + +목적: 제안을 즉시 채택하지 않고, **동일 검증 프로토콜**로 회귀까지 본 뒤 promote한다. + +- **두 split 평가**: 후보 하네스 `h'`와 현재 하네스 `h`를 held-in `D_in`과 held-out `D_ho` 양쪽에서 평가한다. `D_in`은 제안 동기를 해결했는지, `D_ho`는 제안자가 못 본 회귀를 본다. +- **개선량 정의**: + ``` + Δ_in = P_in(h') − P_in(h) # held-in 통과 수 변화 + Δ_ho = P_ho(h') − P_ho(h) # held-out 통과 수 변화 + ``` +- **수용 규칙 (보수적 비퇴행)**: + ``` + accept iff Δ_in ≥ 0 AND Δ_ho ≥ 0 AND max(Δ_in, Δ_ho) > 0 + ``` + 한 split을 깎아 다른 split을 올리는 편집은 총합이 늘어도 **거부**한다. 어느 쪽도 퇴행시키지 않으면서 최소한 한쪽을 개선할 때만 채택. +- **확률적 평가 보정**: 검증이 stochastic이면 같은 규칙을 repeat에 걸쳐 집계한다(단발 운으로 promote되는 것 방지). +- **병합**: 같은 라운드에서 여러 후보가 통과하면 호환 편집을 다음 버전으로 병합한다. 거부 후보도 로깅하되 활성 하네스는 바꾸지 않는다. +- **추가 거부 조건**: 편집 표면을 실제로 바꾸지 않거나, 유효 평가 결과를 얻기 전에 실행이 깨지는 제안은 거부한다. + +> 이 게이트가 자율 루프의 안전장치다. "나빠지는 편집"은 정의상 채택되지 않으므로, 자율 편집이 헛발질해도 활성 하네스는 보호된다. + +## 7. 되돌리기·로깅 프로토콜 + +자율 루프는 **모든 전이를 감사·되돌리기 가능**하게 만들어야 한다. + +1. **스냅샷** — 편집 전 대상 파일(에이전트 `.md` / 스킬 `SKILL.md` / 오케스트레이터)의 직전 버전을 보존한다. 파일 기반 컨벤션: `_workspace/evolution/{round}/{surface}.before` + `.after`. +2. **전이 로그** — 채택/거부 무관하게 다음을 CLAUDE.md 변경 이력(또는 `_workspace/evolution/log.md`)에 기록한다: 라운드, 편집 표면, 타깃 시그니처, `Δ_in`/`Δ_ho`, accept/reject, 사유. +3. **롤백** — 채택 편집이 후속 라운드에서 퇴행을 유발하면 스냅샷으로 즉시 복귀하고 로그에 revert를 남긴다. +4. **수렴 종료** — K 라운드 연속 채택이 0이면 루프를 멈춘다(채굴할 addressable 약점 고갈). + +## 8. 주관 하네스 폴백 (B/C 클래스) + +결정적 게이트가 없는 하네스에 §6을 강요하면 "가짜 정밀성"이 된다("이 산문이 톤에 맞는가?"에 pass-rate를 붙이는 식). 대신 **규율은 유지하고 게이트만 강등**한다. + +- **유지(논문에서 그대로 가져오는 것):** Stage 1 채굴(단, 신호원 = 기존 리뷰/QA 에이전트의 구조화된 결함) · Stage 2 바운디드·표면 결박 제안 · §7 되돌리기·로깅. +- **강등(게이트):** held-in/held-out 수치 게이트 → **고정 golden-sample 판정**. 하네스 소유자가 "좋다"고 인정한 과거 산출물 5~10개를 동결해 두고, 후보 편집을 그 golden-sample에 적용한 결과를 (a) 기존 QA/리뷰 에이전트, (b) LLM-judge, (c) 사용자 승인 중 하나로 판정한다. +- **트레이드오프 명시:** 이 폴백은 논문의 "사람 없는 자율"을 포기한다(judge를 다시 끼움). 그 대신 증거 기반·최소·표면 결박·되돌리기 가능이라는 **드리프트 방지 속성**은 보존한다. B 클래스는 하드 하위검사 표면(스키마·링크·렌더·KPI)에 한해 §6 전체 게이트를, 나머지 본체에 이 폴백을 병용한다. + +## 9. 오케스트레이션 스케치 + +자율 루프는 에이전트 팀(기본) 또는 서브 에이전트로 구현한다. 역할 매핑: + +| 루프 역할 | 담당 | 비고 | +|-----------|------|------| +| 채굴자(Miner) | 기존 QA/팩트체크/감사 에이전트 재사용 | 새 검증기 신설 금지 — 있는 신호 재사용 | +| 제안자(Proposer) | 빌더 에이전트(또는 팀)가 proposer role | 군집당 K 후보 병렬 | +| 검증자(Validator) | `general-purpose`(스크립트 실행 필요) | held-in/held-out 재평가 | +| 기록자(Logger) | 오케스트레이터 | 스냅샷·전이 로그·롤백 | + +- 데이터 전달: 파일 기반(`_workspace/evolution/`) + 태스크 기반(라운드 진행). 자율 루프는 감사 추적이 핵심이므로 파일 기반을 기본으로 한다. +- 모델: 모든 에이전트 `model: "opus"` (SKILL.md Phase 3 원칙 준수). +- 비용 가드: 후보 수 K와 라운드 상한을 명시하고, 1회성 bespoke 하네스에는 루프를 돌리지 않는다(자격 게이트가 1차 방어선). + +## 10. 실패 모드와 가드 + +| 실패 모드 | 가드 | +|-----------|------| +| 관측 실패에 과적합 | held-out 게이트(§6) — 제안자가 못 본 split이 회귀를 잡는다. | +| 가짜 정밀성(주관에 수치 게이트) | 자격 게이트(§3) + B/C 폴백(§8). | +| 비용 폭증 | 자격 게이트로 1회성 잡 배제 + K·라운드 상한(§9). | +| 광범위 재작성으로 통제 상실 | 개별 최소성·표면 결박(§5). | +| 검증기 자체가 부실 | 채굴 신호의 신뢰도를 먼저 점검. 논문도 "수용 게이트는 검증기·트레이스 품질에 의존"함을 한계로 명시한다. 고위험 변경은 pass-rate 비퇴행만으로 promote하지 말 것. | +| 무한 루프 | K 라운드 연속 채택 0 시 종료(§7-4). |