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.
64 lines
4.7 KiB
Markdown
64 lines
4.7 KiB
Markdown
<!-- quad-v2 세션 로그 원문 — CLAUDE.md에서 이전됨(2026-08-11 정리 세션). -->
|
|
<!-- 이 파일은 quadnomicon 개발로그 소재용 원자료로, 당시 시행착오(정정 전 서술 포함)를 그대로 보존함. -->
|
|
<!-- 현재 유효한 설계는 이 파일이 아니라 base//research//archive/가 최종 소스 — 이 파일 안의 판단이 이후 세션에서 뒤집혔을 수 있음. -->
|
|
|
|
## 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. **1차 작성** — 레포 루트 `luau-ignoreme/`(당시엔 git 자동 제외 폴더로
|
|
시작)에 M0 체크리스트 5개 항목(Store/State 다이아몬드 전파, Source가
|
|
State를 구조적으로 만족하는 제네릭 타입, process/retract 재귀 디스패치,
|
|
배열/해시 두 패스 순회, `props.Modifier or None` nil-hole 관용구) +
|
|
`Dispatch` 체인/`retractUnder` 다단 검증, `Relate`의 weak-table GC
|
|
실측, `Modifier.Overridden` 서브타입 타입체크, Roblox 전용
|
|
`bindLifetime`/`canExecute`/Attribute Instance 참조/`CollectionService`
|
|
태그 확인까지 10개 파일 작성(01~10).
|
|
2. **2차 — 커밋 `f198fd9`("중간검토에서 발견된 설계 결함 다수 수정") 반영.**
|
|
그 사이 사용자가 직접 `.claude/base/` 전체를 훑으며 여러 결함을
|
|
정정(위 절 참고) — 그 중 `02`(Ref 콜백/대기자 배열의 소진 센티널이
|
|
`None`→`nil`로 되돌아간 것, 실제로 `None`을 쓰면 배열이 무한정
|
|
자라는 버그였음이 드러남)이 luau-test 내용과 정면으로 어긋나 전면
|
|
재작성(순서가 중요한 배열은 계속 `None`, 순서 무관+슬롯 재사용
|
|
필요한 배열은 `nil`이라는 최종 구분 + 무한 성장 버그의 정량적
|
|
재현까지 포함). `Modifier` UB→error 전환(11 신규)도 이 라운드에
|
|
같이 반영. 나머지 파일은 대조 결과 영향 없음을 서브에이전트+직접
|
|
문서 대조로 확인.
|
|
3. **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번)을 찾아 작성.
|
|
4. **폴더 이동 — `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번 참고) — 단, 이 폴더 결과를 먼저 확인하고 진행하는 게 순서.
|
|
|