No description
Find a file
qwreey f650a1cfd6
qa: 손 트레이싱 6라운드 2차 패스 — 1차 미탐색 영역 확장, 발견 9건 (+ 1차 전수 재검증)
사용자 요청("지금 나온거 이외에 더 문제될만한게 있는지 조사해봐줘 …
시스템 전체 계획을 봐도 좋고")으로 같은 파일에 2차 패스를 이어붙였다.
1차는 사용자가 지목한 5개 영역이 범위였고, 2차는 `dispatch-core-plan.md`
전문 / `source-state-plan.md` / `lifecycle-pattern.md` / `ref-plan.md` /
`tag-plan.md` / `attribute-plan.md` / `ui-shorthand-plan.md` /
`brand-plan.md` / `gate-plan.md` / `blocker-plan.md` /
`state-epoch-plan.md`와 `slot-plan.md`의 `raw*` 계층을 의사코드 단위로
훑었다.

**`base/`는 여전히 한 줄도 안 고쳤다** — 전부 발견 보고이고 회신 대기.

## 🔴 셋

- `H-11` **`Effect`의 leaf 사망 cleanup을 발화시키는 배선이 어느
  의사코드에도 없다.** `lifecycle-pattern.md`는 "`Effect`가 `Destroying`
  훅을 쓰는 유일한 소비자"라 못박고 `effect-plan.md`는 "leaf당 실제
  Destroying 바인딩 하나"라고 비용까지 적어뒀는데, leaf가 붙는 유일한
  경로인 `bindLifetime`의 실 구현 스케치는 gchold 등록 + gcconn 복사가
  전부다. `Effect`가 통째로 안 돌고, 그 위의 `OnDestroyed`와
  `slot._detachCleanup`(detach 요소를 파괴하는 *유일한* 경로 —
  같은 문서가 "GC 폴백이 아예 없으므로 필수"라 명시)이 같이 죽는다
- `H-12` `rawRemove`/`rawUnmount`/`rawDetach`에만 "아직 마운트 전"
  얼리리턴이 없다(`rawAdd`/`rawReplace`엔 있음). `Slot()` → `:Add(x)` →
  `:Remove(1)`이 `nativeRemove(nil, …)`로 터진다
- `H-13` `Effect(fn, ...deps)` 역전(5라운드 `C-6`)이
  `source-state-plan.md`에 반영 안 됐고, 거긴 아직 "기각"이 **일반
  원칙**으로 서 있다. 반응형 코어 정본만 읽고 구현하면 단수 dep으로
  되돌아가 `Ref` 의존성 갭이 재발한다

## 🟡🟢 여섯

`Effect`의 `fn` 시그니처 미확정(`self`/`previous` 자리, `Ref` dep은 lazy
핸들이 아님) / `newKeyIndex[key] = pos`가 마운트 안 된 키에도 배열
인덱스를 기록(`0` 포함) / `Dispatch.drive`의 Blocker 범위가 `F-4-1`
단일 루프와 안 맞고 `PostRef`가 게이트 안에서 발화하는 귀결이 미문서화 /
attribute 이름을 그룹 A→B로 옮기면 emit 순서에 따라 error /
`rawAdd`·`rawReplace`의 plain 분기가 `recompute`를 두 번 돌림 /
`Processed*RefHandler`의 `process` 시그니처가 핸들러 계약과 다름

## 커밋 전 `H-1`~`H-20` 전수 재검증

사용자 요청으로 커밋 전에 20건 전부를 `base/` 원문과 다시 대조했다.

- **`H-15` 철회(오탐)** — `ui-shorthand-plan.md`에 이미 사용자 판정
  예외(4라운드 `UI-11`, "`retractFrom(child, prop, 1)`을 정석으로 요구하지
  않는다 — 실익이 없다")가 있었는데 그걸 못 보고 `dispatch-core-plan.md`의
  일반 규칙만 인용했다. 번호는 비우지 않고 철회 기록 + 재발 방지 교훈으로
  남긴다(남은 건 인자 이름 `hint`가 폐기된 옛 용어라는 🟢 하나)
- **`H-2` 트레이스 정정** — 결론은 맞지만 수치가 틀렸다. `updateFn`이
  반환하는 중첩 Slot은 정의상 마운트 전이고 `Length`를 쓰는 주체는
  `recompute` 하나뿐이라(5라운드 `C-2`), 그 시점 `.Length`는 **항상 0**이다.
  원래 적은 `+3`이 나올 수 없다. 실제 동작은 더 나쁘다 —
  `isSlot` 분기가 언제나 `+0`이라 (a) 첫 아이템이면 `rawAdd(self, S, 0)`로
  바로 out of bounds, (b) `pos` 전진이 원래 노리던 목적("다음 형제의
  index가 물리 개수를 반영")도 첫 사이클엔 성립하지 않아 같은 데이터의
  `index`가 사이클마다 달라진다
- **나머지 18건은 유효 확인.** `H-3`은 `bk.invalidAfter` 대입이 코퍼스
  전체에서 `getOffsetAt` 안의 두 줄뿐임을, `H-11`은 `Destroying`이 산문에만
  등장하고 어떤 의사코드에도 연결되지 않음을 각각 grep으로 재확인
- 1차의 "이상 없다고 확인한 것" 중 `Ref` 콜백 발화 계약 표현도 정정
  ("이미 채워져 있으면" → 미설정이어도 무조건 1회)

색인 두 곳(`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
2026-08-23 21:09:50 +09:00
.claude qa: 손 트레이싱 6라운드 2차 패스 — 1차 미탐색 영역 확장, 발견 9건 (+ 1차 전수 재검증) 2026-08-23 21:09:50 +09:00
.vscode tooling: 에디터 Luau 솔버 설정 확정 — luau-lsp 설치해 새 솔버 필요성 실측 2026-08-19 14:37:17 +09:00
quad-base design: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +09:00
quad-roblox design: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +09:00
quad-types design: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +09:00
type-version-check design: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +09:00
.gitignore tooling: Rojo 설치·검증 — pesde workspace symlink는 Studio 배포와 무관함 확인 2026-08-19 14:27:43 +09:00
.luaurc tooling: 프로젝트 셋업 문서화 + wally→pesde 전환, M1 스캐폴딩 골격 2026-08-19 14:01:07 +09:00
CLAUDE.md design: ROADMAP 마일스톤 경계 재편 + 전반 stale 정리 2026-08-22 03:19:13 +09:00
default.project.json tooling: 프로젝트 셋업 문서화 + wally→pesde 전환, M1 스캐폴딩 골격 2026-08-19 14:01:07 +09:00
HUMAN_TODO.md design: ROADMAP 마일스톤 경계 재편 + 전반 stale 정리 2026-08-22 03:19:13 +09:00
mise.toml tooling: rokit → mise 전환 + selene 린터 도입 (roblox-project-example 벤치마킹) 2026-08-19 15:09:35 +09:00
pesde.lock design: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +09:00
pesde.toml design: type-version-check 패키지 추출 — CheckedQuad<T, Pattern> 글롭/캐럿 확장 2026-08-19 17:39:57 +09:00
ROADMAP.md design: ROADMAP 마일스톤 경계 재편 + 전반 stale 정리 2026-08-22 03:19:13 +09:00
SAFETY.md docs: SAFETY.md에 git 원격별 push 정책 + code-docker/dind 안전성 점검 결과 반영 2026-08-18 10:46:51 +09:00