e02c1f3d (v1.2)scene_cards로 1000/1141 + 바구니는 tasks.room으로 전부 복원 가능.gt_routine/routine_labels/leak_last_frame은 정식 행에서 실패 → 설계서대로 행 어댑터만 교체. textlog가 side table을 "tv stand"로 적는 결함 발견.Routine 가족은 지금까지 임시 어댑터 + 파일럿 3편(260907)으로만 관통돼 있었다. 데이터팀이 정식 릴리즈(Keh0t0/scene-mem-benchmark main, 커밋 e02c1f3d, 2026-09-11 05:47 UTC, "v1.2: the routine family is new")를 올렸으므로 본 측정 전에 (1) 규격이 설계서와 어디서 다른지 (2) 행·정답·규칙·쌍둥이 정합 (3) 하네스가 그대로 먹는지 (4) 질의 시점 누출을 잰다.
leak_last_frame 플래그가 섰지만 "몇 편의 특수 사례"인지 "구조"인지 몰랐고, 방 이름은 임시 팩커가 plan.json에서 넣어 준 것이라 정식 데이터에도 있을지 미확인이었다.한 편은 한 집에서 규칙 2–3개(물체 상위 클래스 → 수납처 클래스, 값은 무작위: "수저 → 소파")를 보여 준다. 클래스 6종(FOOD·DISH·CUTLERY·GADGET·CLOTH·TOILETRY), 수납처 9종. 규칙마다 사용자가 frame 1에 "Put the food from the countertop on the side table."처럼 시키고(클래스·수납처는 말하지만 방은 안 말함), 로봇이 4유닛을 옮긴다(실패 유닛 71/426 보존). 40편에는 로봇이 옮기지 않고 지나가며 본 규칙(observed, D②)이 1개 있다 — 증거 3물체가 처음부터 수납처 위에 있고 pass-by 세그먼트·max_px가 기록돼 있다. 각 클래스의 홀드아웃(컨텍스트에 안 나온 하위 카테고리: 토마토·손수건·알람시계·스프레이…)이 출발 테이블 위에 처음부터 놓여 있고 로봇은 건드리지 않는다.
train_1102__7832 (self FOOD→SideTable, observed GADGET→Sofa). 상단: 시작 자세(거실) → 부엌 조리대(토마토·알람시계 홀드아웃과 음식) → 지나가며 소파 위 휴대폰·리모컨을 봄(관찰 규칙). 하단: 같은 순간 exo2 → 마지막 프레임 = 질의 이미지: 사과를 사이드테이블에 막 놓은 장면(exo1) · wrist 45k px → 증거 누출.| kind | 질의 | 정답 | 행 |
|---|---|---|---|
routine_direct | Put the tomato on the countertop away. | 그 홀드아웃 1개 → 규칙 수납처 클래스의 어느 인스턴스든(instances[] 1–5개) | 214 (self 174 · observed 40) |
routine_multi | Clear the countertop. | 테이블 위 전부: 홀드아웃(seen=false) + 같은 클래스 여분/실패 유닛 물체(seen=true) → 각자 클래스 수납처. 정답 2–11개(최빈 4) | 100 |
정식 채점(데이터팀): scoring=result — 실행 후 정답 물체 전부가 각자 receptacle_class의 어느 인스턴스 위(support_of) 또는 안(바구니)에 있으면 성공(routine_judge.judge). 쌍둥이(twin_id, 216행/108쌍)는 둘 다 맞아야 pair. budget_steps·oracle은 null(미실행; 계획은 max(400, 1.5×oracle)). 분석 축: evidence_source self/observed · n_rules 2/3 · twin_row · holdout_cls · receptacle_class · n_answers_multi.
우리 read-track(260907 결정): find와 같은 답 {category, room, surface}+abstain. 헤드라인 loc_set/place_set(GT = 증거 인스턴스의 방+수납처), 진단 place_any(어느 인스턴스든)·class_ok, 쌍둥이 pair_ok, leak_last_frame 행은 헤드라인 제외. 발화는 들은 시점에 메모리 입력(textlog·frames 캡션·rf/vis ingest).
| 수납처 클래스(정답) | Sofa | SideTable | Basket | DiningTable | ShelvingUnit | Desk | CounterTop | CoffeeTable | TVStand |
|---|---|---|---|---|---|---|---|---|---|
| 정답 수 | 196 | 178 | 141 | 108 | 51 | 48 | 10 | 7 | 4 |
| 바디 접두사 | sofa 218 + armchair 192 | stand | t?cont_Laundry_Hamper | diningtable | shelf | desk | countertop | coffeetable | stand |
홀드아웃 10종(Spray_Bottle 39 · Hand_Towel 36 · Alarm_Clock 35 · Tomato 24 · Bread 22 · Mug 19 · Spoon 13 · Fork 11 · Plate 8 · ButterKnife 7), 출발 테이블 countertop 150행 / dining table 64행, 정답 클래스 = 출발 테이블 클래스인 행 0/214(자명한 행 없음).
receptacle_class 214/214 · axes = 규칙 · meta.rules = 행 rules 100/100 · self 발화 수 = self 규칙 수(observed 발화 0) · observed 증거 3물체 전부 ≥200 px · context_frames=[0,T−1], T = mp4 프레임 = h5 스텝(9편 실측, 예 11757) · final.npz 100/100 · multi 정답 클래스 전부 규칙 있음, n_items/n_unseen 일치 · 쌍둥이 대칭·같은 집·같은 질의 216/216·정답 고정점 0.| # | 항목 | 실측 | 영향 |
|---|---|---|---|
| 1 | 방 이름 없음 | meta.rooms 없음, subtasks[].room 100편 null, 정답에 room/surface 없음(바디 uid만) | read-track GT에 필수. datagen scene_cards/train/<house>.json(59집 전부)로 인스턴스 1000/1141 해결, 나머지 141 = 주입 바구니 → tasks[].room(observed Basket 규칙 0건). 집 사실이라 누출 아님 |
| 2 | 3규칙인데 direct 2행 (4편) | 3514__6505·8831__6696: R2 ok=false(성립 안 함)인데 rules[]·n_rules=3에 남음 / 1639__6874/6875: R2 성립인데 홀드아웃 h2 없음 | README "성립한 규칙 전부"·"규칙마다 행" 불일치. n_rules 축 소폭 오염 |
| 3 | 쌍둥이 규칙 값 비순열 | 5162__7664/7665: (Sofa, DiningTable) vs (DiningTable, SideTable) | 정답은 다 다르므로 pair 무해 |
| 4 | multi 20쌍 정답 집합 상이 | 여분(seen) 물체가 실행 결과 따라 다름 (예 7338 5개 vs 7339 4개) | pair "둘 다 맞음" 정의 유지 가능 |
| 5 | 봉투 tags 없음 | 314행 전부 | 문서 |
| 6 | multi 행 holdout[] 없음 | 대신 surface(출발 테이블 uid) | README "모든 행"과 불일치; 어댑터가 direct 행에서 모음 |
| 7 | index.json type3 n_steps null | type1은 채워짐 | 문서 |
| 8 | README 'eight receptacle classes' · seen 정의 | 실제 9종(TVStand 4); seen=true 315개 중 286개는 손대지 않은 같은 클래스 여분(옮겨진 건 실패 유닛 29) | 문서 |
| 조건 | 증거 ≥200 px (마지막 5 s) | 마지막 측정 프레임 ≥200 px |
|---|---|---|
| 전체 | 15/30 | 14/30 |
| self 규칙 | 14/23 | 13/23 |
| self & 마지막으로 실행된 task의 규칙 | 14/15 | 13/15 |
| self & 다른 task | 0/8 | 0/8 |
| observed 규칙 | 1/7 | 1/7 |
| 홀드아웃이 보임 | 0/30 | — |
train_1639__6874(CLOTH→Sofa, TOILETRY→ShelvingUnit, FOOD→Basket) / __6875(CLOTH→ShelvingUnit, TOILETRY→Basket, FOOD→Sofa). 같은 집·같은 질의·정답 전부 다름. 두 편 모두 마지막 프레임에 바구니(6874: 사과 13k px 누출; 6875: 사과 1.3k px)가 보인다.leave 항목 없음, 정답 2–11개(파일럿 3+1). 발화는 "on the armchair"라고도 하므로 Sofa 클래스 별칭(armchair) 필요.프록시: 마지막 유닛의 at-table 구간(policy_phase approach/grasp/lift, 편당 중앙 302프레임)에서 다른 규칙 증거 물체의 최대 px.
| 조건 | 현행 (마지막 5 s, 수납처 앞) | 테이블에서 끝냄 | 시작 자세 (frame 0–24) |
|---|---|---|---|
| 전체 | 35/78 | 3/78 | 3/78 |
| self | 34/68 | 1/68 | 3/68 |
| self & 마지막 task 규칙 | 25/30 | 0/30 | 2/30 |
| self & 다른 task | 9/38 | 1/38 | 1/38 |
| observed | 1/10 | 2/10 | 0/10 |
| 홀드아웃 보임 | — | 63/78 (질의 물체, 무해) | — |
final.npz에서 이어 렌더(v1.1 부분 재렌더 방식)하면 궤적 본체 불변, 꼬리만 추가.vocab_v1.json(v3)이 접두사 전체를 "tv stand"로 고정 → find/restore는 닫힌 목록이라 채점 무해(의미상 28/66 오표기), routine은 "side table"이 목록에 있어 textlog/GT 불일치. 표시는 receptacle_class에서 가져와야.build_env(train_1102) 후 restore_final_state → n_set 0 / missing 11: 홀드아웃(h*_)·태스크 자산(t*a*_)·관찰 증거(o*e*_)·바구니(t*cont_)는 데이터 생성기가 주입한 에셋이라 우리 MolmoSpaces bench 씬에 없다(fingerprint nbody 388 vs 250; 집 가구·문 31/31은 있음). 같은 주입 방식인 resume(type2)도 동일. → 실행 트랙은 데이터팀의 씬 재구성 정보(plan injections 또는 MJCF)가 선행, 시작 자세 문제와 무관.현재 이미지 프록시(routine_query_view_v2.py): 행별로 대상이 1.0 m 안인 픽 자세 중 가장 늦은 유닛의 nav 끝 프레임(베이스 도착, 팔은 아직 홈 자세)을 영상에서 꺼낸다 — 실제 시작 상태(팔 홈·그리퍼 열림)와 같은 모양. nav 끝→grasp 끝 베이스 이동 중앙 0.000 m·최대 0.032 m라 자세는 동일. 이미 옮겨진 물체가 최대한 사라진 상태라 첫 버전(최근접 자세, stale 125/214)보다 정합이 낫다.
| 대상 ≤1.0 m | 홀드아웃 보임 | 진짜 누출(놓인/관찰 증거 ≥200px) | 나중에 옮겨질 물체가 보이는 프레임 | |
|---|---|---|---|---|
| direct 214행 | 203/214 | 180 | 1 | 57 (+집던 물체 1개 항상) |
| multi 100행 | 410/529 (전부 36행) | — | 2 | 46 |
dc1c8144 (11:55 UTC, 미디어 39.95 GB)데이터팀이 모든 컨텍스트 끝에 "출발 테이블로 복귀 후 정면 정지" 꼬리(중앙 25.8 s, final.npz에서 따로 시뮬·렌더해 이어 붙임)를 추가. subtasks.return_to_table/tail, meta.tail 신설, 질의 314행은 context_frames만 연장. 메타 검사 100/100(복귀 ok·테이블=홀드아웃 테이블·프레임 정합·기존 필드 불변).
| 미디어 검사 (100편) | 구판 e02c1f3d | 신판 dc1c8144 |
|---|---|---|
| 영상 = h5 = context_frames+1 | 100/100 | 100/100 |
| 이음새 베이스·물체 점프 | — | 0.000 m |
| 누출: direct 규칙 증거 ≥200px (마지막 5 s) | 97/214 | 2/214 (self 0/174 · observed 2/40, 218·255 px) |
| 마지막 프레임에 홀드아웃 보임 | 17/214 | 162/214 |
| 종료 자세→홀드아웃 ≤1.0 m (direct) | — | 131/214 (중앙 0.88 m · 최대 3.11) |
| 꼬리 동안 물체 이동 >5 cm | — | 20개 / 19편 |
4619__7892, 2492__7559), 로봇 몸체에 얹혀 같이 이동 3건(1949__7457 Bowl z 1.03 m 4.7 m 등), 수납처에서 떨어짐 3건(그중 규칙 증거 1건 2224__6458 Soap_Bottle 소파→바닥), 홀드아웃 12 cm 밀림 2건(4533__7194/7195). 읽기 트랙 GT엔 영향 없음. 실행 트랙 start_state의 "반례 없음" 검사가 꼬리 이전 기준일 수 있어 데이터팀에 19편 목록 전달.~/datasets/scene-mem-benchmark-v1_dc1c8144/. 누출 2행은 플래그 제외. 다음 = 어댑터 재작성 → dry-run → 승인 → 측정(flash-3.7 ≈$60).데이터는 채점 가능 314행 전량, 구조적 결함 없음. 데이터팀에 전할 정정 8건은 전부 문서·메타 수준이다. 병목은 우리 쪽 두 가지 — (a) 방 지도는 릴리즈에 없지만 scene card + tasks.room으로 100% 재구성 가능(집 사실, 정답 아님; 정석은 데이터팀이 meta.rooms를 추가). (b) 마지막 프레임 누출 ≈57%(self)는 데이터 결함이 아니라 "컨텍스트 끝에서 질의" 설계의 귀결이라, 플래그 제외만 하면 self 셀 절반이 사라진다.
측정 규모: 314행 × 5전략 + ingest 100편. 파일럿 단가($1.78/3편)로 flash-3.7 ≈ $60, 오픈 3종은 GPU만. 실행 전 승인 필수.
① 누출 처리 — 제외(현행) / routine 질의 이미지 제거(홀드아웃은 어차피 안 보이고 로봇은 테이블에서 떨어져 있음) / 마지막 task 규칙 셀 별도 표기 · ② control 행 부재를 그대로 갈지(A5 포기) · ③ 방 지도 출처(scene card 자체 생성 vs 데이터팀 meta.rooms 대기).
scripts/build_routine_rows.py를 정식 행 입력으로: answers에 holdout 단어·room(scene card/tasks.room)·surface(규칙 value 표시명)·instances{uid,room,surface}, leak_objects(그 규칙 증거), axes.k_evidence; multi는 leave=[]. 팩커는 폐기. textlog 수납처 표시를 uid 접두사 대신 규칙 value/발화 단어로. 별칭 armchair·shelving unit·coffee table.
type3 미디어 37.7 GB 다운로드 완료 후 tmp/hf_check/routine_leak_e02c1f3d.log에서 214행 누출 수치 확정. 데이터팀 전달 목록: 위 8건 + README 문구 3곳.
원천: tmp/hf_check/inspect_e02c1f3d_routine.{py,log} · routine_leak_e02c1f3d.{py,json} · 로그 claude/260911/analysis-routine_dataset_e02c1f3d.md · 데이터 ~/datasets/scene-mem-benchmark-v1_e02c1f3d/