- Modifier.Merge를 Override로 개명, 동작(필드별 baked 값 교체) 확정 —
props.Modifier 단일 슬롯용 특수 상황으로 문서화 범위를 좁히고 Apply를
기본 관용구로 유도
- :Peek<<T>>(key): T|State<T>|nil 필드 읽기 접근자, isState(x) 판별
predicate(weak-key 레지스트리 기반) 신설
- Apply를 mutable로 바꾸는 방안과 "Apply 경계에서만 clone" 절충안 모두
검토 후 기각 — immutable 전체 clone 유지
- Apply vs Override 판단 기준을 "계산 의존성 유무"로 명문화, FuncSource
기각 사유를 기존 확정 원칙에서 연역해 문서화
- ROADMAP/question.md/pre-implementation-audit.md/documentation-content-map.md
등 교차 참조 전부 갱신
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
State 작업 시 Effect까지 같이 볼 필요는 없다는 지적(둘은 무관한 프리미티브)과
기존 프리미티브당 1파일 컨벤션(modifier-plan.md, slot-plan.md류)에 맞춰
base/blocker-plan.md, base/effect-plan.md로 재분리. Blocker는 store-semantics.md
교차 참조를 유지, Effect는 독립 파일로 완전히 분리. 전체 상호참조 경로 갱신.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
base 밖으로 늘 읽을 필요 없는 참고자료(quad-v1-architecture, comparison-fusion-vide)를
새 reference/ 폴더로 분리하고, ui-shorthand-plan을 base로 승격(RoundSize 드롭+
UICorner/UIPadding/UIScale 리네임), additional-primitives-plan을 Blocker/Effect(base
승격)·Batch/Context(archive 기각)·키 기반 컬렉션 재조정(research 잔류)으로 4분할했다.
component-composition-plan의 중복 역전 서사는 기존 archive 포인터로 압축하고, archive
제목 컨벤션을 [역전됨]/[기각됨]로 분화했다. tween-plan에는 retract/canExecute 구분
메모와 트윈 옵션 값 모양 논의를 추가했다. Effect가 Observer 변형인지는 임의로
결론내지 않고 question.md에 열린 질문으로 남겼다.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- CreatedRef의 {phase="created"|"mounted"} 옵션 폐기, 위치 기반 순서로 대체
- base 디스패치가 배열 파트(children/Ref)를 해시 파트(프로퍼티/이벤트)보다
먼저 처리하도록 명시적으로 두 패스 계약화
- PreRef 신설: 프로퍼티/이벤트보다도 먼저 채워져야 하는 케이스(Roblox
ChildAdded/DescendantAdded/Changed의 동기 발화 대응) 전용, Modifier/
Store 타입 차단 + 위치 무관 호이스팅
- Ref 콜백/대기자 실행 구현 디테일(coroutine vs function 분기) 추가
- 역전된 원 서술은 archive/ref-phase-option-reversed.md로 보존
- architecture.md/question.md/documentation-content-map.md/ROADMAP.md 동기화
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
4개 서브에이전트로 base/ 전체 + 근접 research/를 모호성/지연결정리스크/
단순화후보 세 렌즈로 재감사. 가장 구조적인 발견은 Tween.luau가 문서
전체에서 "범용 store-bind 캐치올 핸들러"의 유일한 예시로 서술되는 문제
(일반 반응형 프로퍼티 바인딩이 실제로 Tween 파일을 거쳐가는지 불명확).
그 외 props.Modifier/Ref forwarding의 nil-hole 함정, canExecute 실제
구현 미확정, LifetimeHandle 로드맵 순서 역전 등 우선순위1급 11개 +
우선순위2급 11개 + 단순화후보 2개.
부수적으로 architecture.md 소스트리의 stale 주석(Store.luau/Ref.luau)
정정, question.md/README.md에 이 감사 반영, CLAUDE.md에 세션 요약 추가.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
children 배열에 안 붙는 Observer(디버깅용 Store 직접 print 패턴 등)를
위한 명시적 라이프사이클 경로. PA님 코드 교차검증 때 예고해둔 확장
지점("GC만으로 부족하면 명시적 dispose 경로 추가 가능")을 실제로 채움.
liveness는 self.Subscribed 필드 우선 + self.Connection.Connected 폴백,
내부 강참조 레지스트리로 GC 방지(weak table과 역할 분리). 둘 다
idempotent, Unsubscribe는 자동(리프) 케이스 조기 해제에도 재사용.
CLAUDE.md 핸드오버 6번 항목 갱신(이벤트 store-bind 부차적 옵션 재조정
포함).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Modifier Getter 아예 안 만들기로 확정 — :FontSize(function(old)->new)가
유일한 use case를 이미 인라인으로 커버
- old는 항상 "현재 저장된 그대로"(plain/State 구분 없이) 넘긴다는 원칙 명문화
- func(state)->state 세 번째 셋터 모양은 불필요하다고 검토 후 기각
- Modifier는 핸들러 계층(Ref/Slot)을 몰라도 되는 순수 데이터 merge 레이어로 확정
- Modifier 런타임은 base에 제네릭 __index 하나로 충분 — 클래스별 타입
생성기는 정적 타입 체크 전용, 런타임과 무관하다는 점 명시
- 이벤트도 store-bind 가능하도록 확정 (기존 재실행 래핑 재사용,
false를 disconnect 센티널로) — quad-roblox 로컬
- CLAUDE.md 핸드오버 5번 항목 갱신
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- research/debug-tooling-plan.md 신설: 런타임 디버깅 플러그인 quad-debug
설계 — BindableEvent/Function이 Studio 플러그인↔Play 중 게임 경계를
넘는지 실측 검증 완료, 채널 위치/페이로드 제약/UUID 기반 on-demand
compute/Element Inspector/Explorer-플러그인 트리 동기화까지 정리
- research/ui-shorthand-plan.md 신설: v1 Corner/PaddingAll/Scale 인라인
숏핸드 조사, quad-v2 포팅 확정(RoundSize만 네이티브 UICorner로 대체돼
불필요), quad-roblox 코어 직접 포함 원칙 확정
- research/documentation-plan.md 신설: UI 네이밍 컨벤션 + Store 부작용을
게임 시스템에서 쓰는 패턴 문서화 뼈대
- base/bind-system-plan.md: Attribute 특수 키 타입 파라미터화 신규 논의 추가
- base/modifier-plan.md, README.md, question.md, ROADMAP.md, CLAUDE.md:
위 신규 문서 색인/요약 반영
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- 6차 라운드: 태그 네임스페이싱(Ref로 충분), Store가 Store를 담지 않음 확정
- Modifier 메커니즘 전체 확정(정적 merge, immutable+clone 체이닝, State
필드 지원, "관측해야 실체화된다" 전역 원칙) — base/modifier-plan.md 신설
- 컴포넌트화 논의 시작(research/component-composition-plan.md) — 컴포넌트=
플레인 함수, State/Source 읽기·쓰기 경계, StoreSource 프록시까지 수렴,
modifier/Ref의 컴포넌트 경계 통과 방식은 열린 채로 남김
- .claude/ 코퍼스 전체(약 15개 문서)를 서브에이전트로 감사해 여러 라운드에
걸쳐 쌓인 모순/중복/stale 마커/끊긴 참조 다수 수정
- purity-and-effects-plan.md를 research/에서 base/로 승격
- CLAUDE.md: 라운드별 인수인계 메모 3개를 하나로 통합, 오래된 "더 이상 열린
질문 없음" 모순 제거
- question.md: 시간순도 우선순위순도 아니던 구조를 "지금 열려있는 것" 중심
으로 재정리, 용어 정리 제안(State/DI/PerInstanceState 등 우선순위) 추가
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-03 확정 사항 전체를 AskUserQuestion으로 하나씩 재검증. 대부분
그대로 확인됐으나 State 프리미티브 존재 여부(있어야 함으로 정정), Pipe
copy-on-write 후보(폐기, state(state) 조합으로 대체), Slot retract 시
동작(폐기로 확정) 등 실제 정정이 발생 — Store/State/Source 온톨로지가
다음 세션 최우선 열린 설계 스레드로 새로 부상.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
quad(Roblox DOMless UI 렌더러) v2 재작성을 위한 .claude/ 계획 구조를 세우고
핵심 아키텍처 결정을 정리함:
- quad v1 / rbvm / tbox / Fusion / Vide / 폐기된 quad2-try 프로토타입 리서치
- Store 책임 분리(base vs provider), process/retract 핸들러 디스패치 모델,
Ref 역할, Slot/Tween 설계 방향 등 핵심 결정 확정
- .claude/{base,research,qa-request,archive,feedback}, question.md, README.md
구조 마련 (code-docker/webmanager 패턴 참고)
- 루트 CLAUDE.md/HUMAN_TODO.md 작성
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>