Index
2026-09-23 — Progress

resume online v2 전환 + 씬 검증 파이프라인

scene_bench | resume(type2) online eval

TL;DR

391→342
본 런 셀 수
1.000
오라클(v2)
157
검증 컷 수

1 배경 / 목적

다른 세션이 읽기 트랙 resume 본표 조건을 바꿨다 — SBENCH_WRIST_INSET=both SBENCH_WRITER_FPS=1 SBENCH_QUERY_ROOMS=1 (손목 인셋 + writer 1 fps + 질의 시 방 목록 제공, final_results/resume_v2_wristrooms_61871a3e/). 이 조건에서 오라클(GT)이 tagmem .441 · rf-v3 .335 · vis-pure .323 · 오라클 1.000인데, 옛 v1 조건은 오라클 .789였다 — visit_rooms 문항이 총 방 수를 주지 않아 원리상 만점이 불가능했던 것.

기존 한계: resume online v1 배선(claude/260921 기준)은 실험 2(읽기)의 "답 = 초기 계획" 가정 위에서 셀·시드 메모리를 고정했는데, 읽기 본표 조건이 바뀌면 셀 구성과 시드 메모리가 동시에 바뀐다 — 단순 파라미터 하나 스위치가 아니라 파이프라인 전체 재검증이 필요했다.

2 작업 내용

v1 → v2 셀 구성 변화

v1 (배선 완료분)v2
resume_ok 셀256391 (61871a3e 257 · fd856246 134)
v1 대비 겹침 / 신규 / 빠짐—207 / 184 / 49
visit_rooms 포함 셀44137
매니페스트 없는 편013 (빌드 제출)

다른 세션이 작업 중 보관소를 재생성(04:40)했으나 재생성본으로 다시 뽑아도 391칸이 정확히 동일함을 확인했다.

시드·메모리 프레임을 손목 인셋으로

온라인 시드가 exo 원본 프레임(ep.frame(k))을 쓰고 있어 v2 reader가 실제로 보는 손목 인셋 합성 프레임과 달랐다. 읽기 트랙의 합성 로직을 inset_compose(exo, wrist)로 단일 정본화하고, 리팩터 전후 5프레임 픽셀 동일을 확인했다. 실행 중 새로 기억하는 프레임(writer_frame)은 현재 뷰(exo+wrist_now)·조작(스텝 쌍)만 인셋, 손목 없는 주행·프리미티브 place 프레임은 exo 축소본 규칙을 그대로 유지했다.

프리플라이트가 잡은 결함 — 첫 청크 전 컷은 빈 기억이 정답

컷이 첫 청크 끝(30s×25fps=749프레임)보다 앞선 2개 셀에서, 읽기 reader는 빈 기억으로 답해 맞혔는데 시드 코드는 빈 kept를 "S3가 저장 안 한 결함"(260822 사고)으로 오판해 죽었다. empty_at_cut()으로 "컷 이후이고 원본 이력이 안 비었을 때만" 진짜 결함으로 구분하도록 예외 처리했다.

파일럿 중 발견 — visit_rooms 채점 결함 (커밋 256dfe6)

증상: 파일럿 첫 행 rooms_seen=[{rid 5,'room_7'},{rid 2,'room_4'}], rooms_wanted=['bedroom','bathroom'] → 방문 단위 0 scene card(train_123): rid 4=Bedroom·5=Bathroom·6=Kitchen·7=LivingRoom → room_4(Bedroom)에 실제로 갔는데 0점 원인: 점유맵 room_ids_to_name = {geom_id+1: 바닥 바디 이름 "room_"}. N은 scene card rid(GT rooms_remaining)인데, 점유맵 rid(geom_id+1)는 다른 공간 — _resume_score가 바디 이름을 방 종류 이름과 문자열 비교했다. 단위 테스트가 실측에 없는 형식({"room":"bedroom"})을 써서 그동안 통과. 수정: house_rid_of('room_') → N(형식 아니면 assert), rooms_visited_ids, id 교집합으로 채점. tests/exec 377 통과.

파일럿(src_s1)은 결함 코드로 이미 돌고 있었지만 원자료(rooms_seen)가 행에 남아있어 재실행 없이 사후 재채점 스크립트(rescore_visit.py)로 보정했다. 본 런은 수정 코드 스냅샷(src_s2)으로 새로 돈다.

씬 재구성 전수 검증

routine에서 사용자가 확정한 기준(260921: 복원 OK · 목적지 존재 · 방 이름 존재 · 1s 안착 ≤5cm)을 컷 단위로 동일 적용했다. 검증 제출 중 샤딩 부수 결함도 발견 — verify_scene_restore_all.sh가 매니페스트 생성 중 샤드 경계를 시작 시점 목록으로 나눠 겹침(skip 8)·누락(12편)이 생겼고, 멱등 특성으로 NSH=1 재실행해 메웠다.

3 결과

컷 수비고
통과143본 런 셀로 채택
안착 5cm 초과(낙하)14달걀·감자·사과 5.5~19.7cm (train_4772·9578·9987 등)
빌드 실패2편train_5092 · train_7075 (HouseInvalidForTask)
참고: 1cm 초과90/157대부분 놓기 직후 ~1.3cm 정상 수직 안착

셀: 61871a3e 257 → 210(−47, 17컷) · fd856246 134 → 132(−2) · 합계 342. make_cells.py에 verify_verdicts 게이트를 추가해 검증 결과 없는 컷이 있으면 assert하도록 했다.

391칸 전부 플랜·시드·예산이 선다 — 회귀 테스트 4건(인셋) + 1건(empty_at_cut) 통과.

제출 현황: 매니페스트 13편 제출(extra, 풀 포화로 대기) · 전수 검증 3단계 제출 · 파일럿 10칸(사용자 승인 ~$3, COST_CAP=10, babysitter 가동) — 6편·네 단위 전부·6전략·컷이 둘인 편 3개로 컷 접두 기억까지 확인.

4 Takeaway

의미

읽기 본표 조건이 바뀌면 온라인 트랙의 v1→v2 전환은 파라미터 하나가 아니라 셀 구성 + 시드 메모리가 동시에 바뀌는 근본적 변화다 — 재검증 없이 그대로 이어 쓰면 안 된다는 것을 이번 전환이 재확인했다. 특히 visit_rooms 채점 결함(방 이름 공간 불일치)은 이미 알려진 "총 방 수 미제공" 이슈(260922 발견)와는 별개의 새로운 결함이며, 단위 테스트가 실측 형식과 다른 mock을 썼기 때문에 오래 숨어 있었다는 점이 채점 파이프라인 검증 전반에 대한 교훈이다.

5 Next Steps

미해결 한계

본 런 391(→342)칸은 routine 완주 전까지 대기해야 한다 — Letsur 일일 $100 캡을 routine이 하루 ≈$74 소모 중이라 동시 실행 시 429로 즉사한다.

다음 작업

파일럿 결과를 routine 파일럿과 같은 형식으로 리포트(실패 사례 포함). 전수 검증에서 떨어지는 편은 본 런 셀에서 계속 제외(복원 OK + 안착 ≤5cm + 목적지 게이트).