quad/.claude/luau-test/done
qwreey-agent-selene 297c4d459c
design: quad-types 패키지 신설 — AddPlugin<Self,P> + CheckedQuad<T> 실측 설계
quad-roblox가 quad-base를 런타임 주입(QuadRoblox(Quad): QuadRoblox)으로만
받으면 pesde 의존 선언이 필요 없어 보이지만, 타입 참조용 require도
런타임에 실제 실행됨을 실측 확인 — dev-dependency로 두면 게시 후
소비자 환경에서 크래시함. 해법으로 구현 없는 타입 계약 전용 워크스페이스
패키지 quad-types 신설, quad-base/quad-roblox 모두 이것만 의존하도록
전환.

AddPlugin<Self,P>(self:Self,fn:(Self)->P):Self&P — 제네릭 self로 둬야
체이닝이 누적됨을 실측 확인(고정하면 이전 확장을 잃음), quad-base에
실제 mutate 기반 구현 반영.

CheckedQuad<T> 버전 체크는 배선하며 세 번 깨짐 — error() 대신
print+types.never, 함수 본문 로컬 별칭 대신 리턴 타입 표현식에 직접,
그리고 가장 중요하게 type function을 한 번이라도 거친 값(패스스루
포함)은 이후 AddPlugin 같은 제네릭 self 체이닝이 조용히 깨진다는 새
Luau 함정 발견 — typing-limits.md §6으로 승격. 최종 설계(검증 결과를
원본과 격리된 가상 필드로)만 AddPlugin과 완전히 호환.

부수로 quad-base 자신도 quad-types workspace 의존 때문에 CLI symlink
함정(지난 세션 발견)에 걸림 — 로컬 테스트용 symlink 실체화로 임시 우회.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-19 17:09:16 +09:00
..
01-two-pass-array-hash-order.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
02-none-sentinel-vs-nil-holes.luau docs(dispatch): PreRef 소진 센티널을 ProcessedPreRef로 교체, Length/Offset 등록 갭 해소 2026-08-14 02:45:50 +09:00
03-recursive-store-bind-dispatch.luau fix(lifecycle): canExecute/unbindLifetime을 value 1-인자로 정정, Subscribed 오염 제거 2026-08-14 04:03:49 +09:00
05-store-state-diamond-propagation.luau qa: M0 luau-test 스파이크 05 재작성 통과 + 21 신규(Store 미선언 키) 반영 2026-08-19 14:24:19 +09:00
06-component-boundary-nil-hole-props.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
07-relate-weak-table-gc.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
08-type-source-satisfies-state.luau docs(base): bind/store/state 3단계 분할, UI 숏핸드 Tween 지원, existing-instance-bind 기각 2026-08-14 05:10:49 +09:00
09-type-modifier-overridden-subtype.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
11-modifier-illegal-value-error.luau docs(base): bind/store/state 3단계 분할, UI 숏핸드 Tween 지원, existing-instance-bind 기각 2026-08-14 05:10:49 +09:00
12-type-attribute-generic-key-narrowing.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
13-type-ref-preref-subtype.luau qa: luau-test 스파이크 13 재작성 — 타입/런타임 분리 + PostRef까지 확장 2026-08-19 14:31:56 +09:00
14-type-nilable-default-overload.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
16-type-store-key-typefunction.luau docs: 콜백 파라미터 무주석 추론 전방위 재시도, code-review 2회전 정합성 수정 2026-08-15 19:36:44 +09:00
17-modifier-index-tableclone-chaining.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
18-relate-mutual-cycle-gc.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
20-slot-splice-index-arithmetic.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
21-type-store-undeclared-key-rejected.luau qa: M0 luau-test 스파이크 05 재작성 통과 + 21 신규(Store 미선언 키) 반영 2026-08-19 14:24:19 +09:00
22-runtime-ref-preref-postref-brand.luau qa: luau-test 스파이크 13 재작성 — 타입/런타임 분리 + PostRef까지 확장 2026-08-19 14:31:56 +09:00
23-type-quadtypes-checkversion-addplugin.luau design: quad-types 패키지 신설 — AddPlugin<Self,P> + CheckedQuad<T> 실측 설계 2026-08-19 17:09:16 +09:00