Index
2026-09-22 — Progress

resume(type2) 온라인 배선 완료 — 매니페스트부터 프리플라이트까지

scene_bench | Online Execution Track — resume(type2), 마지막 남은 가족

TL;DR

87/87
매니페스트
256
프리플라이트 통과 칸
3
$0 게이트 적발 결함
$0
API 비용

1 배경 / 목적

resume는 4가족(find·restore·routine·resume) 중 마지막으로 남은 온라인 트랙이고, 다른 셋과 데이터 계약이 가장 다르다 — 질의에 answers[]가 없고(pending[]뿐), 시작 상태가 행마다 다른 컷이며, 채점 단위가 셋(놓기·누르기·방문)이다.

기존 한계: routine에서 배운 원칙 — "온라인은 읽기 트랙이 쓴 것과 같은 정본을 써야 한다" — 을 지키지 않으면 조용히 다른 조건으로 도는 결함이 나온다. 착수 전 $0 게이트로 최대한 많은 결함을 잡는 것이 목적이었다.

2 작업 내용

매니페스트 87/87 + 컷 불변성 증명

data_rev별로 61871a3e 53편 · fd856246 34편 = 87편(셀 컨텍스트 수와 정확히 일치). 매니페스트는 states/final.npz로 만들었는데 resume은 cut_NN에서 시작 — 둘이 어긋나면 strip/injection 목록이 틀린다. 12편×125개 컷 파일에서 model_body_mass·model_body_pos·check_names를 대조해 불일치 0을 확인, 검증 빌드가 127→87회로 줄었다.

임의 컷 복원 + 전수 검증 확장

restore_final_state(env, ep, arm, grip, state=...)로 인자를 뚫었다. verify_scene_restore.py --family resume을 신설(빌드는 편당 1회, 컷마다 복원·안착만 재는 구조). G4(목적지)는 pending[]에서, G5(방)는 신규 — visit_rooms의 남은 방이 방 이름 지도에 전부 있는가.

GT 어댑터 배선 + visit_rooms 채점

_plans_for_query에 resume 분기(_resume_plans) 신설. visit_rooms 채점은 인벤토리 최근접 휴리스틱이 아니라 방 폴리곤으로 — orchestrator.run_episode(track_rooms=True)가 턴마다 점유맵 방 채널로 현재 방을 재서 누적한다. press는 PRESS_HORIZON=300(FrankaPressButtonBench 에피소드 길이 max 287)을 resume에만 넘긴다.

3 결과 (수치)

data_rev편방 이름시드 조합결과
61871a3e533~4개159개 전부 비지 않음OK — 셀 159 · 답 합 1180 · 예산 400~17214
fd856246343~4개97개 전부 비지 않음OK — 셀 97 · 답 합 527 · 예산 400~18262

합계 256칸 — 셀 파일과 정확히 일치. visit_rooms $0 게이트: 셀이 쓰는 질의 44(전부 61871a3e), 방 이름 미유도 0, rooms_remaining ≠ 데이터셋 r 0건, 같은 이름 방이 둘 이상인 집 0/33편.

잡은 결함 3건 (전부 조용히 틀렸을 것)

#결함영향
①메모리 미래 누출resume ingest가 편 단위였고 컷으로 안 잘라 cut_05 칸이 cut_06까지의 기억을 시드로 받음. load_ingest가 chunk_ends·history·kept_history를 버려 rf-v3 memory가 아예 빈 문자열
②공허한 성공online_success가 all(sat.values()) 사용, 놓기 과제 없는 질의(127개 중 38개, 30%)는 gt_bodies가 비어 all({})==True — 로봇이 아무것도 안 해도 success
③읽기 행 조회 키 누락read_answer_key가 resume에서 f1(컷 프레임)을 요구하는데 안 넘겨 int(None)으로 죽음
수정 확인 (train_123__2000, 결함① 수정 전후) strategy cut_05 (f=2363) cut_06 (f=4453) rollforward-v3 mem 454자 mem 612자 rollforward-vis 프레임 6장 프레임 8장 tagmem-r3 줄14·엔트리12 줄18·엔트리26 textlog 4줄 5줄

판단 변경 — place_count 채점은 n이 아니라 r이다

유형n(끝 상태)으로 잴 수 있나이유
place_count✅끝 상태에 흔적이 남는다
press_count❌누름은 사건 — 끝 상태에 흔적이 없다
visit_rooms❌방문도 사건 — 컷 전 방문은 온라인에서 관측 불가

place만 n, 나머지를 r로 세면 한 질의 안에서 단위가 섞여 GC가 뜻을 잃는다. r로 하되 증분은 시작 시점 실측치(placed_start, 복원된 씬을 그대로 읽는다)를 빼서 구하면 GT를 보지 않는다. n 기준 값은 gc_total(place 전용) 진단 열로 병기.

계약 검증: scripts/check_online_prompt_parity.py --tree src --baseline …v12.json → exit 0, 공유 프롬프트 48개 바이트 동일, 수정 마커 4개 유지
보류: 전수 검증 제출은 클러스터 119/120 포화 + 내 잡 8개 PENDING으로 보류 중. 멱등·재개형이라 무손실

4 Takeaway

의미

resume는 $0 게이트만으로 결함 2건을 잡았다 — 둘 다 런을 죽이지 않고 조용히 다른 조건으로 돌았을 것이다(미래 누출은 점수를 올리는 방향이라 더 나쁘다). 컷 불변성 증명 덕에 검증 빌드가 127 → 87회로 줄어(≈2.8 GPU-시간 절감). visit_rooms는 61871a3e 런에만 있다 — fd856246 런은 놓기·누르기 두 단위뿐이다.

5 Next Steps

미해결 한계

전수 검증 제출 보류 중(클러스터 포화). 본 런 견적 재계산 필요 — 프리플라이트의 10 + 13.5 × len(gt_bodies) 모형은 find 기준이라 resume의 공급 후보(최대 18개)를 답 수로 오인해 $51.95/118 GPU-시간이 나온다. 실제 턴 상한은 60이고 요구 단위는 1~5개다.

다음 실험

파일럿 실측으로 견적을 다시 잡는다. resume 파일럿 — routine과 같은 10칸 규모로, 세 단위(놓기·누르기·방문)가 각각 한 번씩은 나오게 고른다.