CLAUDE.md 관례대로 세션 로그 신설 + 압축 요약 추가. 6라운드 재검증 결과 16건 추가 발견(9→2→3→2→0→0)으로 수렴 종료. 직전 세션이 "수렴"으로 끝낸 지점에서 나온 것이고, 그중 1건은 문서 정합성이 아니라 실제 의사코드 결함(retractFrom의 nil 가드). 감사 사각지대 둘을 다음 라운드용 일반 교훈으로 기록: 1. 정정 배너를 달면 그 배너가 부정하는 본문 문장까지 같은 커밋에서 고쳤는지 확인 — 직전 감사가 CLAUDE.md 헤더에만 배너를 달고 본문 bullet은 그대로 둔 게 이번 최대 발견의 원인 2. 영역 분할 병렬 감사는 "아무 영역에도 안 속한 파일"을 통째로 빠뜨림 — HUMAN_TODO.md가 6라운드 동안 한 번도 안 열렸고 하필 사람에게 가장 중요한 문서였음. 레포 루트 파일 목록으로 커버리지부터 체크할 것 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y6hzeUi5QdLPEk69B6cXFa
7.5 KiB
2026-08-13 여덟 번째 세션 — 직전 6라운드 감사를 손으로 재검증(서브에이전트 없이)
배경
직전 일곱 번째 세션이 병렬 서브에이전트 5개씩 6라운드를 돌려 "수렴"으로
종료했음(session/2026-08-13-07-corpus-audit-six-rounds.md, 커밋
9f9e83b/1aa01c6/b228efc/91fd7b8/6e097c9/8569e57). 사용자 요청:
"정확성을 검사하고, 네 손으로 지금 상태의 정확도를 확인해. (...) 뒤집혀 필요 없어진 내용은 적절히 archive 로 옮기고, stale 없게 문서를 모두 업데이트해도 좋아. 서브에이전트 없이 직접 검증하는게 좋을거야. 맥락을 순차적으로 처리해. 서브에이전트를 쓰면 맥락이 깨지고 토큰이 많이드니까"
즉 **"감사가 수렴했다는 주장 자체를 검증"**하는 메타 라운드. 방법도 지정됨 — 에이전트 위임 없이 메인 컨텍스트에서 순차 처리.
방법
에이전트 병렬 대신 읽기 → grep 교차검증 → 손 트레이싱 순서로 진행:
- 세션 로그와 커밋 6개를 먼저 읽어 "무엇을 고쳤다고 주장하는지" 파악
- 그 주장을 실제 파일로 확인(배너 4개, 포인터 분포, STATUS 분류 등)
- grep으로 같은 클래스의 잔존 사례를 전수 스윕
- 의사코드는 손으로 케이스를 대입해 트레이싱
라운드마다 발견 즉시 수정·커밋, 새 발견이 0이 될 때까지 반복(6라운드).
라운드별 발견
1라운드 (d3f8c4d, 9건) — 가장 중요한 발견은 직전 감사가 헤더에
정정 배너만 붙이고 본문은 안 고친 패턴. CLAUDE.md "지금 할 일" 1번
본문이 여전히 "스파이크 20개 중 19개를 안 돌려봄"(사실은 여섯 번째 세션에
런타임 12개 전원 통과), "19는 재작성 대기"(사실은 완료·통과), "설계는
더 이상 안 막힘"(실측이 0-Y를 염)이라고 서술 중이었음 — 항상 로드되는
진입점이라 파급이 가장 큼. 같은 stale이 question.md 2번,
pre-implementation-audit.md에도.
Slot 파괴→언마운트 전환 미반영도 6곳 추가 발견 — slot-plan.md 최상단
"상태" 줄의 retract=폐기(4라운드가 같은 사유로 다른 곳을 고쳤던 것),
reconcile이 rawRemove를 부른다는 서술 3곳, question.md 확정
요약표, README.md slot 행(여섯 번째 세션 전환 전체가 색인에 없었음).
archive 이전: archive/slot-discard-no-portal-reversed.md 신설,
slot-plan.md 1982→1919줄.
2라운드 (09b22d0, 2건) — research/dispatch-redispatch-diff-plan.md
6절(0-Z 확정 시 파일별 반영 목록)이 base 4개만 나열하는데, 같은 ⚠️ 배너를
단 architecture.md/ROADMAP.md가 빠져 있었음 — 목록대로만 옮기면 이 둘이
옛 모델로 남는 실제 핸드오버 갭. 특히 architecture.md는 모든 세션이 "먼저
읽으라"는 진입점.
전수 검증으로 문제 없음을 확인한 것: 문서 간 파일 참조 152개 링크(라이브
문서 깨진 링크 0건 — 깨진 건 전부 session/·initreq/·archive 히스토리 안),
luau-test README/STATUS ↔ 실제 파일명, Handler 계약 정의부, Relate API
arity, Dispatch.process/retractFrom 손 트레이싱(점유 마커 선행,
#list hole 없음, hint가 target 인덱스에만, index>#list일 때 no-op).
3라운드 (316ed6a, 3건) — HUMAN_TODO.md가 6라운드 동안 한 번도
안 열렸던 게 드러남. 헤더가 "설계 질문은 안 봐도 진행에 지장 없고"라고
단언하고 3번 항목도 "막고 있는 항목은 없음"으로 끝나는데, 0-Y/0-Z는 M0를
실제로 막고 있고 둘 다 사용자가 직접 판단하겠다고 명시 이관한 항목 —
즉 정확히 이 문서가 담아야 할 성격인데 빠져 있었음. 사람이 이 문서로
"지금 내가 뭘 해야 하나"를 판단하면 아무것도 안 해도 되는 것처럼 읽힘.
4번(0-Y/0-Z)·5번(Studio 전용 10의 남은 A-1/A-2/B/C) 신설.
"열린 질문 없음" 자기모순 2건도 — tag-plan.md는 이미 캐비엇을 달았는데
같은 처리가 tween-plan.md(Animate가 0-Y 직접 영향 대상)와
bind-system-plan.md("남은 건 순수 API 표면 이름뿐"인데 자기 문서의 계약
둘이 열려 있음)엔 없었음.
4라운드 (1221512, 2건, 그중 1건은 실제 로직 결함) —
Dispatch.retractFrom이 if retractor then ... end 가드로 감싸고 있어서
핸들러가 계약을 어기고 nil을 반환해도 조용히 넘어감. 그런데 문서 두
곳은 "생략하면 attempt to call a nil value로 크래시"라고 서술 — 그
가드 때문에 크래시조차 안 나는 게 실제였음. 더 나쁜 건 진짜 결과:
list[index] = nil로 배열에 구멍이 나 (a) #list가 Lua 명세상 미정의가
되어 순회 시작점이 어긋나고 (b) 그 자리가 비어 보여 Dispatch.process의
점유 체크를 통과 → 소유권 충돌 감지가 조용히 꺼짐(0-Z가 다루는 바로
그 안전망). 가드에 걸리는 유일한 경우가 계약 위반뿐이므로 프로젝트의
"즉시 error" 원칙대로 전환, 서술 두 곳도 실제 실패 모드로 정정.
CLAUDE.md "계획 문서 구조"에 luau-test/·audit/가 통째로 누락돼
있던 것도 추가(지금 스파이크 상태의 소스와 0-Y의 근거로 가는 길이
진입점 지도에 없었음).
5~6라운드 (커밋 없음) — TagHandler 의사코드를 4개 시나리오로 손
트레이싱(같은 객체 재발행 → 조기 반환이 holders를 정확히 유지, A→B
부분 겹침 → 실제 RemoveTag/AddTag가 변경된 이름에만, 여러 위치 겹침
→ 참조 카운트 정확, A→nil → 전부 제거) — 정확함. 수치 주장 전수
대조(우선순위1/2/단순화후보 = 11/11/2, 실제 헤딩 수와 일치), 우선순위1
11개 전원 본문에 해소 표시 확인, 우선순위2/3의 열린 4건은 게이트가 아니라
문서 주장과 모순 없음. 이번 세션에 안 열었던 research 8개 문서 스캔 —
파괴/portal 언어 잔존은 전부 [2026-08-13 정정] 주석이 이미 달려 있음.
새 발견 0건.
종료 판단
발견 추이 9 → 2 → 3 → 2 → 0 → 0. 직전 세션이 "수렴"으로 종료한
지점에서 16건이 더 나왔다는 게 이번 라운드의 결론이고, 그중 1건은
문서 정합성이 아니라 실제 의사코드 결함(retractFrom의 nil 가드).
이번 라운드가 드러낸 두 가지 감사 사각지대 (다음에 재사용할 것)
- "헤더에 정정 배너만 붙이고 본문은 안 고치는" 패턴 — 직전 감사가
4라운드에서
CLAUDE.md1번 헤더에 배너를 달았지만 그 아래 bullet은 그대로 뒀음. 배너를 다는 수정을 했으면 그 배너가 부정하는 문장을 실제로 찾아 고쳤는지 같은 커밋에서 확인할 것. - 에이전트에 영역을 나눠 맡기면 "아무 영역에도 안 속한 파일"이 통째로
빠짐 —
HUMAN_TODO.md가 6라운드 동안 한 번도 안 열렸고, 하필 가장 사람에게 중요한 문서였음. 영역 분할 감사를 할 땐 레포 루트 파일 목록을 먼저 뽑아 커버리지를 체크할 것.
부수적으로, 이번 세션 자체가 "서브에이전트 병렬 감사 vs 순차 직접 검증"의 대조 실험이 됨 — 전자가 넓게 훑는 데는 강했지만(6라운드 39건), 진입점 문서의 본문 자기모순과 의사코드 로직 결함은 후자에서만 나왔음.