Index
2026-09-21 — Experiment

execute-state 를 재는 하네스로 — vis-pure KEEP 0회의 원인 진단과 채널 개조 3건

scene_bench 온라인 트랙 | 진단 B(16칸 짝 × 2팔, $2.05) · 결정 D(태그화+재검색) · 상태 슬롯 [now] · KEEP 타일 저장

TL;DR

0 → 18
KEEP 결정 (A→B, 진단 16칸)
p=.0002
부호검정 (13↑/0↓/3=)
0.092
유효 KEEP/턴 (정정 후)
$2.05
진단 API
≈$36
재측정 순증

1 배경 / 목적

이 벤치마크 온라인 트랙이 재려는 것은 execute-state memory — 실행 중 바뀐 세계 상태를 자기 메모리 구조에 반영하고 다시 꺼내 "2개 중 1개는 끝냈다"를 아는 능력이다. 사용자 지적(260920): vis-pure 는 온라인 프레임을 KEEP 해서, tagmem 은 "이 액션을 했다"를 저장해서, 텍스트 노트는 한 일을 기록해서 각자 상태를 남겨야 한다.

앞선 감사(260920-online_plan_find_main §9)에서 find 본 런 6 arm 중 execute-state 채널이 실제로 작동한 것은 tagmem 하나뿐이었다. 이 카드는 그 뒤 후속 조치 — 원인 진단과 채널 개조 — 를 다룬다.

전략채널 실태 (감사 결과)조치
blind대조군, 시드 1줄 불변유지
textlognote: null 강제 — 채널 원천 차단(260909 사용자 결정)결정 A: 보류 — "execute-state 채널 없음" arm 으로 명시
frames-uniform온라인 프레임 정확히 1장(235/235칸) = 현재 뷰 중복, 순증 0방법의 성질, 기록만
rf-v388% 칸 재작성, 100%가 [plan] 줄 삭제, done 체크 1%모델 지시 미준수, 기록만
vis-pureKEEP 계약은 tagmem 과 글자 그대로 동일한데 keep 0.12/칸 · 89% 칸 0장결정 B: 원인 진단
tagmem-r3온라인 노트 6.6줄/칸 · 77% 칸 완료 문장 · 프레임 87% 칸 ≥1장 — 단 태그화·재검색은 안 함(평문 append)결정 D: 태그화+재검색

2 작업 내용

결정 B — 진단 실험 (사용자 승인 ≈$3)

vis-pure 의 KEEP 미사용이 능력 문제인지 계약 프레이밍 문제인지 가른다. 유력 가설: 메모리가 시드 8장으로 꽉 차 시작해서 KEEP 이 "내가 고른 읽기 프레임을 버리는 것"으로 읽힌다.

플래그: SBENCH_KEEP_EVICTION_NOTE=1 (진단 시점 기본 끔 → 본 런 프롬프트 바이트 불변) 추가 문장(KEEP 블록): "Your memory starts full with 8 frames from the context phase. Dropping one of them to record what you just did is expected, not a loss — keep whichever set best explains where things are now." 설계: 짝지은 16칸 × 2팔 — 잡 140189 = A(현행) · 잡 140190 = B(문장 추가), 전용 스냅샷 tmp/keepdiag/src 검증: A팔 프롬프트가 본 런과 바이트 동일, KEEP 기회 117턴/팔, 본 런 기준선 online_kept≥1 3/16칸 주 지표: 턴당 KEEP 율 · online_kept · seed_left / 부지표(검정력 없음): 턴 · pick · SR

예산·규칙은 그대로이고 이미 참인 사실을 명시할 뿐이다. GT 누출 여부: KEEP 규칙 1번이 이미 "집히는 물체·놓인 물체를 남겨라"라고 말하고 있어 목적을 새로 알려주지 않고 비용 인식만 바꾼다. 진단이지 arm 개조가 아니므로 채택은 결과를 보고 사용자가 결정.

결정 D — tagmem 온라인 기록의 태그화 + 예산 초과 시 재검색 (8e5a35a)

src/sbench_exec/online_memory.py note_entry(id, line) 순수 함수. 태그는 읽기 질의와 같은 결정론 태거(query_tags) — 추가 API 0, 출력 스키마 불변 "[t=1] Picked up the pen from the toilet lid in the bathroom." → {obj:[pen], act:pick, room:[bathroom], surf:[toilet]} TagmemNoteSelector 줄 수 ≤ BUDGET_TEXT(12) 이면 전량 통과(fired=0, 프롬프트 바이트 동일), 초과 시 retrieve(always_tail=3) build_note_selector() tagmem 계열만, 나머지 None src/sbench_online/orchestrator.py run_episode(note_selector=), n_seed_lines 고정, rewrite(rf-v3)는 미적용 테스트: 선택기 6 + 오케스트레이터 2 신규. 쓰인 줄은 전부 notes_final 에 남는다(줄어드는 건 프롬프트 노출뿐)

채택 — 옵션 2 + 상태 슬롯 + 타일 저장 (3432dee)

사용자 260920 "execute-state 를 재는 거야, 이게 젤 중요해" 에 따라 축출 문장을 기본 켬으로 전환(SBENCH_KEEP_EVICTION_NOTE=0 이면 260920 이전 프롬프트 바이트 재현). 근거는 성능 부스팅이 아니라 하네스가 만든 조건(읽기 단계가 8슬롯을 다 써 메모리가 꽉 찬 채 시작)을 명시하는 공정성 수정 — 이 문장이 없으면 "채널이 있으나 안 쓴다"를 보고할 수는 있어도 채널 효과를 잴 수는 없다. 이어 사용자 설계로:

① [now] 상태 슬롯: 선택기 반환 = 시드 + (budget-1 안의 과거 줄, retrieve) + [now] 1줄(가장 최근 노트, 턴 도장 제거, 갱신·항상 표시) 결정 D(누적+검색) 위에 얹힘. append 노트 규칙에 "[now] 는 네 현재 상태 — 들고 있는 것·끝난 것·남은 것을 적어라" 추가 ② KEEP 프레임 저장: keep 전략만 모델이 본 exo‖wrist 타일 저장(종전엔 손목 뷰로 판단하고 손목이 빠진 exo 저장) frames-uniform 은 제외(고르는 주체가 결정론 샘플러, 메모리 8칸이 전부 exo). SBENCH_KEEP_STORE_TILE=0 으로 260918 동작 재현

3 결과

진단 B 최종 (짝지은 16칸, 잡 140189 A / 140190 B, 총 $2.05)

지표A(현행)B(축출 정상화 문장 1줄)
턴 합10376
KEEP 결정 합018
온라인 프레임 보관 합014
≥1장 보관 칸0/1613/16
턴당 KEEP 율0.0000.237
seed_left 평균8.00 (손 안 댐)7.12
원인 확정: 짝 Δonline_kept = +0.88 ±0.12, 증가 13 / 감소 0 / 동일 3, 부호검정 p=0.0002. A팔은 103턴 동안 KEEP 을 한 번도 하지 않았다(seed_left 정확히 8.00) — 능력이 아니라 축출 비용의 프레이밍.
런 간 변동: 본 런의 이 16칸 기준선은 ≥1장 3/16 이었는데 A팔은 0/16. A팔을 따로 돌린 것이 옳았다(본 런 값을 대조로 재사용했다면 효과 과소평가).

부수 지표는 n=16 에서 전부 비유의(Δ턴 −1.69±1.23 · Δpick −2.00±1.33 · Δ성공 −0.06±0.11). 방향은 B가 효율적이지만 효율 효과는 본 재측정이 잴 것이다.

정정 — 새로 연 KEEP 의 61%는 다시 읽힐 수 없는 자리에서 일어난다

값
B팔 KEEP 18건 중 마지막 done 턴11건 (61%)
턴당 전체 KEEP0.237
턴당 유효 KEEP (이후 턴에서 읽힘)0.092
유효 KEEP 중 직전 턴이 '성공한 pick'2건

0 → 0.092 는 여전히 실질 변화(A팔 0/103턴)지만 find 는 평균 4.8턴이라 채널을 열어도 쓸 기회가 적다.

재측정 범위와 비용

대상칸처리
restore 4전략(blind·textlog·frames·rf-v3)69행 완료(이후 95행)유지 — 프롬프트 바이트 동일
restore vis-pure17행 완료(이후 23행)폐기·재측정 (백업 tmp/plan_main/rows_oldprompt/)
restore 잔여395새 스냅샷 src_w2 로 이어서
find 4전략821행유지
find vis-pure287재측정 (2샤드)
find tagmem302 (옛 124행 폐기)재측정 (D + 축출 문장 + [now])

비용: restore 잔여 $73(그중 vis-pure 재지출 순증 ≈$5) · find vis-pure $21 · find tagmem $26 = $120, 이 결정으로 추가되는 돈은 ≈$36. Letsur 일일 캡 $100 이라 이틀에 나눠 쓴다. 발동 범위(결정 D 선택기): 예산(12줄)을 넘는 칸 = find 13%(124칸 중 16) · restore 46%(52칸 중 24) — find 의 87% 는 프롬프트가 종전과 같다. 단위 테스트 1088 passed(integration 제외).

4 Takeaway

의미

1) "vis-pure 는 execute-state 채널이 있으나 안 쓴다"는 모델 능력이 아니라 프롬프트 프레이밍 하나의 결과였다. 문장 1줄로 0/16→13/16칸이 바뀌므로 개조 전 표의 vis-pure 는 "채널 없는 arm"으로만 읽어야 한다.

2) 채널을 열어도 find 는 턴이 짧아(4.8턴) 유효 KEEP 이 0.092/턴에 그친다. execute-state 효과는 사슬이 2단계 이상인 restore(pick→carry→place)에서 재야 한다 — 그래서 restore 본 런을 새 스냅샷으로 재시작했다.

3) 이 개조로 arm 축이 정리된다: blind·textlog=없음, frames-uniform=현재 뷰 중복, rf-v3=텍스트 상태(재작성), vis-pure=이미지 누적(KEEP), tagmem=태그 DB+텍스트·이미지 상태 슬롯. 방법론상 [now] 상태 슬롯은 읽기 writer 규칙(STORE 누적뿐)에 없는 온라인 전용 기제지만, 읽기 트랙엔 온라인 구간이 없어 "실행 상태를 무엇으로 표현할 것인가"는 어차피 온라인 전용 설계 결정이다.

5 Next Steps

미해결 한계

진단 n=16 이라 효율 지표(턴·pick·SR)는 검정력이 없다. 개조 후 vis-pure·tagmem 이 실제로 restore 에서 turn/pick 을 줄이는지는 본 재측정 결과가 필요하다. textlog 는 oracle 로그 복원(결정 A)을 보류해 "execute-state 없음" arm 으로 남는다 — 논문 서술에서 blind 와 같은 지위로 명시해야 한다.

다음 작업

재측정 12잡(restore 8샤드 · tagmem find 2샤드 141430/141431 · vis-pure find 2샤드 141432/141433, 전부 tmp/plan_main/src_w2) 완주 후 scan_online_turns.py --family restore → aggregate_online_efficiency.py --family restore 로 같은 LOO 효율 분석을 restore 에 적용. 가설: 상태 채널을 쓰는 vis-pure·tagmem 이 restore 에서 든 채 재-pick 과 낭비 턴을 blind·textlog 대비 줄인다(현재 find 에서는 차이 없음).