코어 기준선 통과 확인 — F·G·H·I 동결 판정

무엇을

6주차 «종료 시점»에 코어(A~E, C-5) 기준선 통과 여부를 판정하고, F·G·H·I 착수 여부를 결정한다(CLAUDE.md §1 범위 관리 규칙).

⚠ 시점이 있는 조건이다 — 상시 금지가 아니다

2026-08-27 에 이 문장에서 「6주차 종료 시점에」가 빠져 있었고, 그 탓에 시한 있는 조건이 상시 금지로 읽혀 확장 논의가 6건 멈췄다(decisions/022). 원문은 「6주차까지는 자유, 그때 판정」이다. 이 티켓은 그 «그때» 를 실행하는 자리다.

무엇을 보고 판정하는가

게이트를 켜는 것과 수치가 나온 것은 다른 결정이다

STATE.md 가 적어 둔 그대로다 — 절대 원칙 5(미달 시 CI 실패)를 켜면 미구현 항목 때문에 계속 빨간불이 된다. 무엇을 게이트에 넣고 무엇을 「측정 불가」로 둘지를 여기서 정한다. 선행 티켓이 w2-baseline-gate다.

⚠ 2026-09-19 — 판정일이 11일 남았는데 쓸 수 있는 공식 수치가 없다

판정일은 6주차 종료 = 2026-09-30이다(1주차 08-20~08-26 기준). 그런데 —

그래서 판정 전에 두 가지가 먼저다.

① 무엇을 판정 대상 구성으로 삼을지 정한다 — 이게 순서상 먼저다. 운영은 규칙 + BM25로 돌고(이미지에 torch 가 없다), 로컬 최고 구성은 NER + dense + 리랭커다. 로컬 최고 수치로 「통과」를 선언하면 운영에서 성립하지 않는 통과가 된다. decisions/208(운영에 NER·임베딩을 올릴지)이 아직 «제안» 상태라 그 결정이 곧 판정 기준선의 정의다. 둘 다 재고 어느 쪽을 기준선으로 고정할지를 판정문에 적는다.

② 현재 코드로 하네스를 다시 돌려 기록한다(--record — 커밋·골든셋·표본 수가 함께 남는다). ES·모델이 필요해 이 저장소의 윈도 머신에서는 못 돈다 — 류준 님 맥이나 측정 전용 인스턴스(런북 22장) 몫이다.

docker build -t callguard-es:local infra/elasticsearch/      # 9200 에 띄운다
.venv/bin/python scripts/index_knowledge_base.py --to-es --recreate     # 98조항
ELASTICSEARCH_URL=http://localhost:9200 .venv/bin/python scripts/run_eval.py --runs 3 --record

볼 것: ① masking 이 09-09 의 ❌(누락 2)에서 정말 0 으로 갔는지 ② NO_SAMPLES 가 어디에 남는지 — 골든셋 v1-150(156건)에 C-5 표본은 일곱 패턴 다 있지만(P1 4·P2 2·P3 3·P4 5·P5 4·P6 7·P7 3), f2_case 는 여전히 0건이라 F-2 는 측정 불가 그대로다(09-19 파일 실측).

2026-09-21 — 운영 구성으로 재측정했다

도커 없이 ES 9.5.1 + nori 를 zip 배포판으로 띄워(운영과 같은 버전·같은 설정) 98조항을 적재하고 하네스를 돌렸다.

커밋 261bce4-dirty · 골든셋 v1-150(156건) · ES 9.5.1+nori · 기록 DB 없음(run_id 없음)
python scripts/run_eval.py --runs 3 --no-ner --retriever bm25        # 3회 중 최저치

[retrieval] recall@5 0.833 ✅ · mrr 0.666 ✅ · n 96
[masking]   누락 0 ✅ · 오분류 0 · 과잉 0.0 · n 28     ← 09-09 의 ❌(누락 2)가 풀렸다
[closure_gate] 측정 불가(0건) · [trigger] 측정 불가(의도적 미배선)

오류 내성(같은 구성): 검색은 오류 10% 에서 0.812(기준 ≥0.60) · 20% 에서도 0.792. ⚠ C-5 는 오류가 들어가면 뚫린다 — 0% 0건 → 5% 2건 → 10% 3건 → 15·20% 4건. 「누락 0」은 오류 없는 전사에서만 성립한다. 수치·그림·한계는 STATE.md 「실측값」과 jekyll/assets/error-tolerance-2026-09-21.png.

기준선 구성은 정해졌다(decisions/121) — 모델은 전용 GPU EC2 에 올린다. 판정일까지 그것이 운영 경로에 붙어 있으면 모델 구성, 아니면 운영 구성(위 값)이 기준선이고 모델 구성은 로컬 측정 참고치로 나란히 적는다. 떠 있지 않은 구성의 수치로 통과를 선언하지 않는다.

⚠ 판정문에 같이 적을 것 — ① C-5 「누락 0」은 오류 없는 전사 한정이다(위 곡선) ② 쌍둥이 조항 2건은 구분 단서가 없는 기준으로 채점된다(decisions/123) ③ 주입기가 실측 오류의 46.9% 를 흉내 내지 못해 곡선이 낙관 쪽이다 ④ F-2 는 측정 불가라 설계 문서로 갔다(118).

완료 조건


보드 최신화 (2026-09-21, 정성윤 — 사용자 지시로 전체 보드를 한 번에 맞췄다). todo → in-progress. 09-21 에 운영 구성 재측정과 기준선 구성 결정(121)이 끝났으니 착수한 것이 맞다. 남은 것 — 판정문(09-30) · 모델 구성 값(w6-model-config-remeasure) · --record(기록 DB 가 없어 run_id 를 못 남겼다).

판정문 초안 (2026-09-21, 정성윤) — _project/baseline-check-2026-09-30-draft.md(비공개). 기준 · 지금 있는 값과 네 조건 · 측정 불가 목록 · 한계 넷 · 판정일 명령을 채워 두었다. 판정일에 빈칸을 채워 _logs/ 로 옮긴다. ⚠ 지금 가장 약한 것은 E — 09-21 값에 run_id 가 없다. 판정일 전에 --record 로 한 번 더 돌린다. 모델 배치는 decisions/124(09-22)로 정해졌다 — NER·임베딩만 운영 노드에 CPU 로(리랭커 제외). F-2 는 decisions/125 로 「구현 완결」이 됐고 골든셋에 f2_case 99건이 들어와 이제 잰다 — 초안의 측정 불가 목록을 그에 맞춰 고쳤다(09-22).

2026-09-22 — 선행 조건 풀림 (정성윤)

w2-baseline-gate 가 닫혔다(decisions/134). 판정일에 할 일은 판정문 초안(_project/baseline-check-2026-09-30-draft.md)대로 운영 /health 확인 + 검색 기준선 확인 한 번: ELASTICSEARCH_URL=… python scripts/run_eval.py --runs 3 --no-ner --retriever bm25 --report-json r.json && python scripts/check_baseline.py r.json. 09-22 에 이 머신에서 같은 명령으로 Recall@5 0.853 · MRR 0.686(n 102) — 통과를 확인했다(기록 DB 없음, 공식 값은 류준 run_id 8·9).

2026-09-30 — 판정일: 통과 (정성윤)

운영 /health 에 pii_ner·retrieval_dense 가 있어 운영 실구성(run_id 8) 으로 판정했다 — 통과. 판정문은 진행 기록 2026-09-30-02-seongyun이 정본이다(초안 _project/baseline-check-2026-09-30-draft.md 는 옮기고 지웠다). B 0.971(n 102) · C-5 누락 0(n 40, 오류 없는 전사 한정) · F-2 1.0(n 99, 규칙표 안) · E run_id 8·9. 곡선은 한 세대 낡은 값(e966b62, n 96)이라 그렇게 적었다. F·G·H·I 는 판정과 무관하게 착수하지 않는다(decisions/132).