quad/.claude/luau-test/done
qwreey af513aeb84
fix(lifecycle): canExecute/unbindLifetime을 value 1-인자로 정정, Subscribed 오염 제거
canExecute(inst,value) 2-인자 시그니처를 폐기하고 canExecute(value)로 정정.
2-인자는 증상이었고 원인은 2026-08-08 세션이 .Subscribed에 "leaf 바인딩
생존"이라는 두 번째 의미를 겹쳐 얹은 것 — .Subscribed는 전역 :Subscribe()
전용 필드이고 bindLifetime과 무관함. bindLifetime이 바인딩 시점에 inst의
gcconn 참조를 value 쪽 Relate로 복사해두면 생존을 value 하나로 물을 수 있음.

- canBound(handle) 폐기 → canExecute(value)로 통합(이중 바인딩 게이트 겸함)
- unbindLifetime도 1-인자로 축소 — 호출부가 _mountedInst를 되짚을 필요 없어져
  "홀더가 갈아치워지면 해제가 빗나가는" 잠재 버그 클래스 소멸(slot-plan 5곳)
- gcconn/gchold를 lazy 생성에서 Instance 생성 시점으로 전환, 클로저가 inst까지
  캡처 — Instance userdata 포인터 동일성은 inst-키 Relate 전체의 전제였음
  (relate-plan에 "전제" 절 + "안전히 유지되면 항상 SetWeak" 일반 규칙 신설)
- canExecute의 실제 호출부를 State 전파 루프로 명시(구독자 weak + 발화마다
  게이팅) — 이게 코드로 한 번도 안 적힌 게 오류가 여섯 세션 살아남은 이유

역전 원문/오염 경로/교훈은 archive/canexecute-inst-arg-reversed.md.
luau-test/10은 폐기된 모델을 검증 중이라 rewrite-required/로 이동.

부수: 3~4차 세션이 남겨둔 CLAUDE.md 세션 히스토리 항목과 4차 세션 로그
파일도 미커밋 상태여서 같이 실림. doc-check ERROR 1건(CLAUDE.md:1156 →
session/2026-08-14-03-lifecycle-hooks-plan.md)은 그 파일이 디스크 어디에도
없어서 남음 — 3차 세션 쪽에서 채워야 함.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 04:03:49 +09:00
..
01-two-pass-array-hash-order.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
02-none-sentinel-vs-nil-holes.luau docs(dispatch): PreRef 소진 센티널을 ProcessedPreRef로 교체, Length/Offset 등록 갭 해소 2026-08-14 02:45:50 +09:00
03-recursive-store-bind-dispatch.luau fix(lifecycle): canExecute/unbindLifetime을 value 1-인자로 정정, Subscribed 오염 제거 2026-08-14 04:03:49 +09:00
05-store-state-diamond-propagation.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
06-component-boundary-nil-hole-props.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
07-relate-weak-table-gc.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
08-type-source-satisfies-state.luau docs(type): 0-Y 해소 — 재귀 제네릭 반환은 Luau 상위 한계로 확정, typing-limits.md 신설 2026-08-13 22:08:51 +09:00
09-type-modifier-overridden-subtype.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
11-modifier-illegal-value-error.luau docs(audit): 10차 세션 — 병렬 에이전트 코퍼스 감사, 부정확성 7건 수정 2026-08-13 18:32:53 +09:00
12-type-attribute-generic-key-narrowing.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
14-type-nilable-default-overload.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
17-modifier-index-tableclone-chaining.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
18-relate-mutual-cycle-gc.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00
20-slot-splice-index-arithmetic.luau refactor(luau-test): 상태별 폴더로 재편 — done/review-required/rewrite-required/not-run 2026-08-13 18:02:07 +09:00