qa: 손 트레이싱 6라운드 3·4차 패스 — 미탐색 문서 전수 + 축 전환, 발견 34건 (실측 검증 포함)
사용자 요청으로 6라운드에 두 패스를 더 이어붙였다. 3차는 *"지금 나온거 이외에 더 문제될만한게 있는지 … 그러고 나서 모든 요소들이 진짜 실존하는 문제인지 사실확인을 해줘"*, 4차는 *"문제를 계속 쌓고, 한번에 몰아 처리하는게 효율적이라, 한번 더 순회하고"*. **`base/`는 여전히 한 줄도 안 고쳤다** — 전부 발견 보고이고 회신 대기. ## 3차 패스 (`H-21`~`H-38`) — 1·2차가 한 번도 안 연 문서 전체 `store-plan.md`/`source-state-plan.md` 코어, `modifier-plan.md`/ `component-composition-plan.md`/`bind-system-plan.md`, `event-plan.md`/ `onchange-plan.md`/`relate-plan.md`/`module-lifecycle-plan.md`/ `fallback-plan.md`/`lifecycle-hooks-plan.md`, `tween-plan.md`/ `debounce-throttle-plan.md`, `typing-limits.md`/`quad-types-plan.md`/ `project-setup-plan.md`와 **실제 커밋된 M1 코드**, `slot-plan.md`의 공개 CRUD·`:Single`·래핑·`dispose` 계층 + 통합 시나리오 넷. **이번부터 추론으로 끝내지 않고 로컬 `luau` 0.734 / `luau-analyze`로 직접 재현했다.** 그 결과 **기존 `H-2`의 크래시 주장이 틀렸음이 드러났다** — `table.insert(t, 0, x)`는 Luau에서 안 터지고 조용히 `t[0]`에 쓴다. 결론과 고칠 방향은 유효하지만 실제 결과는 크래시가 아니라 **영구 고아**다(claim은 됐는데 모든 walk가 `ipairs`라 아무도 안 닿음). 🔴 다섯: `unwrapElement`가 Instance에서 크래시(Roblox는 없는 멤버 인덱싱이 에러) / 기본 identity `updateFn`이 `KeyGone`을 그대로 반환해 항상 error / 전파 도중 새 구독자가 붙으면 **구독자 하나가 누락되고 다른 하나가 두 번 발화**(실측, 실행마다 결과가 다름) / `Tween<T>:Mapped` 재귀 제네릭 타입 누수(`luau-analyze` 0 진단) / `New(): Quad`가 닫힌 타입이라 M2가 붙일 `quad.Dispatch`가 타입에러(`luau-analyze`로 재현). ## 4차 패스 (`H-39`~`H-54`) — 문서 단위가 아니라 축 전환 핸들러 레지스트리 전수 / `ref-plan.md`·`attribute-plan.md` 심층 / **`luau-test` 스파이크 실제 재실행** / 프리미티브 조합 매트릭스 / `reference`·`archive`·로드맵 M3~M9 / **엔진·언어 사실 주장 전수 검증**. **`H-39`(🔴)는 세 축에서 독립적으로 같은 결론에 도달했다** — 배열 자리를 차지하는 말단 핸들러 4종(`TagHandler`/`AttributeGroupHandler`/ `RefLeafHandler`/`ObserverEffectLeafHandler`)이 `setLength`/ `setOffsetSource`를 **아예 등록하지 않아** `Frame { Tag("x"), Child{} }` 같은 흔한 배치가 첫 마운트에 `recompute`의 명시적 error로 죽는다. 문서를 하나씩 읽는 방식으로는 구조적으로 안 보이는 종류(등록 의무는 디스패치 코어 문서에만 있고 각 핸들러 문서는 자기 로직만 서술). 그 외 🔴 둘: 공개 `Slot:Add` 의사코드가 CRUD 절이 확정한 가드 넷을 하나도 안 함(`H-37`은 이 문제의 반쪽이었다) / `groupClaimKeys` 확정이 `AttributeGroupHandler` 의사코드에 배선 안 됨. **엔진 사실 검증의 성과 둘** — `H-21`의 전제가 공식 문서로 **확인**됐고, 반대로 **`PreRef`의 존재 근거가 `Workspace.SignalBehavior`에 조건부**임이 드러났다(`H-42`, 신규 템플릿 place는 이미 `Deferred`가 기본이고 코퍼스에 이 단어가 0건). **스파이크는 깨끗하다** — `done/` 16개 전원이 `STATUS.md` 주장과 실행 결과 일치, GC 스파이크는 3회 반복에도 수치 동일, 설계 드리프트 0건. 색인 두 곳(`README.md`의 `qa-request/` 행, `todos.md` 00번)도 같이 갱신. `doc-check.py` ERROR 0. Co-authored-by: qwreey <me@qwreey.moe> Claude-Session: https://claude.ai/code/session_01TPzatFCEs1CfWNPxF1pidr
This commit is contained in:
parent
f650a1cfd6
commit
068971fd56
3 changed files with 1556 additions and 3 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
|
@ -76,6 +76,37 @@
|
||||||
의사코드에도 없다**는 것이라 `Effect`/`OnDestroyed`/`slot._detached`
|
의사코드에도 없다**는 것이라 `Effect`/`OnDestroyed`/`slot._detached`
|
||||||
정리가 통째로 걸린다 — M3 `Effect` 구현 전에 반드시 닫을 것.
|
정리가 통째로 걸린다 — M3 `Effect` 구현 전에 반드시 닫을 것.
|
||||||
|
|
||||||
|
**⭐⭐ [2026-08-23] 같은 파일에 3차 패스도 이어붙었다 — 발견 번호는
|
||||||
|
`H-21`~`H-38`.** 1·2차가 한 번도 안 연 문서 전체(Store/State/Source 코어,
|
||||||
|
Modifier·컴포넌트 합성, 이벤트·라이프사이클·에러 격리, Tween·시간 게이트,
|
||||||
|
타입 계약과 **실제 커밋된 M1 코드**)와 문서 경계를 가로지르는 통합
|
||||||
|
시나리오를 돌렸다. 여기서도 **`base/`는 한 줄도 안 고쳤다.** 1·2차와
|
||||||
|
달리 **추론으로 끝내지 않고 로컬 `luau`/`luau-analyze`로 직접 재현**했고,
|
||||||
|
그 부수로 **기존 `H-2`의 크래시 주장이 틀렸다는 것도 드러났다**(결론은
|
||||||
|
유효하지만 결과가 크래시가 아니라 조용한 영구 고아 — 그 문서 3차 패스
|
||||||
|
머리의 정정 절이 소스). **M2 착수 전에 정해야 하는 것이 하나 늘었다** —
|
||||||
|
`New(): Quad`가 닫힌 타입이라 M2가 붙일 `quad.Dispatch` 접근이 그대로는
|
||||||
|
타입에러라는 것(`H-25`, `luau-analyze`로 재현). 개별 항목·심각도·갈래는
|
||||||
|
여기서 세지 않는다 — 그 문서의 세 "회신 방법" 절이 소스.
|
||||||
|
|
||||||
|
**⭐⭐ [2026-08-24] 4차 패스도 이어붙었다 — 발견 번호는 `H-39`~`H-54`.**
|
||||||
|
이번엔 문서 단위가 아니라 **축을 바꿔서** 훑었다(핸들러 레지스트리 전수 /
|
||||||
|
`ref-plan.md`·`attribute-plan.md` 심층 / **`luau-test` 스파이크 실제 재실행** /
|
||||||
|
프리미티브 조합 매트릭스 / `reference`·`archive`·로드맵 M3~M9 / **엔진·언어
|
||||||
|
사실 주장 전수 검증**). 여기서도 **`base/`는 한 줄도 안 고쳤다.**
|
||||||
|
**⭐ M2에 직접 걸리는 게 하나 나왔다** — 배열 자리를 차지하는 말단 핸들러
|
||||||
|
4종(`TagHandler`/`AttributeGroupHandler`/`RefLeafHandler`/
|
||||||
|
`ObserverEffectLeafHandler`)이 `setLength`/`setOffsetSource`를 **아예 등록하지
|
||||||
|
않아** `Frame { Tag("x"), Child{} }` 같은 흔한 배치가 첫 마운트에
|
||||||
|
`recompute`의 명시적 error로 죽는다(`H-39`, **세 축에서 독립 발견** 후
|
||||||
|
전수 grep으로 재확인). 부수로 **`H-21`의 전제가 공식 문서로 확인**됐고,
|
||||||
|
반대로 **`PreRef`의 존재 근거가 `Workspace.SignalBehavior`에 조건부**임이
|
||||||
|
드러났다(`H-42` — 신규 템플릿 place는 이미 `Deferred`가 기본).
|
||||||
|
**스파이크 쪽은 깨끗하다** — `done/` 16개 전원이 `STATUS.md` 주장과 실행
|
||||||
|
결과가 일치했고 GC 스파이크도 반복 실행에서 안 흔들렸으며 설계 드리프트도
|
||||||
|
0건이었다. 개별 항목·심각도·갈래는 여기서 세지 않는다 — 그 문서의 네
|
||||||
|
"회신 방법" 절이 소스.
|
||||||
|
|
||||||
**4라운드 — [2026-08-21] 종결.** 문항지는
|
**4라운드 — [2026-08-21] 종결.** 문항지는
|
||||||
`.claude/qa-request/pre-implementation-qa-round4.md`, 사용자 회신 원문은
|
`.claude/qa-request/pre-implementation-qa-round4.md`, 사용자 회신 원문은
|
||||||
`-response.md`, 처리 결과 전량은 **`-followup.md`가 소스**(여기서 목록을
|
`-response.md`, 처리 결과 전량은 **`-followup.md`가 소스**(여기서 목록을
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue