quad/.claude/session/2026-08-04-01-roadmap-handoff.md
qwreey 1f56c75978
chore(docs): split CLAUDE.md session log into .claude/session/, keep 2-4 line summaries
CLAUDE.md had grown to 3196 lines of accumulated session logs, causing
context bloat. Full session narratives (including trial-and-error and
later-corrected reasoning — quadnomicon devlog raw material) now live
as 39 individual files under .claude/session/. CLAUDE.md keeps only a
short "지금 할 일" (re-synced against question.md/pre-implementation-audit.md,
stale detail dropped) and a compact per-session summary+link table.
No design decisions changed; base/research/question.md were already
in sync with every session (verified against README.md/question.md
before archiving), so no unreflected content needed migrating first.
2026-08-11 14:40:43 +09:00

64 lines
5.2 KiB
Markdown

<!-- quad-v2 세션 로그 원문 — CLAUDE.md에서 이전됨(2026-08-11 정리 세션). -->
<!-- 이 파일은 quadnomicon 개발로그 소재용 원자료로, 당시 시행착오(정정 전 서술 포함)를 그대로 보존함. -->
<!-- 현재 유효한 설계는 이 파일이 아니라 base//research//archive/가 최종 소스 — 이 파일 안의 판단이 이후 세션에서 뒤집혔을 수 있음. -->
## 최근 세션 요약 (2026-08-04, 6차 라운드 이후)
**6차 라운드**: 남아있던 "급하지 않음" 질문 두 개 해소 — 태그 네임스페이싱
충돌은 컴포넌트 단위로는 Ref가 대신 해결해줘서 심각하게 안 봄(`architecture.md`
5번), Store가 Store를 담는 경우는 없음으로 확정(Store는 Source에 준하는
"시작점"이라 다른 반응형 값에 자동 연결되지 않음, `bind-system-plan.md`).
**그 이후 채팅에서 세 가지 큰 스레드가 새로 열림/정리됨**:
- **Modifier 메커니즘 전체 확정** — 런타임 pluggable 핸들러가 아니라 정적
merge, immutable+`table.clone` 기반 체이닝, 필드가 State일 수도 있는
경우의 setter/getter 동작까지 전부 확정(`base/modifier-plan.md`, 새로
base 승격). 이 논의에서 "관측해야 실체화된다"는 프로젝트 전역 원칙도
명문화(`bind-system-plan.md`).
- **컴포넌트화 논의, 같은 날 후속 세션에서 완결** — v1의 `Class.Extend()`
자동-store 매직은 폐기하고 React식으로 값을 명시적으로 전달하는 방향으로
수렴, `StoreSource`(Source를 인터페이스+구현체로 보고 Store 키에서 얇은
프록시로 얻는 것) 아이디어 확정. 마지막 미결이던 "modifier/Ref의 컴포넌트
경계 통과"도 후속 세션에서 풀림: Compose/Fusion/Vide/v1 4개 선례를
서브에이전트로 병렬 조사한 결과 전부 named parameter로 경계를 넘기는
패턴에 수렴한다는 게 확인됐고, "컴포넌트가 여러 루트를 반환한다"는
프레이밍 자체가 (a) Luau가 tail position 밖 다중 리턴을 지원 안 해서
불필요한 개념과 (b) 이미 있는 Slot 메커니즘을 섞은 것이었음이 드러나
정리됨 — 결론: 경계는 named parameter(`props.Modifier`/`props.Ref`
가칭), "다중 루트"라는 별도 개념은 폐기, 여러 modifier를 하나로 합치는
`Modifier.Merge`(가칭) 유틸 추가. `research/component-composition-plan.md`
`base/component-composition-plan.md`로 승격 완료.
- **문서 전체 감사 및 정리** — `.claude/` 코퍼스 전체(약 15개 문서)를
서브에이전트로 감사해 여러 라운드에 걸쳐 쌓인 모순/중복/stale 마커를
대거 발견하고 수정(예: 이벤트 dot-access 확정 여부가 문서 내에서 서로
모순, 이미 해소된 질문이 "미해결"로 방치, 존재하지 않는 문서/섹션을
가리키는 끊긴 참조 다수, `TagService`/`CollectionService` 혼용 등).
`research/purity-and-effects-plan.md`도 내용이 이미 확정 상태라 `base/`
승격. **이 CLAUDE.md 자체도 이번에 오래된 라운드별 인수인계 메모 3개를
이 요약 하나로 통합하며 정리함** — 라운드별 상세 히스토리가 필요하면
git log와 각 `base/`/`research/` 문서 안의 라운드 표시(예: "2026-08-04
3차 라운드")를 참고할 것, 여기서 전부 반복하지 않음.
**같은 날 로드맵 인수인계 라운드 — 설계 단계 마무리, 구현 준비 완료**:
- **quad-base 테스트 mock 방향 확정**: Vide 선례(`test/mock.luau`, ~300줄,
순수 `luau` CLI, Studio 불필요) 그대로 채택, 스코프는 정적 디버깅 한정(Tween
같은 동적 동작 제외), quad-roblox로 작성한 컴포넌트가 mock에서도 그대로
돌아가야 한다는 요구 없음(단순하게 감) — `architecture.md` "테스트 전략"
절. 범용 렌더 디버깅 도구(Tween mock 포함)는 별개로 백로그.
- **구현 전 리스크 감사**: `.claude/base/` 전체 + 남은 `research/`
서브에이전트로 감사해 "실제 Luau 접촉 없이 추론만으로 확정된 것" 3개
(Store/State 반응형 코어, 디스패치 엔진, 컴포넌트 경계 modifier/Ref)를
식별 — 이것들은 M0 스파이크로 검증하기로 함(아래). 감사 중 `slot-plan.md`
스스로 "정식 확정 안 됨"이라 표시해뒀던 "클래스가 슬롯을 받는 방법"(Named
Slot 없음)도 이번에 정식 확정, 대신 "여러 Slot이 형제로 섞일 때 순서 보장"
이라는 새 하위 질문이 열림(다중 백엔드 관점, Roblox만이면 급하지 않음).
`State<Modifier>` 조합은 UB로 확정해 타입으로 막기로 함(`modifier-plan.md`
7번), 디스패치 엔진의 일반적 무한루프는 방어 로직 없이 provider 버그로
간주하기로 확정(`bind-system-plan.md`).
- **루트 `ROADMAP.md` 신설** — M0(스켈레톤+기술검증 스파이크, "진짜"
마일스톤 아님)부터 M11(Tween)까지 + 병행 가능 항목 + 백로그로 구성된 실행
계획, todo 체크박스 포함. 오늘은 문서 준비만 — **다음 세션이 M0부터 실제
시작**.
용어 정리 제안 진행 중인 점은 위 "지금 할 일" 2번 참고.