CLAUDE.md had grown to 3196 lines of accumulated session logs, causing context bloat. Full session narratives (including trial-and-error and later-corrected reasoning — quadnomicon devlog raw material) now live as 39 individual files under .claude/session/. CLAUDE.md keeps only a short "지금 할 일" (re-synced against question.md/pre-implementation-audit.md, stale detail dropped) and a compact per-session summary+link table. No design decisions changed; base/research/question.md were already in sync with every session (verified against README.md/question.md before archiving), so no unreflected content needed migrating first.
4.7 KiB
4.7 KiB
2026-08-09 열두 번째 세션 — .claude/luau-test/ 신설: M0 사전 검증
스파이크 작성, 결과는 아직 미확인
M0가 공식적으로 짜야 할 스파이크(위 "지금 할 일" 1번, ROADMAP.md M0
체크박스)와 지금까지 세션 로그 곳곳에 흩어져 있던 "실제 Luau로 부딪혀본
적 없는 것"/"M0/M2 스파이크 검증 목록에 추가됨" 표시들을 한 곳에 모아,
사용자가 직접 luau/luau-analyze/luau-lsp/Roblox Studio로 돌려볼
수 있는 독립 실행 스크립트 14개 + README.md 색인으로 만듦. 세 라운드에
걸쳐 진행됨:
- 1차 작성 — 레포 루트
luau-ignoreme/(당시엔 git 자동 제외 폴더로 시작)에 M0 체크리스트 5개 항목(Store/State 다이아몬드 전파, Source가 State를 구조적으로 만족하는 제네릭 타입, process/retract 재귀 디스패치, 배열/해시 두 패스 순회,props.Modifier or Nonenil-hole 관용구) +Dispatch체인/retractUnder다단 검증,Relate의 weak-table GC 실측,Modifier.Overridden서브타입 타입체크, Roblox 전용bindLifetime/canExecute/Attribute Instance 참조/CollectionService태그 확인까지 10개 파일 작성(01~10). - 2차 — 커밋
f198fd9("중간검토에서 발견된 설계 결함 다수 수정") 반영. 그 사이 사용자가 직접.claude/base/전체를 훑으며 여러 결함을 정정(위 절 참고) — 그 중02(Ref 콜백/대기자 배열의 소진 센티널이None→nil로 되돌아간 것, 실제로None을 쓰면 배열이 무한정 자라는 버그였음이 드러남)이 luau-test 내용과 정면으로 어긋나 전면 재작성(순서가 중요한 배열은 계속None, 순서 무관+슬롯 재사용 필요한 배열은nil이라는 최종 구분 + 무한 성장 버그의 정량적 재현까지 포함).ModifierUB→error 전환(11 신규)도 이 라운드에 같이 반영. 나머지 파일은 대조 결과 영향 없음을 서브에이전트+직접 문서 대조로 확인. - 3차 — 사용자 요청으로 "타입 관련 실측 필요, 특히
luau-lsp로 확인해야 할 것" 3개 추가(12~14). base 문서 자신이 "실측 필요"라고 명시적으로 못박아둔 지점(attribute-plan.md의[Attribute<<T>> "name"] = value제네릭 DI 키가 실제로 값 타입을 좁혀주는지, 12번)과 f198fd9에서 뒤집힌 결정(isRef/isPreRef가 이제Source/State와 같은 포함 관계 —PreRef가Ref의 하위 개념이 됨,PreRef<T>가Ref<T>를 구조적으로 만족하는지 타입체크까지 포함, 13번), 그리고 같은 세션에 새로 명시된 캐비엇(Source(default)/Ref(default)의default생략은T가 nilable일 때만 안전하다는 것을 함수 오버로드로 타입 레벨에서 실제로 막을 수 있는지, 14번)을 찾아 작성. - 폴더 이동 —
luau-ignoreme/→.claude/luau-test/. 사용자가 "커밋해서 레포에 남기자"고 판단 —*-ignoreme*gitignore 패턴을 벗어나 일반 추적 대상으로 전환,.claude/README.md에 새 폴더 행 추가. 내용/역할은 안 바뀜, 경로 참조 문구만 동기화.
아직 아무것도 실행 안 됨 — 에이전트도 로컬에 luau/luau-analyze가
없어서 직접 못 돌려봤고, 사용자가 다음에 luau/luau-analyze/
luau-lsp/Roblox Studio로 직접 돌려보고 결과를 알려주기로 함. 결과에
따라 할 일:
- 전부 통과 → M0 실제 착수 시 이 스크립트들의 로직을 그대로 재사용하며 진행.
- 하나라도 걸림(특히 12/14의 타입 narrowing 실패, 07의 GC 신호 이상,
10의
warn발생, 13의 런타임 assert 실패) → 해당base/문서를 그 자리에서 정정. .claude/luau-test/README.md의 "결과 확인 후 할 일" 절에 파일별로 뭘 우선 확인해야 하는지 이미 적어둠 — 다음 세션은 그 응답을 대조하는 것부터 시작하면 됨.
다음 세션이 할 일: 사용자가 luau-test 실행 결과를 갖고 오면 그것부터
반영. 아직 없으면 ROADMAP.md M0 착수 우선순위는 그대로(위 "지금 할 일"
1번 참고) — 단, 이 폴더 결과를 먼저 확인하고 진행하는 게 순서.