## 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, dep1: State, ...)`, 각 `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개로 한정.