Index
2026-05-18 — Analysis

scene-mem Sub-project A — V3B target_doors 배선 acceptance 게이트

memer | 에피소드 초기 door 상태 grounding · orchestrator 독립검증

TL;DR

80/80
kept (was 4/60)
3/3
door spot-check
15
pytest passed
0
baseline byte Δ

1 배경 / 목적

사용자가 B1 렌더 영상에서 본 결함: "cabinet이 닫혀 있는데 열고-닫으라는 암묵 step이 분해에 빠져 있다". 이를 고치는 Sub-project A = 에피소드의 실제 초기 door 물리상태로 분해를 grounding(robocasa env 인스턴스화 → door 술어). 이번이 8차이자 마지막 결함.

결함-8: 한 scene에 cabinet이 ~45 인스턴스. 그 중 하나가 메모리-probe의 TARGET이면, by-noun 판정은 "어느 인스턴스인지 모름(undetermined)"으로 떨어져 scenario 전체를 skip → 60-scenario 빌드에서 kept 4/60 (58 skip_res), 데이터셋 사실상 붕괴.

설계 §4c는 oracle이 eval_spec.json 자신의 fixture.joint_names타겟 인스턴스만 정확 grounding한 target_doors를 emit하도록 정의했으나, resolver의 TARGET 경로가 이를 소비하지 않아 그 정밀 정보가 버려지고 있었다.

2 작업 내용 / 접근

서브에이전트(a410e54072a69803d)가 path A 수정 수행 — commit e226113:

scripts/build_scene_mem_v2.py (+59) _target_covers_noun(noun, test, scn) # target_doors[test_id].fixture_type == noun _seed_machine_with_target(scn, test) # by-noun 시드 후 target_doors로 TARGET override _try_build / resolve_subtasks_with_doors # TARGET이 target_doors로 커버 → undetermined여도 skip 안 함 scripts/init_state_oracle.py (+4) _fixture_class_noun: Stove → "oven" # Stove XML 변형의 오븐 도어조인트 undetermined 누출 제거 tests/test_decomposition_regrounding.py (+157) # 3 신규 테스트

검증 원칙 (왜 직접 재실행했는가)

본 세션에서 서브에이전트 self-report가 8회 부정확(예: "OvenBroilFish env task 아님"→실제 41건, "build smoke OK"→1-scenario만 봐 60-scenario 회귀 누락). 따라서 보고를 결론으로 쓰지 않고, orchestrator가 ① 내 소유 모니터로 raw build 로그 직접 read, ② manifest↔eval_spec joint byte 대조, ③ 분해 3-spot-check vs 초기상태, ④ baseline sha256, ⑤ pytest 직접 재실행 — 모두 통과한 것만 채택.

3 결과 (수치)

3-1. 빌드 회계 (job 5286 COMPLETED, 내 모니터가 raw 로그 직접 read)

지표결함-8 (이전)V3B (e226113)
total scenarios6080
kept4/6080/80 (100%)
skip (resolution)580
skip (needs_review)0
train / val samples4 / —223 / 15

3-2. joint 식별 정확성 (spot-check #4 — byte 대조)

combo_002_L29_S48_0006 RestockBowls_obj1:

항목eval_spec.json (benchmark GT)manifest.target_doors
fixture.typecabinetcabinet ✅
fixture.instancecab_6_main_group(cab_6 joint) ✅
joint_names[cab_6…leftdoorhinge, …rightdoorhinge]byte-identical
state(물리 joint 읽음)closed
45개 cabinet 중 추측 0. eval_spec 자신의 joint로 타겟 cab_6만 grounding, 나머지 44개는 undetermined no-guess로 정확 분리 (§4c 사양 그대로).

3-3. door step 정확성 (spot-check ×3 — 분해 vs 초기상태)

#케이스초기상태emit 결과
1closed multi-instance TARGET cabinet (cab_6, combo_002)closedOpen the cabinet door → … → Close the cabinet door ✅
2open TARGET freezer/fridge (동 에피소드 MoveFridgeToFreezer)openspurious Open 없음, instruction대로 Close만 emit ✅
3combo_012 LoadPreparedFood (다른 env task)fridge open / dishwasher closedfridge Open억제+Close / dishwasher Open→Close / 비-타겟 multi cabinet → §7 verbatim (추측 0) ✅

3-4. 불변식 / 게이트

baseline sha256 (핸드오프 기록값과 일치 = 불변) data/scene_mem_v2/train.jsonl 28b4bc75… data/scene_mem_v2/val.jsonl 37590604… data/task_subtasks.json 1e1db30d… data/manual_subtasks.json 9c5bf23c… pytest tests/test_decomposition_regrounding.py → 15 passed in 1.02s (memer env, 직접 실행) HEAD = e226113 (--amend/hook-skip 없음, 작업트리 코드 변경 clean) 858 fresh regen → job 5305 RUNNING (n32, target_doors 포함 manifest 산출)

4 Takeaway

Sub-project A 8차 결함 체인 전부 종료. multi-instance cabinet TARGET이 이전엔 데이터셋을 붕괴(4/60)시켰으나, eval_spec joint 기반 정밀 grounding으로 80/80 kept이며 door step이 물리적으로 정확함을 ground-truth 대조로 입증. baseline·HF byte-불변, 깨진 데이터 0. no-silent-wrong 불변식(비-타겟 multi-instance는 추측 대신 §7 verbatim)이 매번 작동.

5 Next