Commit graph

12 commits

Author SHA1 Message Date
226490153e
docs: Blocker/Effect를 base/additional-primitives.md에서 별개 파일로 재분리
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>
2026-08-07 14:45:57 +09:00
5c9d10df66
docs: .claude/ 코퍼스 정리 — reference/ 신설, 승격/기각 분리, 역전 이력 트리밍
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>
2026-08-07 14:39:20 +09:00
99ffea2f07
decide(base): .value를 Ref 전용으로 확정, State/Source는 Get()만
State/Source의 값 읽기 접근자에서 .value(관용 표기)를 제거하고 :Get() 하나로
통일 — "관측해야 실체화된다" 원칙이 가장 날카롭게 느껴져야 할 지점에서
프로퍼티 문법이 그 느낌을 무디게 한다는 판단. .value 표기 자체는 폐기가
아니라 Ref 전용으로 좁혀짐(Ref는 lazy가 아니라 읽어도 계산이 안 트리거되므로
프로퍼티 문법이 정직함) — 이름 충돌 자체가 사라짐.

bind-system-plan.md/store-semantics.md/architecture.md/debug-tooling-plan.md
전체의 .value 언급을 :Get()으로 갱신, question.md의 관련 열린 질문은
완전히 해소되어 제거.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-07 00:40:57 +09:00
53d43dc90b
docs(base): Get() 확정, Store eager 생성은 table.clone+in-place 교체로 명시
- 읽기 접근자 함수명은 Get()으로 확정(Pull 대비 우위 없음 + 기존 문서와
  일치) — question.md에 반영, .value 존치 여부만 열린 질문으로 남김.
- Store의 eager Source 생성 구현 스케치 추가: table.clone(defaults) 후
  순회하며 각 슬롯을 Source(v)로 교체 — 빈 테이블에 키를 하나씩 넣는 것보다
  해시 슬롯 재사용이 Luau VM에서 더 쌈. Source()(무인자)는 Source(nil)과
  동치라는 점도 명시(lazy 생성 경로가 이 형태를 씀).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-07 00:31:19 +09:00
c5e0b7f452
fix(base): Store의 Source 생성이 eager뿐 아니라 lazy도 필요함을 정정
여러 base 문서(store-semantics.md, bind-system-plan.md, architecture.md)에
"store.key는 Store 생성 시 이미 만들어둔 Source를 그대로 반환할 뿐"이라는
eager-only 서술이 반복돼 있었는데 부정확했음 — Luau 타입은 런타임에
강제되지 않고 defaults도 선택이라, Store<<T>>() 처럼 defaults 없이 만든
뒤 .Key:Set(v)를 부르면 eager 생성만으론 .Key가 nil이라 크래시남.

정정된 모델: Store 생성 시점의 eager 생성(각 defaults 키마다 미리 Source
생성, 여전히 필요) + store.key 접근 시점의 lazy __index 생성(아직 없는
키를 그 자리에서 만들어 저장, 재접근시 재생성 없음) 둘 다 필요.

bind-system-plan.md에 남아있던 관련 stale 서술도 같이 정정:
- "__newindex/__index 프록시로 감싸면 됨"은 이후 :Set() 전환으로 무효화됨
- "defaults 테이블 직접 mutate는 UB"는 최신 모델과 안 맞음(defaults는
  라이브 백킹이 아니라 아직 안 만들어진 Source의 초기값 템플릿일 뿐이라
  나중에 바꿔도 문제없음, UB 아님)

question.md에 .value vs :Get()/:Pull() 읽기 접근자 이름 재검토 항목도
추가(아직 미결정 — Finalize는 기존 cleanup 계열 어휘와 충돌해 기각,
Pull과 Get/Set 대칭 사이에서 검토 중).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-07 00:26:16 +09:00
4b839b09e1
문서 사이트 구조/quadnomicon 신설, 프레임워크 정직 비교, Source가 State를 만족하는 서브타입 재구성
세 갈래 작업:

1. 문서 사이트 구조 확정(초심자/api/심화 3축 + quadnomicon 4번째 축) —
   research/documentation-plan.md 0번 항목, research/documentation-content-map.md
   신설(초심자 core loop 목차 초안, 파일별 분류, 심화 에세이 후보 15개).

2. quad vs Fusion/Vide/react-lua 정직 비교 — research/framework-comparison-findings.md
   신설. 3개 에이전트가 실제 소스(Fusion/Vide 로컬 클론)+웹 리서치(react-lua)로
   검증. quad 강점(Slot 단일 마운트 가드, 열린 우선순위 축, 명시적 의존성,
   다이아몬드 dedup)과 고칠 만한 약점 식별.

3. Source가 State를 구조적으로 만족하는 서브타입으로 재구성(핵심 변경) —
   store.key 타입 문제(레코드 타입 읽기/쓰기 비대칭)를 풀다가 StoreSource
   프록시 설계(2026-08-04 확정분)를 완전히 대체:
   - Source<T>가 State<T>를 구조적으로 만족(단방향 호환), Store는
     "이름 붙은 Source 모음"으로 단순화 — 별도 wrapper 생성/캐싱 불필요
   - store.key = value(__newindex) 폐기 → store.key:Set(value)
   - Store:Emit(key) → source:Emit()
   - base/store-semantics.md에 새 절로 반영, bind-system-plan.md/
     component-composition-plan.md/architecture.md 정정
   - ROADMAP.md M0에 Luau 솔버 검증 항목 추가(재귀 타입 조합)
   - 폐기된 StoreSource 원문은 archive/store-source-proxy-reversed.md에
     역전 이유·신구 비교와 함께 보존(quadnomicon 소재 후보)

전체 코퍼스 stale 참조 재점검: architecture.md 요약절, README.md 승격 누락,
Modifier UB 규칙 확장 등 발견해서 수정.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 21:29:56 +09:00
2dcdebdee1
독립 프리미티브 vs 원천 종속 파생 데이터 원칙 신설
Observer가 State처럼 원천(Source/State) 없이는 존재할 수 없다는 사용자
관찰을 일반 원칙으로 승격 — Source/Ref/Store/Modifier(독립 프리미티브,
Type(args) 자유 함수 생성자) vs State/Observer(파생 데이터, 원천에 대한
메소드로만 얻어짐)로 분류. state:Observer(fn)가 메소드고 자유 함수
Observer(state, fn)가 없는 더 근본적인 이유로 연결.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 18:08:46 +09:00
936e0766b7
이벤트 self 관습/Store Emit/Ref 일반화/Observer 논의(2026-08-06 후속 세션) 결과 반영
- 이벤트 핸들러 self(Instance) 관습 비채택 확정 (Ref로 충분, Modifier 정적
  flatten과의 충돌, quad-debug 추적성, 클로저 비용)
- rbvm GC 패턴이 실물 검증됐다는 근거 보강 (lifecycle-pattern.md)
- .claude 코퍼스 전체 stale 참조/모순 감사 및 정리
- Store:Emit(key) 확정 (Source 원천 한정, clone 불가 userdata 우선 근거)
- :Compute(fn, previous) 확정 (무거운 파생 객체 재사용, full diff 필수)
- state:Observer(fn) 확정 (children 배열에 직접 놓는 leaf 값, canExecute 게이팅)
- Ref 일반화 확정 (범용 값 박스, 반복 재설정 가능, State와 달리 non-lazy)
- CLAUDE.md 핸드오버 갱신

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-06 17:54:13 +09:00
c19e82f661
6차 라운드 + 컴포넌트화/Modifier 논의, 문서 코퍼스 전체 정리 결과 반영
- 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-04 15:49:28 +09:00
c00e2e67d6
소스 구조 확정 라운드(2026-08-04, 5차) 결과 반영
bind-system-plan/module-lifecycle-plan/slot-plan을 research/에서 base/로
승격, quad-base(인터페이스)/quad-roblox(구현) 패키지 경계와 모노레포 소스
트리를 architecture.md에 확정. Slot의 base/roblox 분리, InstanceChild
핸들러 필요성도 함께 반영.
2026-08-04 13:57:01 +09:00
0dbbc3d0b1
설계 검증 라운드(2026-08-04) 결과 반영
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>
2026-08-04 12:06:26 +09:00
0c9b8584ee
quad-v2 재작성 계획 초기 스캐폴드
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>
2026-08-04 00:07:40 +09:00