quad/.claude/base
qwreey 4622fbeec8
qa: 반영 후 감사 6라운드 — 실제 크래시 3건 포함 18건 수정
커밋 9b7f847(Detach/KeyGone/Owned/attachSlot 분해) 반영 후 각도를 바꿔가며
quad-doc-auditor를 6라운드 돌린 결과. 라운드별 확실 발견 4/6/2/3/3/0으로
6라운드에서 새 발견 0건 — 수렴 확인 후 종료. 경위 전량은
qa-request/pre-implementation-qa-round4-followup.md의 I절이 소스.

트레이싱 라운드(4~5)가 잡은 실제 크래시 — 셋 다 Detach가 신설한 경로가
기존 불변식과 부딪히는데 그쪽이 안 고쳐진 것:

- I-1 (치명): rawDetach가 소유권을 유지하는데 재마운트는 rawAdd →
  claimOwner를 거치고, claimOwner는 같은 owner의 재클레임도 무조건 error다
  (2026-08-13 감사가 Slot{a,a}를 막으려고 넣은 것). 문서가 권장하는
  "prev를 그대로 반환하면 재마운트" 패턴이 그대로 죽었음. fromDetached
  플래그로 그 경로만 좁게 예외 처리.
- I-2: 재마운트된 자식 Slot이 activateList를 두 번 실행해 구독이 이중으로
  생기고 mounted/keyIndex 클로저 상태가 통째로 새로 만들어짐 → 멱등 가드.
  가드만으로는 :List 구독이 옛 physicalTarget에 앵커된 채 남아 포탈
  재마운트 후 조용히 멈추므로, _listObserver 핸들 보관 + 재앵커까지 처리.
- I-3: _detachCleanup이 releaseOwner를 안 불러 Owned=false 요소가 죽은
  Slot을 owner로 달고 남음 → 두 분기 공통으로 호출.
- I-6: 위 수정의 회귀 트레이싱 — destroySlotTree에 _listObserver 해제 누락,
  claimOwner의 옛 논증 두 문단이 fromDetached와 정면 모순, 소유권 예시
  코드가 C-4와 모순.
- I-7: 사용자가 별도 상의해 가져온 두 건 — _detachCleanup 설치를
  mountSlotTree → activateList로 이관(:List 없는 Slot마다 no-op Effect를
  트리 크기만큼 심고 있었음), activateList의 inst → physicalTarget 리네이밍.
  이관 근거가 멱등 가드 이전 동작을 전제하고 있어 가드 분기의 재앵커까지
  같이 반영. 이로써 _listObserver/_detachCleanup이 같은 범주로 통일됨.

I-4(materializeSlotTree 중 예외 시 Blocker 잔류)는 사용자 판단으로 pcall
없이 문서화만 — 아직 밟은 적 없는 경로이고 옛 단일 attachSlot에도 있었을
구조적 갭.

문서 정합성 라운드(1~3)에서 나온 것: slot-plan의 "값 교체는 비파괴" 잔존,
분해 완료 후에도 남아 있던 "논의 대기 중" 배너, attachSlot의 flush 루프를
가리키던 문장 5곳, README 색인 행이 2026-08-19에서 멈춰 있던 것,
qa-round4 문항지/followup의 "회신 대기" 상태줄, todos의 용어 목록 이중 소스,
dispatch-core의 raw* 일반 계약에 rawDetach 누락.

luau-test: 스파이크 01이 "재작성 필요" 마커를 단 채 done/에 남아 있어
STATUS.md 자신의 "폴더가 곧 상태" 규칙을 어기고 있었음 → rewrite-required/로
이동하고 개수 정정. "만들어야 할 스파이크" 절 신설(아직 파일조차 없는 실측
항목이 어느 폴더로도 표현되지 않아 구조적으로 잊히던 자리).

doc-check.py ERROR 0.

Co-authored-by: qwreey <me@qwreey.moe>
2026-08-21 13:20:42 +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: Detach 보존 주체/KeyGone/Owned 확정 + attachSlot 분해 2026-08-21 11:55:11 +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 qa: 반영 후 감사 6라운드 — 실제 크래시 3건 포함 18건 수정 2026-08-21 13:20:42 +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 qa: 반영 후 감사 6라운드 — 실제 크래시 3건 포함 18건 수정 2026-08-21 13:20:42 +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