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.
54 lines
4 KiB
Markdown
54 lines
4 KiB
Markdown
<!-- quad-v2 세션 로그 원문 — CLAUDE.md에서 이전됨(2026-08-11 정리 세션). -->
|
|
<!-- 이 파일은 quadnomicon 개발로그 소재용 원자료로, 당시 시행착오(정정 전 서술 포함)를 그대로 보존함. -->
|
|
<!-- 현재 유효한 설계는 이 파일이 아니라 base//research//archive/가 최종 소스 — 이 파일 안의 판단이 이후 세션에서 뒤집혔을 수 있음. -->
|
|
|
|
## 2026-08-11 두 번째 세션 — trailing deps를 `fn`에 위치 인자로도 노출,
|
|
`.claude/luau-test/15` 신규
|
|
|
|
같은 날 바로 이어진 세션. 사용자가 방금 확정된 `:Compute(fn, ...)`
|
|
trailing-args sugar를 한 단계 더 밀어붙임 — trailing args `a,b,c`가
|
|
이미 구독 등록용으로 넘어간다면 `fn(self, a, b, c)`처럼 그 값 자체도
|
|
위치 인자로 노출해도 되지 않느냐는 제안. `:With`가 그렇게 안 하는 이유
|
|
(체인이 여러 호출에 걸쳐 길어지면 순서 추적이 복잡해짐)는 `:Compute`의
|
|
trailing args처럼 한 호출문 안에 로컬하게 다 보이는 경우엔 안 걸린다는
|
|
것도 사용자가 직접 짚음 — 검증 결과 정확함, 채택.
|
|
|
|
- **`:With`의 회피 근거가 이 케이스엔 안 걸림** — `:With` 체인은 여러
|
|
호출/스코프에 걸쳐 누적될 수 있어 최종 위치 매핑을 코드 한 줄만 보고
|
|
못 읽는 게 문제였는데, `:Compute(fn, a, b, c)`는 그 호출의 인자 목록
|
|
자체가 곧 최종 순서라 누적 문제가 원천적으로 없음.
|
|
- **커링 패턴에서의 중복/드리프트 위험도 같이 해소됨** — 지금 설계(값은
|
|
closure로 재획득)로 커링 스타일을 쓰면 `a,b`를 두 번(클로저 캡처용 +
|
|
`:Compute`의 trailing args용) 써야 해서, 리팩터링 중 한쪽만 바뀌면
|
|
"구독은 a에 걸려있는데 실제로 읽는 값은 다른 것"인 조용한 버그가 생길
|
|
수 있음 — 위치 인자로 노출하면 trailing args 목록 하나가 "무엇을
|
|
구독하는가"와 "fn이 몇 번째로 뭘 받는가" 둘 다의 유일한 소스가 됨.
|
|
- **`self`가 이미 raw 값이 아니라 lazy 핸들로 넘어가는 원칙을 그대로
|
|
적용** — `fn(self: State<T>, dep1: State<U1>, ...)`, 각
|
|
`depN:Get()`을 실제로 부를 때만 계산 트리거.
|
|
- **새로 드러난 문제 — `previous`(2026-08-06 확정)와의 위치 충돌.**
|
|
`previous`를 dep 개수와 무관하게 항상 마지막 인자로 고정
|
|
(`fn(self, dep1, ..., depN, previous?)`, N=0이면 기존 시그니처로
|
|
축약돼 하위 호환)하는 안을 제안했으나, 이건 "제네릭 타입 팩(`...U`)
|
|
뒤에 고정 인자가 오는" 모양이라 Luau가 실제로 타입체크 가능하게
|
|
표현해주는지가 불확실 — **사용자가 직접 이 지점을 짚어 실측 필요로
|
|
남김. [정정, 같은 날 세 번째 세션] 이 순서 자체가 틀림 — `previous?`는
|
|
팩 앞이어야 함, 아래 절 참고.**
|
|
|
|
`base/bind-system-plan.md`(":Compute(fn, ...)" 절 바로 뒤에 신규 소절)/
|
|
`ROADMAP.md`(M3)/`.claude/luau-test/README.md` 반영 완료.
|
|
`.claude/luau-test/15-type-compute-trailing-deps-typepack.luau` 신규 —
|
|
(A) 단일 dep 대조군, (B) 이형 다중 deps가 제네릭 팩으로 개별 타입으로
|
|
풀리는지, (C) 팩 뒤에 `previous?` 고정 인자를 붙인 시그니처 자체가
|
|
파싱/타입체크되는지 세 가지 확인(**[정정, 같은 날 세 번째 세션]** C의
|
|
순서가 틀렸던 것으로 드러나 D 대조군이 추가됨 — 아래 절 참고). 다른
|
|
luau-test 파일들과 마찬가지로 **에이전트가 직접 실행 못 함** —
|
|
`luau`/`luau-analyze` 바이너리가 이 환경에 없어서, 사용자가 직접
|
|
돌려보고 결과를 알려줘야 함.
|
|
|
|
**다음 세션이 할 일**: 안 바뀜(`ROADMAP.md` M0부터, luau-test 결과 확인
|
|
우선) — `15`가 luau-test 결과 확인 목록에 하나 추가됨(정정된 순서는
|
|
아래 세 번째 세션 참고). 남은 진짜 불확실성은 B(이형 다중 deps를
|
|
제네릭 팩으로 표현 가능한지)뿐 — 실패하면 위치 인자 노출을 동종 타입
|
|
dep 1개로 한정.
|
|
|