quad/.claude/base
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
..
architecture.md design: quad-types 패키지 신설 — AddPlugin<Self,P> + CheckedQuad<T> 실측 설계 2026-08-19 17:09:16 +09:00
attribute-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
bind-system-plan.md qa: New()/Quad() 다중 인스턴스화 이름 정정 — 이전 커밋의 오역 정정 2026-08-18 22:23:32 +09:00
blocker-plan.md design: Debounce/Throttle 마지막 판단 대기 4개 닫고 base/로 승격 2026-08-19 02:11:11 +09:00
brand-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
component-composition-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
debounce-throttle-plan.md design: Debounce/Throttle 마지막 판단 대기 4개 닫고 base/로 승격 2026-08-19 02:11:11 +09:00
dispatch-core-plan.md design: New()의 내부 구성 확정 — InitXxx 팩토리 체이닝 + Relate 기반 멱등 Init 가드 2026-08-19 01:16:26 +09:00
effect-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
event-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
fallback-plan.md docs: CLAUDE.md 4분할(매 세션 로드 1537→354줄), 워크플로 가짜 초록불 수정 2026-08-16 01:35:02 +09:00
lifecycle-hooks-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
lifecycle-pattern.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
modifier-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
module-lifecycle-plan.md design: RunInit vs 백엔드 유일 슬롯 가드 분리 확정 — _initializedBy 유지 2026-08-19 16:26:34 +09:00
onchange-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
project-setup-plan.md design: quad-types 패키지 신설 — AddPlugin<Self,P> + CheckedQuad<T> 실측 설계 2026-08-19 17:09:16 +09:00
purity-and-effects-plan.md docs(base): bind/store/state 3단계 분할, UI 숏핸드 Tween 지원, existing-instance-bind 기각 2026-08-14 05:10:49 +09:00
quad-types-plan.md design: quad-types 패키지 신설 — AddPlugin<Self,P> + CheckedQuad<T> 실측 설계 2026-08-19 17:09:16 +09:00
ref-plan.md qa: 구현 전 QA 2라운드 — recompute 손 트레이싱으로 RC-1 발견·해결 2026-08-18 22:11:59 +09:00
relate-plan.md design: New()의 내부 구성 확정 — InitXxx 팩토리 체이닝 + Relate 기반 멱등 Init 가드 2026-08-19 01:16:26 +09:00
slot-plan.md design: PopOnly 가칭을 Detach로 리네임 확정 + 공개 표면 위치 확정 2026-08-19 01:46:18 +09:00
source-state-plan.md design: Debounce/Throttle 마지막 판단 대기 4개 닫고 base/로 승격 2026-08-19 02:11:11 +09:00
store-plan.md qa: M0 luau-test 스파이크 05 재작성 통과 + 21 신규(Store 미선언 키) 반영 2026-08-19 14:24:19 +09:00
tag-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
tween-plan.md docs(audit): 프로젝트 전체 재감사 — 분할 후 잔여 stale 참조 14곳 정정 2026-08-14 00:45:03 +09:00
typing-limits.md design: quad-types 패키지 신설 — AddPlugin<Self,P> + CheckedQuad<T> 실측 설계 2026-08-19 17:09:16 +09:00
ui-shorthand-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00