No description
별도 라운드로 쪼개지 않고 7라운드 문서에 **2차 패스**로 이어붙였다 (6라운드가 패스를 이어 붙인 것과 같은 방식, 발견 번호도 패스를 가로질러 이어서 매김). 여전히 아무것도 반영하지 않았고 README 색인도 안 넣음 (결정 후 followup과 함께). doc-check ERROR 0. ## 이번 패스의 각도 1차는 문서 대 문서 손 트레이싱이었고, 2차는 **문서가 "확인했다"고 적어둔 런타임/타입 주장을 실제로 `luau`/`luau-analyze`에 걸어봤다** — 6건 중 5건이 추측이 아니라 실행 결과이고 재현 코드를 항목마다 넣었다. 부수로 드러난 패턴: **"검증 완료"로 인용되는 스파이크들이 정작 위험한 모양을 안 테스트했다**(`07`은 되참조 없는 payload만, `16`은 대입을 아예 안 함). ## 발견 - `H-71` 🔴 **단일 `Relate` 안의 자기참조(값→키)는 GC 안전하지 않다.** `relate-plan.md`의 "위험한 패턴" 절이 안전하다고 단언한 바로 그 모양이 커밋된 `Relate.luau`로 50/50 누수(SetWeak은 0). 그 절은 "Luau엔 ephemeron이 없다"를 근거로 두-`Relate` 순환을 금지하면서 단일 `Relate` 자기참조엔 ephemeron 의미론을 가정한다. `RefLeafHandler`가 정확히 그 모양이고(`SetStrong(inst,k,ref)` + `ref.Value = inst`), 정상 `Destroy` 경로엔 그 기록을 지우는 코드가 없다. - `H-72` 🟡 `GateNode`가 `state-epoch-plan.md` §4 규칙 1~3을 돌려면 `emitEpochMap`을 갱신 없이 비교해야 하는데 `EpochMap` 표면 (`Update`/`Refresh`/`Sync`/`TrackFrom`)에 그 연산이 없다. - `H-73` 🟡 `store:GetDynamic<<T>>(name): Source<T>`는 콜론이든 탑레벨이든 `T`를 바인딩할 수 없다 — Luau엔 호출부 명시 타입 인자가 없고 기대 타입 추론도 안 돼 `T`가 `unknown`으로 떨어진다. 콜론 쪽은 합성 타입에 키 자체가 없어 `Key 'GetDynamic' not found`. `question.md` 최우선 항목의 실측 근거. - `H-74` 🟡 eager `defaults` 경로가 `__index`를 통째로 우회해 예약 키 방어가 성립 안 함 — `Store({GetDynamic = 3}):GetDynamic("x")`가 `attempt to call a table value`. Modifier와 "정확히 같은 구조"가 아니다. - `H-75` 🔴 `WrapStore`가 스파이크 `16`의 평평한 모양이면 `store.key:Compute(무주석 콜백)`이 깨진다 — `typing-limits.md` ②쪼개기를 `type function` 안에서도 해야 한다(그 모양이면 통과함까지 확인). - `H-76` 🔴 `type function`은 바깥 타입 별칭을 참조 못 하므로 `Source<T>` 전 표면을 손으로 중복 유지해야 하고, 메소드 self 파라미터가 불변이라 `Revision` 하나만 빠뜨려도 `store.key`가 `State<T>` 파라미터 자리에 안 들어간다. 스파이크 `16`은 그 대입을 한 번도 안 해봤다. 충실한 재현 + 정합성 단언 한 줄이면 닫힌다(실측 확인). ## 부록 — 열려 있던 실측 항목 하나는 성립 스파이크 `15`의 (B)(이형 다중 deps를 제네릭 팩으로 좁혀 받기)를 같이 재봤고 **된다** — 확정된 `previous?`-앞-팩 순서 그대로, 음성 대조군도 정확히 잡힌다. Co-authored-by: qwreey <me@qwreey.moe> Claude-Session: https://claude.ai/code/session_012oLwATeQdq9TCFdENPutFG |
||
|---|---|---|
| .claude | ||
| .vscode | ||
| quad-base | ||
| quad-roblox | ||
| quad-types | ||
| type-version-check | ||
| .gitignore | ||
| .luaurc | ||
| CLAUDE.md | ||
| default.project.json | ||
| HUMAN_TODO.md | ||
| mise.toml | ||
| pesde.lock | ||
| pesde.toml | ||
| ROADMAP.md | ||
| SAFETY.md | ||