quad/.claude/base
qwreey f36bdcbe5d
design: QA 4라운드 2차 회신 반영 — B절 확인분 + C절 결정 7건
B절(설명 보강 재질문) 전부 확인됨. 확인 과정에서 나온 보강:
- B-1: (A) 분기는 "교체"라 stack-down이 아니고 retractFrom만 스택을 역순으로
  푼다는 구분을 명시. "자기 아래는 이미 정리된 뒤" 보장도 retractFrom 한정이고,
  (A)에서 아래가 살아 있는 게 깜빡임 없는 갈아끼우기의 근거.
- B-3: 고아 체인이 실제로 어떻게 생기는지 가상 위반 예시(MaybeWrapHandler) 추가.
- B-4: "Brand는 데이터 타입에 부작용 없이 런타임 명시 타이핑을 하기 위한 것"을
  존재 이유로 명시하고, duck-typing 기각 근거를 정확성/안전성 둘로 분리.

C절 결정 반영:
- C-3: flatten의 정확한 형태 확정 — in-place 뮤테이션(클론 안 함),
  ProcessedModifier로 소진, 인라인 우선이 `~= nil` 하나로 성립. 단 주신 코드의
  반복 방향은 역순이어야 "나중 modifier가 우선"이 성립해서 그것만 정정(F-4-2).
- C-4: destroySlotTree의 명시적 releaseOwner 제거. 파괴된 걸 재사용하는 코드는
  그 자체로 버그이므로 "비결정적으로 실패"보다 "항상 실패"가 낫다.
- C-6: recompute의 sourceList[i] == nil을 skip에서 즉시 error로 승격. 재추적
  결과 도달 경로가 없으므로 관측되면 부기가 깨진 것.
- C-7: "부기가 물리 트리 조작보다 항상 먼저"를 일반 계약으로 승격. 빼기는 물리
  먼저/넣기는 부기 먼저가 같은 원칙(좁은 쪽이 먼저)의 두 얼굴이라는 것과,
  yield 금지 덕에 프레임 경계가 안 끼므로 진짜 근거는 "백엔드가 전제할 수
  있게 하나로 고정"이라는 것까지.

followup F절에 남은 것: KeyGone 홀드 + Owned 설치 플래그 설계 제안(F-3),
단일 일반화 for 전환 여부/flatten 반복 방향/setLength 위치(F-4).

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-21 10:47:45 +09:00
..
architecture.md design: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +09:00
attribute-plan.md design: QA 4라운드 회신 1차 반영 — 즉시 처리 가능한 정정 20건 2026-08-20 00:48:07 +09:00
bind-system-plan.md qa: New()/Quad() 다중 인스턴스화 이름 정정 — 이전 커밋의 오역 정정 2026-08-18 22:23:32 +09:00
blocker-plan.md design: QA 4라운드 회신 1차 반영 — 즉시 처리 가능한 정정 20건 2026-08-20 00:48:07 +09:00
brand-plan.md design: QA 4라운드 2차 회신 반영 — B절 확인분 + C절 결정 7건 2026-08-21 10:47:45 +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: QA 4라운드 2차 회신 반영 — B절 확인분 + C절 결정 7건 2026-08-21 10:47:45 +09:00
effect-plan.md design: QA 4라운드 회신 1차 반영 — 즉시 처리 가능한 정정 20건 2026-08-20 00:48:07 +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 design: QA 4라운드 회신 1차 반영 — 즉시 처리 가능한 정정 20건 2026-08-20 00:48:07 +09:00
lifecycle-pattern.md design: QA 4라운드 회신 1차 반영 — 즉시 처리 가능한 정정 20건 2026-08-20 00:48:07 +09:00
modifier-plan.md design: QA 4라운드 2차 회신 반영 — B절 확인분 + C절 결정 7건 2026-08-21 10:47:45 +09:00
module-lifecycle-plan.md design: QA 4라운드 회신 1차 반영 — 즉시 처리 가능한 정정 20건 2026-08-20 00:48:07 +09:00
onchange-plan.md qa: 구현 전 QA 1라운드 결과를 base/에 전량 반영 2026-08-18 19:39:03 +09:00
project-setup-plan.md design: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +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: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +09:00
ref-plan.md design: QA 4라운드 회신 1차 반영 — 즉시 처리 가능한 정정 20건 2026-08-20 00:48:07 +09:00
relate-plan.md design: New()의 내부 구성 확정 — InitXxx 팩토리 체이닝 + Relate 기반 멱등 Init 가드 2026-08-19 01:16:26 +09:00
slot-plan.md design: QA 4라운드 2차 회신 반영 — B절 확인분 + C절 결정 7건 2026-08-21 10:47:45 +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 design: QA 4라운드 회신 1차 반영 — 즉시 처리 가능한 정정 20건 2026-08-20 00:48:07 +09:00
typing-limits.md design: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +09:00
ui-shorthand-plan.md design: QA 4라운드 회신 1차 반영 — 즉시 처리 가능한 정정 20건 2026-08-20 00:48:07 +09:00