candidates[].fixture 근거전날(260826-hf_dataset_v1_final.html) HF v1 final(find) 데이터를 수령·프로파일링한 결과,
queries.jsonl 584행 중 answers의 surface가 null인 답이 88개(13.8%) 있음을 확인했다.
기존 8/21 v1 채점 계약은 이런 케이스를 다루지 않아 — 코드는 크래시 없이 place_gradable=False(room-only 채점)로
조용히 강등시킬 뿐이었다. 이 상태로 전량 측정을 돌리면 place accuracy가 왜곡되므로,
surface-None 88답을 무엇으로 채점할지 결정하지 않고는 실측에 착수할 수 없었다. 전날 리포트의
"결정 대기" 항목을 여기서 닫는다.
surface=None 한 값으로 뭉뚱그려져 있어, 원인별로 분리하지 않으면 올바른 GT를
세울 수 없었다.facts.gt_selections: A는 floor 유지 / B는 candidates[].fixture가 정답 표면(엄격)
/ C는 surface=None + unlabeled=True 플래그. grading.score_query에 C 반점 규칙 추가
(행 점수 = (표면까지 맞은 답 + 0.5×방만 맞은 C 답)/n_gt, 단 모든 답 충족 + 개수 일치 시에만).
query_labels에 concealment(open 541/hidden 43) 축 추가. 회귀 테스트
test_v1_final_grading.py 11개 신설, 기존 98→99 통과.
사용자: "fixture를 정답으로 하자, 미라벨은 그냥 빼자." facts.surface_unlabeled(query)로 C 답 판정 →
run_eval_v1.py가 평가 대상에서 C 행을 제거하고 results.json["excluded"]["surface_unlabeled"]에
query_id를 기록. grading.score_query는 이진 채점으로 복귀(반점 코드 삭제), 방어적으로 C 입력 시
place_gradable=False 유지. 회귀 테스트를 반점 2개 → 제외 헬퍼 테스트로 교체, 98개 재통과.
8/19 S3 353질의 런(75편) 단가를 results.json에서 재집계 + v1 드리프트 검증용 카나리아
(train_1299__2 1편 6행 × 3 오프라인 전략, flash/sonnet/gpt-5.5) — S3 대비 행당 단가 ±15~23% 이내.
GPT 저가형 카나리아(gpt-5-mini $0.032/편, gpt-5.4-mini $0.036/편, gpt-5.4-nano $0.011/편)도 비교해
flash보다 저렴함을 확인. cap 8(이미지 예산)을 기본으로 확정(8/23 실측: cap16→8은 vis-pure −0.15만,
frames-uniform만 실제로 저렴해짐).
scripts/run_v1_final_shards.sh MODEL TAG N CAP [STRATS] — eval 대상 100편을 N샤드 라운드로빈,
워커 1 job 안에서 N 프로세스(run_eval_v1, 편 단위 체크포인트). 5번째 인자로 전략 subset 지정
가능(파트 분할 제출용, results.json 행 단위 병합).
| 단계 | place_gradable | 비고 |
|---|---|---|
| 8/21 v1 계약 (수정 전) | 510/584 (87.3%) | surface None 88건 전부 room-only 강등 |
| 1차: C 반점 | 581/584 (99.5%) | B(43)+C(39) 편입, 3행만 room 미유도로 잔류 실격 |
| 최종: C 제외 | 545/545 (100%) | C 39행 + 방 미유도 3행 함께 평가 세트에서 제거 |
| 구분 | open | hidden | 합계 |
|---|---|---|---|
| find_target | 220 | 35 | 255 |
| find_distractor | 282 | 8 | 290 |
| 단계 | flash 6종 / 100편 | sonnet 4종(p1) / 100편 | 근거 |
|---|---|---|---|
| 카나리아 사전 추정 | $45 → $60(cap8 보정) | — | S3 단가 + 1편 카나리아 외삽 |
| 첫 체크포인트 실비 | $0.717/편 → ≈$72 | $0.258/편 → ≈$26 | flash 4편/120행, sonnet p1 8편/168행 실측 집계 |
초과 원인: v1 편이 v0.7보다 길어 ingest 비용 상승(tagmem $0.128/편·vis-pure $0.179/편·rf-v2 $0.104/편), cap을 16→8로 줄여도 frames-uniform 외 전략은 비용이 줄지 않음(이미 ≤8장 읽던 전략들).
| job | 내용 | 상태 |
|---|---|---|
97359 v1final_flash | flash × 6종, 4샤드, CPU-only, own | 실행(당일 완료 → 260826-v1final_find_eval.html) |
97369 v1final_sonnet_p1 | sonnet × blind/textlog/frames-uniform/rf-v2 | 취소(예산 초과, 8편 체크포인트 보존) |
97372 v1final_sonnet_p1 재예약 | 97369 동일 내용 | --begin=2026-08-27T21:00 UTC |
97370 v1final_sonnet_p2 | sonnet × vis-pure/tagmem-r3(ingest형) | --begin=2026-08-27T21:00 UTC |
HF 릴리즈가 사전 설계에 없던 축(hidden fixture, on_floor, 표면 미라벨)을 새로 들여왔을 때,
채점 계약을 코드 레벨에서 명시적으로 재정의하지 않으면 "조용한 오채점"(room-only 강등)으로 이어진다.
이번엔 회귀 테스트가 있어 반점→제외라는 하루 두 번의 규칙 변경도 안전하게 반영할 수 있었다.
비용 쪽에서는 카나리아 추정(1편)이 전체(100편) 실비를 과소평가했다(+60%) — v1 편이
v0.7보다 길어진 게 원인이며, 이후 예산 계획(하루 $100 상한)에 직접 영향을 줬다(job 취소·재예약).
이 결정들 없이는 260826-v1final_find_eval.html의 실측(flash 545행, $71.52)이 존재할 수 없었다.
sonnet 결과가 아직 없음(97372/97370, 8/27 21:00 UTC 시작 예정) — 모델 격자(flash × sonnet)를 채우려면 이 결과가 필요. gpt-5.4-mini 등 저가형 후보(6종 ≈$15~18)는 아직 실행 여부 미결.
sonnet p1/p2 완료 후 flash와 동일 스크립트(merge_v1final.py)로 병합 → 모델 격자 표 완성.
논문 표를 S3(v0.7)에서 v1 final 545행 표로 교체하고, hidden/multi 층 표를 신설한다.