TL;DR
- 성능은 좋아지는 게 맞다 — loc .475 → .614, 기권 .158 → .030. 짝 비교 개선 20 / 악화 6, 부호검정 p=0.0094. 최고 비오라클(vis-pure .584)을 넘는다.
- 🔴 개선의 원천은 프롬프트가 아니라 하네스 결함 제거다. 프롬프트 v5만 켜면 −.069로 악화되고, 축출을 없애야 +.208이 나온다.
- 기제: v5 프롬프트가 이미지를 더 많이 저장시키니 축출이 더 심하게 문다 — 생존 이미지의 99%가 편 마지막 1/3, 스팬 .18. distractor 커버리지가 v1(.474)보다 낮은 .333까지 떨어진다.
- 진단대로 커버리지만 움직였고 읽기 변환율은 불변(.74→.78), 검색 실패는 세 조건 모두 0%.
- 병목이 관찰 채널 → 행동 채널로 이동했다. D2는 vis-pure와 동률(.776), 이제 D1이 최약점(.525 < frames .575, 오라클 .850).
1설계 — ingest 한 번으로 기여를 가른다
| 조건 | 쓰기 프롬프트 | 이미지 축출 | 읽기 |
| v1 (아카이브 재사용, 비용 0) | v1 | 8장, 오래된 것부터 | v2 |
| B | v5 | 8장 (사후 재현 --tagmem-sim-write-cap 8) | v5 |
| A | v5 | 없음 | v5 |
편 선정은 아카이브 ∩ 발행본 95편에서 seed 고정 랜덤 20편. v1 수치는 아카이브를 그대로 재사용해 같은 행끼리 짝 비교했다. B는 A의 entry를 --tagmem-graph로 재사용하므로 ingest는 한 번뿐이다.
2점수 — 같은 101행 (hidden 제외)
| 조건 | loc | place | 기권 | target | distractor |
| v1 | 0.475 | 0.376 | 0.158 | 0.432 | 0.509 |
| A (v5 full) | 0.614 | 0.495 | 0.030 | 0.500 | 0.702 |
| B (프롬프트만) | 0.406 | 0.297 | 0.257 | 0.523 | 0.316 |
v1 → A 개선 20 / 악화 6 / 동률 75 부호검정 p=0.0094
v1 → B 개선 9 / 악화 16 / 동률 76 부호검정 p=0.2295
3🔴 기여 분해 — 프롬프트만 풀면 악화된다
v1 → B (프롬프트 v5만, 축출 유지) loc .475 → .406 = −.069 (비유의)
B → A (축출 해제) loc .406 → .614 = +.208
순효과 = +.139
기제: v5 프롬프트는 이미지를 더 많이 저장하게 만든다(편당 8 → 43장 emit). 축출이 그대로면 더 많이 버려지고, 살아남는 8장이 더 심하게 뒤로 쏠린다.
| v1 | B | A |
| image entry / 편 | 8.0 | 8.0 | 43.1 |
| 이미지 마지막 1/3 | 0.72 | 0.99 | 0.30 |
| 편 대비 스팬 | 0.39 | 0.18 | 1.00 |
| distractor 커버리지 | 0.474 | 0.333 | 0.789 |
| 기권 | 16/101 | 26/101 | 3/101 |
B의 distractor 커버리지 .333은 v1(.474)보다도 낮다. 게이트와 축출은 상호작용하며, 축출을 놔둔 채 게이트만 푸는 것은 순손해다.
논문 서술에 미치는 영향
이 결과는 "ours를 개선했다"가 아니라 "tagmem v1 수치는 쓰기 축출 결함 하의 것이었고, 그 결함이 전략의 이미지 채널을 통째로 무력화했다"로 써야 한다는 뜻이다. 개선분의 전부가 하네스 수정에서 온다.
4병목 분해 — 진단대로였고, 읽기는 손댈 필요가 없었다
| v1 | A |
| 기권 원인 W(쓰기) / R(검색) / U(사용) | 14 / 0 / 2 | 3 / 0 / 0 |
| 커버리지 distractor / target | .474 / .591 | .789 / .659 |
| 담았을 때 loc (distractor / target) | .741 / .577 | .778 / .621 |
| 못 담았을 때 loc | .300 / .222 | .417 / .267 |
점수 상승의 실체는 "담음" 그룹이 27행 → 45행으로 늘어난 것이다. 읽기 변환율은 .74 → .78로 사실상 그대로고, 검색 실패는 세 조건 모두 0%다. 진단이 예측한 기제가 그대로 나왔다.
5🔴 남은 병목 = D1 (내가 옮긴 것)
| 셀 | blind | textlog (oracle) | frames | vis-pure | tagmem v1 | v5 (A) |
| 전체 (101) | .267 | .475 | .554 | .584 | .475 | .614 ✅ |
| D2 남이 옮김 (49) | .286 | .224 | .673 | .776 | .571 | .776 = |
| D1 내가 옮김 (40) | .325 | .850 | .575 | .525 | .425 | .525 ❌ |
읽기 규칙이 "an object's CURRENT location is given by its LATEST entry"인데, 이미지가 8 → 43장으로 늘면서 그 물체를 나중에 스쳐 본 관찰 entry가 LATEST를 차지해 실제 배치 사건을 밀어냅니다.
| 셀 | 정답 자리를 담은 행 | 그 entry가 그 물체의 마지막인 행 |
| D1 | 21/40 | 13/40 (8행이 밀림) |
| D2 | 36/50 | 30/50 |
내적 정합성: target loc이 B(.523) > A(.500) > v1(.432)로, 이미지가 적을수록 target이 오히려 낫다. 검색된 entry 구성도 D1에서 조작 act 3.4 vs 관찰 act 7.4로 관찰이 압도한다. 두 신호 모두 같은 설명을 가리킨다.
6사전등록 예측 대조 & 버그
| # | 예측 | 실측 | |
| P1 커버리지 distractor | ≥.65 | .789 | ✅ |
| P1 커버리지 target | ≥.70 | .659 | ❌ |
| P2 이미지 마지막1/3 / 스팬 | ≤.45 / ≥.80 | .30 / 1.00 | ✅ |
| P3 find loc, vis-pure 초과 | 초과 | .614 vs .584 | ✅ |
| P8 ingest 비용 +20~40% | 증가 | +0% ($0.097 vs $0.100) | ❌ (유리한 쪽) |
버그 1건 — 조건 B에서만 발현. _object_timelines의 PREV-HOP이 "그 물체의 마지막보다 이른 entry"를 찾는데, 한 물체의 entry가 전부 같은 청크면 그 목록이 비어 IndexError로 샤드가 죽었다. A는 축출이 없어 안 걸렸고 B(sim-cap)에서 발현 — 구판 축출 환경에서만 터지는 경로라 A만 돌렸으면 못 봤다. if not before: continue로 수정 + 회귀 테스트(18 passed).
7Next
- D1 수정안 (읽기 전용, ≈$0.8) — READ_GUIDE /
_latest_notes의 "마지막 언급"을 "마지막 위치 진술"로 바꾸고, 배치 사건(act=place/drop)이 관찰(act=look)보다 우선하도록. ingest 재사용이라 읽기만 다시 돌리면 된다. 사용자 승인 필요.
- P1 target 미달(.659)도 같은 뿌리로 보인다 — 옮긴 물체의 최종 자리를 특정하는 문제.
- 확장 판단: restore 20편(goal image가 걸리는 가족) · resume(
n= 회차가 실제로 붙는지 — find 20편에선 1건뿐).
- 본 측정 예산은 예상보다 싸다(ingest 증가 0%) → 스펙 §5의 $55–70은 상향 근거 없음.
재현:
python3 tmp/pilot_v5_compare.py A='tmp/tagmemv5_A_s*/results.json' B='tmp/tagmemv5_B_s*/results.json'
잡: A=117109 (117093은 extra 선점 → own 재제출) · B=117124
로그: claude/260910/exp-tagmem_v5_pilot.md · 설계 docs/superpowers/specs/2026-09-10-tagmem-v5-design.md
8추가 — v6(인스턴스 번호 + 배치 결과 규칙) 조건 C: 점수는 올랐지만 기제가 안 먹혔다
| v1 | A (v5) | C (v6) |
| loc (101) | .475 | .614 | .663 |
| D1 (40) | .425 | .525 | .575 (= frames, 오라클 .850) |
| D2 (49) | .571 | .776 | .857 |
| 인스턴스 번호 표현 | — | 0.2% | 1.4% (예측 ≥50%) |
v1 → C 개선 21 / 악화 2 p=0.0001
A → C 개선 11 / 악화 6 p=0.33 ← 비유의
기제 미작동. D1에서 A✗→C✓로 뒤집힌 5행의 C DB에 인스턴스 번호 0 · drop 0. OUTCOME 규칙은 오히려 writer를 보수화시켰다(배치 사실 363 → 223, target 담았을 때 loc .621 → .571).
writer 확률성. 같은 편·같은 프레임의 두 실행이 적은 배치 사실의 Jaccard 0.44 — 약 56%가 실행마다 다르다(ingest temp>0). A↔C의 ±.05 차이는 이 변동 안이다. 확립된 개선은 축출 해제뿐이고, 프롬프트 비교는 ingest 시드를 늘리지 않는 한 노이즈 아래다.
결정
v6 미채택. 논문 표에는 v1(결함) → v5(축출 해제)만. 인스턴스 구분은 지시가 아니라 코드(같은 카테고리 재등장 시 결정론 #k)로 가는 것이 다음 판 후보. 파일럿 누계 $7.97.