No description
사용자 회신(pre-implementation-qa-round4-response.md) 중 판단이 명확한 항목을 base/에 반영. 굵직한 것만: - LP-1: quad의 `Connected`는 "계산된 속성"이 아니라 그냥 RBXScriptConnection의 네이티브 필드다 — rbvm 프록시 사정을 잘못 옮겨온 서술이었음. 실제 판정은 "gcconn이 없음" / "있는데 Connected==false" 두 상태뿐. - D-56: `bindLifetime`의 첫 인자가 Instance가 아닐 수 있다(Slot-in-Slot의 ownerKey) — 백엔드가 반드시 핸들링해야 하는 요구사항으로 신설. gcconn 트릭이 안 통하므로 세 번째 판정 분기가 필요하다는 것까지 명시. - SL-75/D-60: 언마운트 시 `slot.Offset = nil`은 포탈을 깨뜨림(이미 구독 중인 다운스트림이 영구히 끊김) — stale하게 두는 게 맞고, 마운트 전 기본값도 nil이 아니라 0. - SL-74: `SetAndDispose`는 `source:SetAndDispose(value)` 콜론 메서드로 확정. `Apply` 오버라이딩은 Source→State 단방향 때문에 타입이 안 성립. - E-11: leaf 바인딩된 Effect엔 `:Unsubscribe()`가 아예 안 먹는 것으로 Observer와 통일. 옛 "(3) 이후 leaf가 죽어도 중복 호출 안 됨"은 이중 바인딩 게이트상 성립할 수 없는 문장이라 삭제. - AT-20: 생존 이름 최적화는 "부품이 늘어나서 안 하는" 게 아니라 값 비교가 필요해 **원리적으로 불가능**하다(State 계약상 `:Get()` 비교 금지). - UI-8: `mapTweenValue` 로컬 헬퍼를 `Tween<T>:Map(fn)` 공개 메소드로 승격. 부수로 D-3(retract가 깊은 인덱스부터인 이유)/D-10(두 패스를 명시하는 진짜 이유는 순서를 못 믿어서가 아니라 이식성)/LH-8(자기 아래 vs 자기 위)을 코드 예시로 풀어 썼고, TW-16으로 HUMAN_TODO에 initValue 항목을 신설했다. Co-authored-by: qwreey <me@qwreey.moe> |
||
|---|---|---|
| .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 | ||