quad/.claude/qa-request
qwreey 3247ea5907
qa: 손 트레이싱 7라운드 5차 패스 — 타입 실측, 발견 7건 (H-94~H-100)
1~4차가 안 쓴 각도: **확정된 M2 표면을 문서에 적힌 시그니처 그대로 Luau
타입으로 선언하고 `luau-analyze`에 걸었다.** 2차 패스도 타입을 봤지만
대상이 Store의 타입 합성 하나였다(H-73~H-76). 이번엔 호출부 관점 —
"확정된 타입이 확정된 관용구를 통과시키는가"다. 루트 .luaurc가
languageMode: strict라 아래 진단은 프로젝트에 그대로 적용된다.

🔴 H-94 `__call` 테이블은 `(State<T>) -> U` 자리에 안 들어간다 →
     `state:Apply(Debounce{...})` 확정 관용구가 타입에러. gate-plan이
     "확인할 필요도 없어졌다"며 접은 불확실성이 Debounce/Throttle 쪽에
     그대로 남아 있었다(팩토리에 Flush/Cancel을 붙이는 이상 콜러블
     테이블일 수밖에 없다). 런타임은 멀쩡하고 타입만 막힌다
🔴 H-95 콜백이 "선언보다 적게 반환"하면 strict에서 에러 — Effect의
     `fn -> (() -> ())?`는 cleanup 없는 흔한 모양이, :List의
     `updateFn -> (T?, UD?)`는 userdata를 안 쓰는 모든 모양이 안 통과한다.
     통과하는 두 형태(가변 반환 팩 / 함수 타입 유니온)를 대조군으로 확인
🟡 H-96 trailing deps가 붙는 순간 콜백 파라미터 무주석 추론이 깨진다 —
     typing-limits ②쪼개기가 푸는 범위 밖인데 경계가 어디에도 없다.
     2차 패스 부록의 "무주석 콜백도 살아 있다"도 이 구분을 안 했다
🟡 H-97 M2의 `mock 대상 테스트`가 전파 루프를 한 번도 못 돈다 — 루프가
     매 발화마다 부르는 canExecute가 M8에서만 구현되고, 미주입 슬롯의
     확정 기본값은 에러 스텁이다. 커밋된 mock엔 재료(Signal/Connection)가
     이미 있는데 쓰는 쪽이 없다
🟡 H-98 `:Subscribe()`의 공개 계약("참조를 안 담아도 계속 돎")이 중간
     State GC 미해결에 종속 — 잘못 닫히면 "GC도 안 되고 발화도 안 하는"
     조합이 된다(실제 collectgarbage로 재현)
🟢 H-99 Observer가 파일 자리를 못 받았고 :Subscribe() 전역 강참조
     레지스트리의 주인이 어디에도 없다 (Effect.luau는 있는데)
🟢 H-100 `{[Source<T>]: true}`가 `{[Epoch]: true}` 자리에 안 들어간다
     (인덱서 키 불변). 단일 Epoch 전달과 §2의 구조적 만족은 성립 확인

부록에 "걸어봤는데 문제가 없던 것" 6건 — state:Gate + blocker:Policy가
타입으로 성립하고 gate-plan의 2026-08-24 정정(오답 b.Policy)은 타입이
잡아준다, source:Apply에 State용 팩토리 통과, Effect의 이형 deps는 타입으로
표현 가능, 게이트 2겹 unfold가 어느 순서로 풀려도 안 샌다 등.

아무것도 base/에 반영하지 않았다 — 회신 대기.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-25 11:35:00 +09:00
..
.gitkeep chore: add empty folders 2026-08-10 01:22:53 +09:00
pre-implementation-handtrace-round6-followup.md design: 손 트레이싱 6라운드 전량 처리·반영 — H-1~H-54 확정, M2/M3 설계 게이트 해소 2026-08-24 18:54:14 +09:00
pre-implementation-handtrace-round6.md design: 손 트레이싱 6라운드 전량 처리·반영 — H-1~H-54 확정, M2/M3 설계 게이트 해소 2026-08-24 18:54:14 +09:00
pre-implementation-handtrace-round7.md qa: 손 트레이싱 7라운드 5차 패스 — 타입 실측, 발견 7건 (H-94~H-100) 2026-08-25 11:35:00 +09:00
pre-implementation-qa-round1.md qa: New()/Quad() 다중 인스턴스화 이름 정정 — 이전 커밋의 오역 정정 2026-08-18 22:23:32 +09:00
pre-implementation-qa-round2.md qa: 구현 전 QA 2라운드 — recompute 손 트레이싱으로 RC-1 발견·해결 2026-08-18 22:11:59 +09:00
pre-implementation-qa-round3.md qa: 구현 전 QA 3라운드 — attachSlot/bk.N 트레이싱으로 RC-3/RC-4 발견·해결 2026-08-19 00:07:30 +09:00
pre-implementation-qa-round4-followup.md design: Epoch/EpochMap/Brand 전면 승격 + 해소 기록 flatten 2026-08-22 01:27:18 +09:00
pre-implementation-qa-round4-response.md qa: 구현 전 QA 4라운드 문항지 — base/ 전 문서 확정 주장 전수 문항화 2026-08-20 00:33:49 +09:00
pre-implementation-qa-round4.md qa: 반영 후 감사 6라운드 — 실제 크래시 3건 포함 18건 수정 2026-08-21 13:20:42 +09:00
pre-implementation-qa-round5-followup.md design: Epoch/EpochMap/Brand 전면 승격 + 해소 기록 flatten 2026-08-22 01:27:18 +09:00
pre-implementation-qa-round5-response.md qa: 구현 전 QA 5라운드 — 문항지·회신·전량 반영 + 감사 2라운드 2026-08-21 18:19:58 +09:00
pre-implementation-qa-round5.md design: Epoch/EpochMap/Brand 전면 승격 + 해소 기록 flatten 2026-08-22 01:27:18 +09:00