Index
2026-05-20 — Progress

Defect-9/10/11 Resolver Fix — 858/858 FULL PASS + Oracle LoRA 학습

memer | Sub-project A §9 완료 체인

TL;DR

build_scene_mem_v2.py resolver _try_build에 doorless/non-target rds 억제 TDD 구현 — defect-9(over-skip 577/858), defect-10(A2 target grounding 파괴), defect-11(doorless over-skip 129) 세 결함 동시 해소. commit ef0fcd5. job 5475 kept 858/858(baseline parity). §9-2 정량화: train 2604 중 1946(75%) records에 grounded Open ADDED = 사용자 영상 버그(닫힌 fixture 앞 Open 누락) 수정 전반 입증. Oracle LoRA 학습 완료: eval_loss 0.0087.

858/858
kept (5475)
75%
Open grounded
0.0087
oracle eval_loss
382
pytest passed
ef0fcd5
commit

1 배경/목적 (왜)

이전 세션(260519-defect9_a2_defect10.html)에서 defect-9(858 full build가 577/858만 kept, SortingCleanup 152 + FoodCleanup 129 over-skip), defect-10(A2 fix가 RestockBowls TARGET cabinet door step을 소멸시킴)이 발견됐고, "A2 revert + resolver _try_build 수정이 올바른 fix"까지 결론됐다.

본 세션에서는 해당 fix를 실제 TDD로 구현하고, 이 과정에서 새로 발견된 defect-11(doorless opencabinet TARGET 129 over-skip)까지 포함해 세 결함을 동시에 해소한다. 858/858 게이트를 통과해야만 §9-4 oracle LoRA 학습과 B1 side-by-side를 진행할 수 있다.

이전 상태: defect-9(kept 577/858, −281), defect-10(A2가 orable TARGET grounding 파괴), defect-11 미발견. 858 full build BLOCKED.

2 작업 내용 (어떻게)

Resolver Fix — build_scene_mem_v2.py 3곳 수정 (+75/-13)

Defect-11 Fix — doorless 억제 (사용자 승인 후)

5417 job(729/858 kept) 모니터링 결과 FoodCleanup 129 여전히 skip. 근본원인: eval_spec fixture.joint_names=[](opencabinet, 문 없음) → oracle target_doors 미생성 → generic rds("cabinet door") 비적용인데 _try_build가 "타겟 자신 door ungroundable"로 over-skip.

helper _test_target_is_doorless(test): doorless = fixture.joint_names 키 present-and-empty (키 absent = unknown → 보수적 not-doorless) 실데이터 opencabinet은 [] 명시 → doorless True resolve_subtasks_with_doors: if is_target and doorless → suppress (no-guess) _try_build: skip 조건 += "and not _test_target_is_doorless(test)"

초안 헬퍼(not .get("joint_names"))가 기존 golden test_target_manifest_absent_noun_returns_runtime_error(joint_names 키 없음 = unknown) 깨뜨림 → golden 무수정, 헬퍼 엄격화로 근본정정.

Orchestrator 독립검증 (직접 재실행)

3 결과 (수치)

Job 5475 — 858 full build (defect-11 fix 포함)

측정 항목defect-9 후(5317)resolver fix(5417)+defect-11 fix(5475)
kept577/858 (67.2%)729/858 (85%)858/858 (100%)
skip_res281129 (FoodCleanup만 잔존)0
train / val1680 / 1182244 / ~1572604 / 189 (baseline 정확 일치)
baseline byte-safe

§9-2 — Before→After 정량화 (orchestrator 독립 재카운트, baseline-aligned 2604/189)

Open ADDED ≥1 = 1946/2604 (75%) records — 닫힌 fixture 앞 누락 Open이 2604 학습 데이터 중 75%에 grounding 추가. 사용자가 B1 영상에서 목격한 버그(암묵적 Open 누락)의 수정이 데이터 전반에 입증.
항목수치해석
Open ADDED ≥11946 / 2604 (75%)닫힌 fixture 누락 Open 복구
Open REMOVED ≥1746이미-open / ungroundable / doorless 억제
net door: train9191 → 9230 (+39)baseline→oracle 순증가
net door: val621 → 633 (+12)동형
turns delta69848 → 65722 (−4126)DoorStateMachine 중복 Close 통합 (설계 동작)

858-scale Ground-Truth Spot-Check (5/5 PASS)

§9-3 — validator + pytest + commit

validator oracle task_subtasks: VALID (162 tasks, 27 needs_review). 전 관련 pytest 382 passed, 1 skipped. commit ef0fcd5 — 5파일(코드+테스트+분석/context), data 불변.

§9-4 — Oracle LoRA 학습 (job 5571)

항목oracle (job 5571)baseline (260516)
eval_loss0.008680.0066
token_acc0.9976~0.998
학습 시간43분, 3 epoch~유사
checkpointruns/ckpts/scene_mem_v2_oracle_lora_260519_091016/checkpoint-123별도 보존
baseline ckpt 영향없음 (SMV2_DATA override + 별도 OUTPUT_DIR)
eval_loss 비교(0.0087 vs 0.0066)는 데이터 구조 변경(door turn −4126) 때문에 직접 비교 부적절. 진짜 비교 지표는 B1 task accuracy.

4 Takeaway

Sub-project A 데이터 파이프라인 acceptance 게이트 통과. defect-9(붕괴 577)·10(A2-kill grounding)·11(doorless over-skip) = 한 뿌리(multi-instance cabinet 추측불가)의 세 양상이 resolver 라우팅 정밀화로 동시 해소됐다.

핵심 교훈 — 광역 표본 없이 narrow spot-check만으로는 회귀 못 잡음

80-scenario 게이트가 front-loaded combo_002/012 표본만 커버해 후반 클러스터 회귀(SortingCleanup/FoodCleanup)를 놓침. 858-scale spot-check가 결정적 게이트. 이후 게이트는 반드시 broad 858-scale 재카운트를 포함해야 함.

데이터 1946/2604(75%)에 grounded Open이 추가됐다는 것은 "수치가 올랐다"가 아니라 물리적으로 잘못된 학습 데이터를 고쳤다는 의미. B1 m1 점수 변화와 무관하게 데이터 정확성 향상이 목표의 본질.

5 Next Steps