TL;DR
- 쓰기 병목의 최강 증거. 행동 로그 오라클 대 최고 비오라클 격차가 3.7× · 6.3× · 6.8×(.789/.211, .708/.112, .677/.099). find는 오라클이 이미지 메모리보다 낮았고(.474 < .603), restore는 1.7×였다. 세 가족 중 resume이 압도적이다.
- 예측은 절반만 맞았다. "텍스트 메모리가 이미지를 이긴다"가 아니라 "누적 로그는 되고 재작성 요약은 안 된다"가 정확한 서술 — rf-v3(재작성)는 3모델 모두 blind 이하 또는 동률(.056/.025/.019 vs blind .056/.068/.037).
- 버튼 누르기는 이미지로 원리적 복원 불가가 수치로 확정. press_button 25행에서 3모델 모두 rf-v3·tagmem 정확히 .000, 오라클 1.000/.840/1.000.
- 🔴 visit_rooms는 과제 정의가 비대칭. 발화에 수사가 있는 슬롯이 move 44/44 · put 67/67 · press 49/49인데 visit_rooms는 62/62 전부 없다("every room"). 집의 방 수를 스스로 알아야 해서 오라클 상한이 1.0이 아닌 유일한 셀(.419/.290/.258).
- 발화 목록을 blind 포함 전 전략에 공통 제공하므로 모델이 채우는 칸은 "몇 개 남았나(m)" 하나다. 그래서 지목(tasks_ok)은 blind도 .33–.47을 하지만 개수(remaining_ok)는 .04–.09로 무너진다.
.000
press_button의 rf-v3·tagmem
1이 과제가 find · restore와 무엇이 다른가
resume은 "그 물체가 어디 있나"가 아니라 "그 일을 몇 번 했나"를 묻는다. 로봇은 명령을 받아 수행하다 사용자 심부름에 끊기고, 컷 시점에서 "아까 하던 거 마저 해"라는 지시를 받는다. 정답은 r = n − m(시킨 개수 − 끝낸 개수)이다.
| find · restore | resume |
| 편 ↔ 질의 | 편 1개 = 메모리 1개를 질의 여러 개가 공유 | 행마다 컷이 다름(context_frames=[0,f1]) — 100편 161행(2행 61편) |
| 메모리 범위 | 편 전체 | 컷까지만. cut_view로 불변 뷰를 만들고 ingest는 1회 후 접두사 슬라이스 |
| 답 | selections[{category, room, surface}] | unfinished[{task(원문 verbatim), remaining≥1}] — 목록(미완 1–2개) |
| 채점 | loc/place 집합 일치 | tasks_ok(다중집합 일치) ∧ remaining_ok(전부 개수 일치) = resume_ok |
| 공통 입력 | 질의문만 | 발화 목록(commands[])을 blind 포함 전 전략에 제공 — 로봇이 실제 들은 과제 명세라 n은 공짜 |
| 오답 유인 | — | finished[] — 끝낸 일을 미완으로 지목하면 named_finished로 잡힌다 |
같게 유지한 것(공정 비교의 뼈대): 대화 구조(system → 메모리 턴 → 질의 턴), 질의 턴 = exo1 마지막 프레임 1장 + 질의문, 누출 가드 매 호출, 파스 실패 1회 재시도 후 오답, 기권 = 오답, 이미지 예산 cap 8, 편 단위 체크포인트.
cap 8의 측정 한계(사전 고지). cap 8의 표본 간격은 median 51초인데 press_button task는 전체가 62초 안에 끝나고 유닛 길이는 press 16초 · visit 35초다. "완료 유닛 수 이상의 표본이 실행 구간에 들어간다"는 필요조건 충족률이 press 53% · visit 50%(cap 16이면 86%/94%). 비교가능성을 위해 find · restore와 같은 예산을 쓰고, 이 한계를 결과로 보고한다(사용자 결정 260909).
2본표 — 161행 (resume_ok / slot_ok_frac)
| 전략 | flash-3.7 | sonnet-5 | luna |
| textlog (oracle) | .789/.811 | .708/.798 | .677/.758 |
| vis-pure (MemER-style) | .211/.391 | .112/.211 | .087/.121 |
| frames-uniform | .161/.273 | .112/.214 | .099/.158 |
| tagmem-r3 (ours) | .106/.189 | .043/.121 | .019/.037 |
| rf-v3 (MEM-style) | .056/.143 | .025/.112 | .019/.075 |
| blind | .056/.090 | .068/.127 | .037/.075 |
비오라클 순위는 세 모델이 일치한다: 이미지 메모리(vis-pure · frames) > tagmem > rf-v3 ≈ blind. rf-v3는 sonnet·luna에서 blind보다 낮다.
지목(tasks_ok) vs 개수(remaining_ok) — 무엇이 어려운가
| 전략 | flash-3.7 | sonnet-5 | luna |
| blind | .329 / .068 | .472 / .087 | .224 / .043 |
| textlog (oracle) | .807 / .789 | .832 / .739 | .783 / .677 |
| vis-pure | .602 / .292 | — | — |
설계가 의도대로 작동한다. 발화 목록이 공통 제공되므로 "무엇이 안 끝났는지" 지목은 blind도 .33–.47을 한다. 하지만 "몇 개 남았는지"는 .04–.09로 무너진다 — 메모리가 채우는 칸이 정확히 그 하나. 오라클만 지목과 개수가 거의 같다(.807/.789).
3확정된 결과 — 3모델 일치
3a. 쓰기 병목: 세 가족 중 resume이 압도적
| 가족 | 오라클(textlog) | 최고 비오라클 | 비율 |
| find (v1.0, 526행 nohidden) | .474 | vis-pure .603 | 0.8× (오라클이 더 낮다) |
| restore (v1.1, 518행) | .589 | vis-pure .351 | 1.7× |
| resume (161행) | .789 | vis-pure .211 | 3.7× |
find에서는 이미지 메모리가 행동 로그를 이겼다(마지막 위치를 묻는 과제라 사진 한 장이 로그보다 낫다). resume은 반대로 행동을 적지 않으면 답이 나올 수 없는 과제이고, 그래서 "무엇을 기억할지 정하는 쓰기 단계가 병목"이라는 주장이 가장 선명하게 드러난다.
3b. 재작성 요약(rf-v3)은 카운팅을 지운다 — 원문 증거
같은 행(train_1843__2000:cut_06, 세탁기 버튼 5회 중 3회 완료 → 정답 2)에서 세 전략의 답:
[textlog · 정답]
"The robot performed 2 presses, completed an interruption to open a dresser drawer, resumed and
completed 1 more press (total 3), and then finished a second interruption…"
→ {"task": "Press the button on the washing machine five times.", "remaining": 2} resume_ok=1
[vis-pure · 지목만 맞음]
"The robot completed the drawer opening task and finished moving the soap bottle on the sink.
However, it was interrupted before performing any of the five requested button presses."
→ remaining: 5 tasks_ok=1 · remaining_ok=0
[rf-v3 · 완전 실패 + 끝난 심부름 오지목]
"…it has not yet completed the original task of pressing the button on the washing machine five times."
→ [{"…five times.", 5}, {"Hold on — move the soap bottle to the other end of the sink first.", 1}]
tasks_ok=0 · named_finished=1
rf-v3의 컷 시점 메모리 원문(train_123__2000:cut_06, 559자)을 보면 이유가 명확하다.
"I observed a dining room, living area, kitchen, and blue room. In the dining room, on the dining
table, there is a plate, a table lamp, and 2 statues, with a chair nearby. … In the blue room, on a
dresser, there is 1 cup. On the desk in the blue room, there are 4 cups. … I placed the cup I was
holding onto the kitchen countertop."
장면 묘사만 남고 행동 이력이 사라졌다. 방을 네 개 "observed"했다고 적혀 있지만 그게 "방문 명령을 몇 개 수행했다"인지 알 수 없고, 행동은 컵 하나 놓은 것 한 줄뿐이다. 재작성 프롬프트가 find · restore용(물체 위치 보존)이라 위치를 남기고 행동 반복을 버리는 방향으로 압축되는데, resume은 정확히 그 버린 쪽을 요구한다. 하네스 결함이 아니라 전략 × 과제 미스매치이고, 벤치가 잡아내야 할 종류의 결과다.
부작용도 측정된다. sonnet rf-v3의 named_finished는 92/161행(57%) — 무엇을 끝냈는지 잃으면 끝난 심부름을 미완으로 다시 지목한다. finished[] 미끼 축이 설계대로 작동한 것이다(오라클은 .00–.06).
3c. 버튼 누르기는 화면에 흔적이 없다
| pending 종류 | textlog (oracle) | vis-pure | rf-v3 |
| flash | sonnet | luna | flash | sonnet | luna | flash | sonnet | luna |
| move_objects (17) | 1.000 | 1.000 | .941 | .412 | .294 | .353 | .353 | .118 | .176 |
| put_in_container (27) | 1.000 | .963 | 1.000 | .370 | .222 | .111 | .037 | .000 | .000 |
| press_button (25) | 1.000 | .840 | 1.000 | .080 | .040 | .080 | .000 | .000 | .000 |
| visit_rooms (31) | .419 | .290 | .258 | .194 | .129 | .065 | .065 | .065 | .000 |
press_button에서 rf-v3·tagmem은 3모델 모두 정확히 0이고 blind도 .000/.000/.040이다. 같은 편의 press #1·#2·#3 프레임은 표시등도 상태 변화도 없어 사실상 동일하고(train_3118은 8초 간격), 이미지 전략도 .04–.24에 그친다. 반면 오라클은 1.000 — 행동을 적어두기만 하면 풀리는데 보고는 알 수 없는 셀이다. 물체 task(move·put)는 출발면이 줄어드는 것이 보여 이미지 전략이 .11–.41을 낸다.
[put_in_container · vis-pure 성공 — 출발면이 줄어든 걸 본다]
train_7075__2000:cut_01 GT: 달걀 4개 중 2개 남음
"Initially, there were five eggs on the table, and two have been placed into the basket,
leaving two eggs remaining to be moved." → remaining: 2 resume_ok=1
4🔴 visit_rooms — 과제 정의 비대칭 (데이터팀 전달)
발화에 수사(n)가 있는지를 222슬롯 전수로 확인했다. 예외 없이 갈린다.
| 종류 | 수사 있음 | 없음 | 발화 예 |
| move_objects | 44 | 0 | "Pick up three of the mugs…" |
| put_in_container | 67 | 0 | "Pick up four of the eggs…" |
| press_button | 49 | 0 | "Press the button… five times." |
| visit_rooms | 0 | 62 | "Navigate to every room in the house." |
다른 세 종류는 n이 발화에 박혀 있어 모델이 m만 세면 되는데, visit_rooms는 집에 방이 몇 개인지(n=4가 57슬롯 · n=3이 5슬롯)를 스스로 알아야 한다. 그런데 메모리에는 방문한 방만 적히고 총 방 수는 없다.
[오라클도 못 푼다 — train_123__2000:cut_05]
textlog 메모리 전문(4줄):
[ 0s– 14s] I did this: Navigate to the living room.
[ 19s– 28s] I did this: Go check whether the phone is still on the sofa in the living room.
[ 28s– 60s] I did this: Navigate to the kitchen.
[ 66s– 94s] I did this: Go check whether the pillow is still on the sofa in the living room.
GT: n=4 · m=2 · r=2
답: unfinished = [] (abstain=1)
근거: "the total number of remaining rooms in the house cannot be determined from the available memory."
모델이 결함을 정확히 지적했다. 오라클은 "집에 방이 몇 개인지 메모리로는 알 수 없다"고 스스로 말하며 기권했다. flash-3.7 오라클 31행 중 16행이 unfinished: []였고, 실패 18행 중 개수만 틀린 건 1건뿐 — 나머지는 명령을 지목조차 못 했다. 그래서 이 셀만 오라클이 .419/.290/.258로 무너진다(다른 셀은 .84–1.00).
권고: 데이터 재생성 없이 별도 셀로 분리 보고한다("총량을 스스로 알아야 하는 조건"). 방 개수를 파악하는 것은 장면 기억의 정당한 일부이고 이미 데이터가 나와 있다. 다만 논문 표에서 다른 셀과 같은 줄에 놓으면 오라클 상한이 1.0이 아닌 유일한 셀이라는 점이 가려지므로 분리가 필요하다. 대안은 발화를 "all four rooms in the house"로 바꾸는 것(재생성 필요).
5축별 분해
kind — multi(미완 2개)에서 전면 붕괴
| 전략 | resume1 (100) | multi (61) |
| flash | sonnet | luna | flash | sonnet | luna |
| textlog | .820 | .730 | .760 | .738 | .672 | .541 |
| vis-pure | .250 | — | — | .148 | .033 | .016 |
| rf-v3 | .090 | — | — | .000 | .000 | .000 |
| blind | .090 | .090 | .060 | .000 | .033 | .000 |
미완 2개를 동시에 맞춰야 하므로 blind·rf-v3는 3모델 대부분 .000이다. 부분 점수(slot)로 보면 살아 있다 — vis-pure multi는 resume_ok .148인데 slot .410. 지목은 맞고 개수 하나가 틀리는 패턴이 26행이다.
[multi · 지목 성공 · 개수 실패 — train_1843__2000:cut_11, vis-pure]
GT: [세탁기 버튼 5회 → 2 남음, 사과 4개 → 1 남음]
답: [버튼 5회 → "remaining": 5, 사과 → "remaining": 1]
"The washing machine button task was never started… leaving all 5 button presses remaining.
For the apple collection task, the robot placed 3 out of 4 apples… leaving 1 apple remaining."
→ 사과(물체, 화면에 보임)는 맞히고 버튼(흔적 없음)은 틀린다. tasks_ok=1 · slot=0.5
그 밖의 축
| 축 | n | 관찰 |
| oracle_ok=1 vs 0 | 134 / 27 | 읽기 트랙에서 차이 없음(flash 오라클 .791 vs .778) → 오라클 미완주 27행을 거르지 않은 판단이 옳았다. 정답 GT는 오라클과 독립(222/222 검증됨) |
| control k_dst=0 | 15 | blind가 .200/.067/.067로 전체(.056/.068/.037)보다 높다 → 의도한 누출이 실제로 작동. 오라클 .933/.867/.867 |
| locality=away | 68 | 현재 이미지가 미완 task와 무관한 방. rf-v3 .015로 최저, vis-pure는 .221 유지 |
| sonnet 파스 실패 | 56행 | vis-pure 31 · frames 15 — 이미지 다수 입력에서 빈 응답(raw 길이 0, no JSON object found). find · restore와 같은 증상, 오답 처리 |
[blind도 지목은 한다 — train_123__2000:cut_06, sonnet, 해당 65행]
GT: [방 순회 → 2 남음, 머그 3개 → 2 남음]
답: [방 순회 → 1, 머그 → 3] tasks_ok=1 · remaining_ok=0
"The robot was first told to navigate every room, but was quickly diverted twice… After the second
diversion it was told to pick up three mugs…"
→ 발화 목록만으로 "무엇이 안 끝났나"는 재구성되지만 "몇 개"는 추측이다.
6검증 · 비용
- 측정 전 검증 7항목: 계약 테스트 23 passed · 컨텍스트 34 GB 100/100편 완비 · 전량 dry-run 100편 161행 오류 0 · 누출 가드 19행 × 4경로 위반 0 · 채점 4케이스 실물 확인 · 구판 단수형 답은 파스 실패로 재시도 유도 · 대화 구성 확인.
- 병합 검산: 3모델 전부 전략당 161행 정확히 일치, 중복 0. 원천
tmp/resume_{flash37,sonnet,luna}_merged.json, 격자 tmp/hf_check/grid_resume.py.
- 실비·시간: flash-3.7 $40.97(2h58m, 추정 $40과 일치) · luna $6.51(3h49m) · sonnet $71.82(4h35m, 추정 $63 초과 — multi 답이 길다). sonnet은 extra QOS에서 45분 만에 선점돼 own으로 재제출, 12/100 체크포인트에서 재개했다. 합계 ≈$119.
- 라벨:
oracle_ok는 채점에 쓰지 않고 라벨로만 싣는다(실행 트랙 전용). 읽기 격자는 161행 전부 사용.
7Takeaway · Next
resume은 라인업에서 성격이 반대인 축을 담당한다. find는 "마지막 위치"라 이미지 한 장이 로그보다 나았고, resume은 절반이 흔적 없는 카운팅이라 행동을 적어두지 않으면 풀 수 없다. 그래서 오라클/비오라클 격차가 3.7–6.8배로 벌어지고, 이것이 "쓰기가 병목"이라는 주장의 가장 강한 증거다. 다만 텍스트 메모리라고 다 되는 게 아니다 — 재작성 요약(rf-v3)은 장면 묘사로 압축되며 카운팅을 지워 blind 수준으로 떨어진다. 정확한 서술은 "누적 로그 vs 재작성 요약"이다.
- rf-v2(naive append) 추가 측정 검토 — "누적 vs 재작성"을 가르는 유일한 조건인데 논문 6전략에서 제외돼 있다(260906 결정). resume에서는 이게 핵심 대비축이 될 수 있다(flash-3.7 ingest 포함 ≈$12).
- 오픈 3종(qwen3vl-8b · cosmos-r2-8b · molmo2-8b) 자체서빙 측정($0) → 6모델 격자.
- visit_rooms: 별도 셀 분리 보고(권고) 또는 데이터팀에 발화 수정 요청.
- 데이터팀 기존 전달 5건 유지(오라클 게이트 미실행 27행 · k_src 분산 · L2 instruction 고정 문자열 ·
axes.fetch_scope 항상 null · supply 불일치 14슬롯).
- 하네스 v2는 아직 미커밋(
answer/grading/prompt/dataset_v1/run_eval_resume/test + 새 샤드 스크립트) · 보관소 final_results/ 편입 예정.
원천: tmp/resume_grid_final.md, tmp/resume_report_evidence.txt, 병합 3종. 로그 claude/260909/exp-resume_read_grid.md. 데이터 검수는 260908-resume_dataset_inspector.html.