구성
plugins/seed_generation/이 자기개선 루프의 세대마다 새 Petri seed 묶음을 만듭니다. 입력은 직전 세대의 baseline과 audit 결과, 출력은 다음 세대의 seed 파일과 git-tracked 번들 스냅샷입니다. CLI 진입점은 geode audit-seeds(슬래시 /audit-seeds)입니다.
| 모듈 | 역할 |
|---|---|
picker.py | 다음 런이 겨눌 target dimension 선택 |
orchestrator.py | 9-역할 phase 그래프 실행 (Seed Scenario Generation) |
manifest.py | seed 파일 × dimension × 예산 manifest |
cost_preview.py | 실행 전 비용 추정. confirm 프롬프트의 근거 |
pre_flight.py | 자격, 쿼터, 의존성 사전 점검 |
tournament.py | Elo 토너먼트 + 생존자 선택 |
checkpointer.py / resume.py | phase별 체크포인트와 재개 |
bundle_sync.py | 완료 런을 docs/self-improving/petri-bundle/seeds/<run_id>/로 동기화 |
geode audit-seeds generate는 picker → cost preview → pre-flight → confirm → pipeline 순서로 진행하고, geode audit-seeds resume이 체크포인트에서 이어 갑니다.
생존자 선택: blend가 기본
왜 Elo 단독이 아닌가. Elo는 judge 패널의 선호를 재지만, 루프가 원하는 seed는 "target이 어려워하는" seed입니다. pilot 실측이 주는 난이도 신호를 버리면 선택이 스타일 선호로 기웁니다. 그래서 기본 선택 모드는 blend입니다 (plugins/seed_generation/tournament.py의 DEFAULT_SURVIVOR_SELECTION).
final = elo_weight * z(elo)
+ diff_weight * confidence * z(difficulty)
difficulty = pilot dim_means[target_dim] # 높을수록 target에게 어려움
confidence = pilot stderr 기반 가중치 # 노이즈가 크면 자동 감쇠- z-score는 rating이 있는 후보들 사이에서 계산합니다.
- 후보 단위 점진적 약화: pilot이 깨졌거나 stderr가 없으면 그 후보는 순수 Elo로 평가됩니다. 깨진 pilot이 선택을 Elo보다 나쁘게 만들 수는 없습니다.
- 조정값:
GEODE_SEED_SURVIVOR_SELECTION(elo/difficulty/blend),GEODE_SEED_BLEND_ELO_WEIGHT/GEODE_SEED_BLEND_DIFFICULTY_WEIGHT(기본 각 1.0).
seed pool로의 연결
생존자는 런 번들에 남는 것으로 끝나지 않습니다. Closed-Loop가 실제로 읽는 곳은 두 풀입니다.
state/seed-pools/cycle-input. 사이클 입력 풀.geode seeds assemble이 최신 seed-generation 런들의 검증된 생존자에서 결정적으로 조립합니다 (기본--out이 이 풀입니다).state/seed-pools/held-out. 버전 고정 held-out 벤치마크. arm 간 비교의 기준자로 쓰며 사이클 입력과 섞지 않습니다.
다음
- Seed 생성 런. 공개된 런별 대시보드.
- Closed-Loop. 이 seed들이 측정에 쓰이는 곳.