No description
c33ae04(인덱스 기반 Dispatch 재설계) 전체를 직접 정독. 방향은 옳으나 새로 쓴 의사코드가 손 트레이싱을 안 거친 채 커밋됐음이 드러나 실제 버그 4건 발견·수정: 1. Dispatch.process가 chains:SetStrong을 h.process 뒤에 둬서 최초 마운트에서 하위 위임 retractor가 통째로 유실(재귀가 자기 테이블을 만들었다 바깥이 덮어씀 — Slot이면 서브트리 중복 마운트로 직결). SetStrong hoist + 재귀 중 hole 방지용 no-op 점유 마커 추가. 2. Attribute 그룹이 process에서 retractFrom을 선행 호출해 인덱스 1이 무조건 비워지는 바람에 점유 체크(=소유권 충돌 감지)가 전혀 작동 안 함. 철거를 반환 클로저로 이동. 3. SlotHandler가 claim 실패에도 파괴적 클로저를 반환 — nested는 엄격 claimOwner, top-level은 claimOwnerAt(inst,k)로 분리. rawRemove의 releaseOwner 누락, destroySlotTree의 GC 타이밍 의존 오류도 수정. 4. Ref retractor가 spurious 재발행에서도 relate를 지워 dedup 무력화. 사용자 설계 결정: - State<Slot> 교체 = 파괴가 아니라 언마운트(state<Frame>와 동일). 포탈이 별도 기능이 아니라 이 결정의 귀결이 됨. 해제는 setOffsetSource(None) → setLength(0) 순서 고정(반대면 죽는 중인 서브트리 Source에 헛된 Set이 날아감). dispose(value) 신설 — 트리가 아직 요구하면 파괴 거부하고 error. - 재디스패치를 "하강 diff"로 재설계 — 래핑 핸들러의 retractFrom 선행 호출을 폐기하고 Dispatch.process가 핸들러를 먼저 비교. 힌트가 None/래퍼로 오염돼 깜빡임 방지가 조용히 꺼지는 결함이 계기. 아직 research/에만 있고 base 미반영(Attribute 이름 소유권 하나가 남음) — base 4개 문서에 경고 배너. 전파 누락 정리: ROADMAP.md가 2026-08-08 이전 모델로 남아있던 것, base 내 "3종 vs 4종 계약" 모순 6개 문서, luau-test/04가 없어진 가드를 검증하던 것 (04는 인덱스 모델 + 버그 1 재현 음성 대조군으로 전면 재작성). 재발 방지: bind-system-plan.md "Handler 작성 체크리스트"(7항목), relate-plan.md "언제 Relate를 쓰고 언제 쓰면 안 되는가" 신설. 다음 세션 최우선: question.md 0-Z(Attribute 이름 소유권) — 사용자가 직접 스케치하며 심층 분석 예정. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .claude | ||
| .gitignore | ||
| CLAUDE.md | ||
| HUMAN_TODO.md | ||
| ROADMAP.md | ||
| SAFETY.md | ||