CI 기준선 게이트 (평가 하네스 2단계)

w1-eval-ci 의 2단계. 1단계(회귀 방지)는 1주차에 끝났고, 이 티켓은 측정값이 기준선 아래로 떨어지면 CI 를 실패시키는 것이다(6.2절).

왜 1주차에 넣지 않았나

측정값이 하나도 없는 상태에서 게이트를 넣으면 무조건 실패하거나, 통과시키려고 가짜 기준선을 적게 된다. 측정하지 않은 수치를 기록하지 않는다는 원칙(절대 원칙 2)에 정면으로 어긋난다. 그래서 w2-baseline 이 잠정 베이스라인을 낸 뒤에 붙인다.

전제

w2-baseline 완료 — 골든셋 50건 기준 Recall@5·MRR 실측값이 있어야 한다.

할 것

완료 조건


2026-08-28 — 선행 조건 하나를 먼저 고쳤다 (statustodo 그대로)

게이트를 켜기 전에 반드시 있어야 할 것이라 하네스 쪽만 먼저 손봤다. 게이트 자체는 착수 전이다.

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.pyNO_SAMPLES(「측정 불가 — 골든셋에 채점 대상이 없다」)를 두고 표본 0건이면 채점기를 부르지 않는다. report.py 는 마스킹의 미커버 패턴을 함께 찍는다 (장민석 님이 08-27 에 둔 PARTIAL_PATTERNS 를 합성 루트 scripts/run_eval.py 가 읽는다 — MaskingPort 계약은 그대로다). 자세한 건 개발 로그 08-28 정성윤 seq 9.

이 티켓에 남는 것: 게이트를 붙일 때 NOT_IMPLEMENTED(만들지 않았다)와 NO_SAMPLES(만들었는데 잴 표본이 없다)를 둘 다 「실패시키지 않되 통과로도 세지 않는」 쪽으로 다뤄야 한다. 셋을 한 덩어리로 취급하면 이번에 막은 구멍이 게이트 층에서 다시 열린다.