experiment journal · 2026-07-09 · RQ 카드
카드 하나 = 질문 하나. 판정과 핵심 숫자는 전부 실제 아티팩트
(runs/stageB_v3/logs/*.ledger.jsonl, 런 final, M1 요약 JSON, 결정적 하네스 재실행)에서
검증한 것만 적었다. 파이프라인의 각 노드가 어디서 뛰는지는
pipeline 페이지 참조.
실제 LLM도, 라이브 게임도, fork도, oracle도 없는 밀리초 단위 토이 하네스
(ttso/eval/stage_a_harness.py)로, 새로 구현한 루프 조각이 원리적으로 작동하는지 먼저
게이트한다. 아래 숫자는 하네스를 이 페이지 작성 시점에 재실행해 얻은 결정적 출력 그대로다.
증거만 보는(타깃 룰을 결코 못 보는) 마이너가 부분적으로 옳은 mechanic을 만들어 store에 넣는가?
wandb ttso-A1-create
partial judge가 그 mechanic을 0보다 크게 채점하고, Beta credence가 replay에 더블카운트 없이 누적되는가?
wandb ttso-A2-eval
잔차가 0으로 내려가고, 경쟁 mechanic 집합은 붕괴하지 않으며, compress와 add 중 뭘 택해야 하는가?
wandb ttso-A3-loop
stub wake가 확정된 세계모델을 회수해 mismatch()로 오류를 국소화하고, 그 모델 위의 계획으로 토이를 실제로 깨는가?
wandb ttso-A4-use
같은 예산(ft09, 30라운드, gpt-5.5)에서 sleep 루프를 켠 arm(on)이 끈 arm(off)보다 레벨을 더 깨는가 — fork 없이?
| run | levels / 30R | actions | RHAE | fork | ledger: park / confirm / drop / reject / accept |
|---|---|---|---|---|---|
B1_on_s0 | 1 | 35 | 5.48 | 0 | 2 / 1 / 0 / 7 / 3 |
B1_off_s0 | 1 | 33 | 1.27 | 0 | — (sleep 없음) |
B1_on_s1 | 3 | 79 | 21.30 | 0 | 3 / 2 / 0 / 11 / 6 |
B1_off_s1 | 2 | 87 | 7.09 | 0 | — (sleep 없음) |
wandb ttso-B1-discovery · data runs/stageB_v3/logs/B1_*.{log,ledger.jsonl}
라운드 예산을 60으로 늘리면 sleep-on arm이 ft09를 얼마나 깊이 들어가는가?
| run | round | levels | actions | sleep 발화 | ledger: park / confirm / drop |
|---|---|---|---|---|---|
B3_on_s0 | 50 | 1 | 128 | 9 | 4 / 3 / 1 |
B3_on_s1 | 50 | 2 | 82 | 6 | 4 / 1 / 2 |
wandb ttso-B3-clear · data runs/stageB_v3/logs/B3_*.{log,ledger.jsonl} (라이브)
package가 재주입한 브리핑을 wake 에이전트가 인용하고, 규칙으로 채택하고, 행동을 바꾸는가 — 아니면 장식인가?
브리핑 arm 응답 원문 발췌 (/tmp/m1_replies.jsonl):
b1r9-n1/A: "HYPOTHESIS: ACTION6 on a large colored macro-tile toggles/repaints
the whole tile between the two main colors. ..."
b1r6-n1/A: "HYPOTHESIS: ACTION6 on a macro-tile cycles/toggles that whole tile
between the two main colors; ..."
b1r9-n0/A: "EXPECT: ACTION6 on one target macro-tile will recolor that whole
tile/component; ..."
print()로 내보내는데 채점기는 reply 본문만 파싱해 expect-log가 비어 있었다. stdout까지 파싱하도록 수정(커밋 a9bd619).data /tmp/m1_summary.json + /tmp/m1_replies.jsonl · harness ttso/eval/m1_reference_rate.py
좌표 하드코딩을 잡으려고 넣은 generality critic을 거부 게이트로 배선했더니, sleep이 mechanic을 하나도 확보하지 못했다.
774e893 원문: “The veto starved sleep of every mechanic.”ttso/sleep/sleep.py:692 _generality_critique: “GUIDANCE, NOT A GATE”).sleep#0 fp a882f2ec6f "advantage_on_union=0.6216>0 at mine time
-> PARKED for post-park confirm (not yet committed)"
sleep#1 fp a882f2ec6f "CONFIRM advantage_on_union=0.9086>0 on 4
post-park transition(s) the generator never saw -> promote"
commit 774e893 (2026-07-09 20:15) · ledger runs/stageB_v3/logs/B3_on_s0.ledger.jsonl
“무누수”라 믿던 파이프라인에서 게임 동역학 어휘가 세 표면을 타고 새고 있었다.
commits 859dc59 → 83ab400 → a921b9c (설계 → 표면 1·2 → 표면 3)
공통 교훈: 두 실패 모두 “코드가 통과한다”와 “시스템이 배운다”는 다른 명제라는 것. 게이트는 살아 있는 분포(실제 LLM이 쓰는 룰의 모양)에 대고 검증해야 하고, 누수는 프롬프트 상수만이 아니라 시드·모드 문자열·브리핑 렌더러까지 에이전트가 읽는 모든 표면을 스윕해야 잡힌다.