quad/.claude/session/2026-08-11-02-trailing-deps-positional.md
qwreey 1f56c75978
chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries
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.
2026-08-11 14:40:43 +09:00

4 KiB

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개로 한정.