CI 기준선 게이트 (평가 하네스 2단계)
w1-eval-ci 의 2단계. 1단계(회귀 방지)는 1주차에 끝났고, 이 티켓은 측정값이 기준선 아래로 떨어지면 CI 를 실패시키는 것이다(6.2절).
왜 1주차에 넣지 않았나
측정값이 하나도 없는 상태에서 게이트를 넣으면 무조건 실패하거나, 통과시키려고 가짜 기준선을 적게 된다. 측정하지 않은 수치를 기록하지 않는다는 원칙(절대 원칙 2)에 정면으로 어긋난다. 그래서 w2-baseline 이 잠정 베이스라인을 낸 뒤에 붙인다.
전제
w2-baseline 완료 — 골든셋 50건 기준 Recall@5·MRR 실측값이 있어야 한다.
할 것
- 기준선은 여러 번 실행한 값 중 최저치로 고정한다(절대 원칙 4). 평균이 아니다
- 절대 규칙은 1건 단위로 실패 처리한다(절대 원칙 5) — C-5 마스킹 누락 0건, F-2 판정 정확도. 평균으로 뭉개면 1건 뚫린 것이 보이지 않는다
- 미구현 모듈은 “측정 불가 — 모듈 미구현” 그대로 통과시킨다. 이 정직성을 우회하지 않는다
- 기준선 값과 함께 언제·어느 커밋으로·어떤 명령으로·표본 몇 건인지를 남긴다(
eval_run/eval_result)
완료 조건
- 기준선 미달 시 CI 가 실패한다
- 기준선 값의 출처(커밋·명령·표본 수)가 기록돼 있다
- 미구현 모듈 때문에 실패하지 않는다
- 표본이 0건인 항목 때문에 통과하지도 않는다 (아래 2026-08-28 참고)
2026-08-28 — 선행 조건 하나를 먼저 고쳤다 (status 는 todo 그대로)
게이트를 켜기 전에 반드시 있어야 할 것이라 하네스 쪽만 먼저 손봤다. 게이트 자체는 착수 전이다.
score_closure_gate([]) 가 absolute_rule_passed: True 를 내고 있었다 — 채점기가
「틀린 게 없으면 통과」로 계산하는데(len(failures) == 0) 다산 전환으로 F-2 케이스가
16건 → 0건이 되면서 빈 입력이 들어갔다. 이 상태로 게이트를 켰으면 F-2 절대 규칙이
표본 0으로 영원히 초록불이었다. C-5 도 같은 구조다 — P1·P2·P3·P5 표본이 없는데
「P1~P7 누락 0건 통과」로 보고됐다.
고친 것: evaluation/harness.py 에 NO_SAMPLES(「측정 불가 — 골든셋에 채점 대상이 없다」)를
두고 표본 0건이면 채점기를 부르지 않는다. report.py 는 마스킹의 미커버 패턴을 함께 찍는다
(장민석 님이 08-27 에 둔 PARTIAL_PATTERNS 를 합성 루트 scripts/run_eval.py 가 읽는다 —
MaskingPort 계약은 그대로다). 자세한 건 개발 로그 08-28 정성윤 seq 9.
이 티켓에 남는 것: 게이트를 붙일 때 NOT_IMPLEMENTED(만들지 않았다)와
NO_SAMPLES(만들었는데 잴 표본이 없다)를 둘 다 「실패시키지 않되 통과로도 세지 않는」
쪽으로 다뤄야 한다. 셋을 한 덩어리로 취급하면 이번에 막은 구멍이 게이트 층에서 다시 열린다.