- H-158 state:Block → state:Apply(blocker), Blocker:__apply 메소드형(호출 규약 명시) - H-159 사용자 제안 _rerunRequired 홀드: fire=Update→Rerun, rawRerun이 실행 불가 상태의 요청을 홀드, _installed 폐기, Observer 대칭(전파 루프 else + bind/subscribe 1회 발화, 생성자 순서 fn→_subs) - H-160 홀드로 정정 + "error 나면 그 Effect는 죽는다" 계약 / H-161 Claim M5 스코프 / H-162 Void.luau 잎 모듈 - 감사 7→6→1→0, /code-review high 10건 중 8 반영, 둘(H-163 Slot 내부 Observer×홀드, H-164 emitFrom nil)은 문항으로 Co-authored-by: qwreey <me@qwreey.moe> Claude-Session: https://claude.ai/code/session_01546hjsYNLSMZdHdPyTZaGb
4.2 KiB
4.2 KiB
2026-08-28 — 10라운드 결정·반영 (대화형) + Claim 방향
무엇을 했나: 어제 밤 탐사자가 만든 10라운드 문항지(-round10.md §4, 7건)를
사용자가 *"하나하나 같이 보자"*라 해 대화형으로 처리하고 base/·ROADMAP.md에
반영했다. 결정의 소스는 qa-request/pre-implementation-handtrace-round10-followup.md
(사용자 발언 원문 전부 거기). 여기는 흐름과 문서에 안 들어간 것.
흐름
H-147부터. 사용자의 첫 제안("canExecute를 cleanup 아래에")에 생성자 함정을 짚었더니 *"rerun 이 're'-run 인데 초기 실행까지 담당"*이라는 더 정확한 지적 →rawRerun(force)분리. 그 다음 턴에 *"not force 로 확인하면 안 될 부분"*과 함께 뿌리를 뒤집었다:fn이 자기를 sub/unsub할 수 있다는 것 자체가 leaf (unbind/bind 불가)와 비대칭이고, 어제H-143부터 오늘까지의 결함 넷이 전부 그 허용의 파생물. (A) 금지 확정. 어제 사용자가 *"지원 안 할 이유가 딱히 없다"*고 한 것을 스스로 *"엄청난 모순이네"*로 뒤집은 자리.H-148에서 사용자가 더 큰 공백을 짚음 — 루트가 Slot일 수 없다(PlayerGui아래Slot { Shop{} }불가). 2026-08-14 기각(재바인드)과 다른 방향(claim-once· own-all)임을 archive와 대조해 확인하고research/existing-mount-plan.md신설.H-146의 "루트는 밖에서.Parent =" 예외는 하루 만에 폐기.H-149~H-154는 권고대로.H-151에서 사용자가 "우린 애초에 Refresh 를 할 필요가 없는거야" — 어제H-144에서 세운 "Refresh먼저" 하위 결정이 소멸.H-150은 사용자가 "Observer 설치 발화는 일어나는 게 맞지 않나"를 확인한 뒤 (Effect 핸들의canExecute라는 것을 갈라 답함) 확정.- 그 대화에서
:Block슈가 잔존(H-158)이 드러남 — 미결로 남김.
시행착오 / 다음 세션이 알아야 할 것
- 어제 결정 셋이 하루 만에 뒤집혔다(
H-143지원,H-144Refresh먼저,H-146루트 예외). 셋 다 "권고 (a)를 사용자가 승인"한 것이었고, 문제는 갈래 자체가 더 위의 질문(소유권 / 캐치업이 필요한가 / 루트를 누가 소유하나)을 안 묻고 증상 층위에서 만들어졌다는 것. 다음 라운드 문항지는 "이 갈래들이 공유하는 전제가 뭔가"를 한 줄 적는 습관이 필요하다. - 사용자가 결정 직전에 전제를 묻는 패턴("그게 진짜 날 수 있어?", "canExecute 가 막는다가 말이 맞아?")이 두 번 다 유효한 정정으로 이어졌다 — 그때 "맞다"로 넘기지 말고 층을 갈라 답할 것.
후속 (같은 세션) — /code-review 3건과 H-158~H-162
반영 뒤 감사 6라운드 수렴 → /code-review high 10건 중 셋이 판단 필요라 커밋
ae34cfa 뒤 사용자와 이어서 처리:
H-158:Block폐기 확정("내가 이미 그렇게 정했었는데, 전파가 안 된 부분") +__apply필드명(코퍼스는 "구현 시"로 열어뒀었다).H-160(a) + "한번 죽는게 나오면 Effect 가 전부 죽는다" 계약 상향.H-161ClaimM5 스코프.H-159— 리뷰 권고((a)Refresh복원)를 사용자가 다른 모양으로 뒤집음:_rerunRequired홀드. 대화 네 턴: (1) 홀드 제안 → 메인이fire분기 모양 제시 → (2) 사용자: cleanup 중 변경도 홀드해야(포탈),fire는 그냥Rerun,force≈_rerunRequired→ (3) 메인:_installed를_rerunRequired로 통합 제안 → (4) 사용자:from == nil가드 의문(→ 출처Epoch와 값nil의 혼동을 갈라 답함), "force 는 딱 하나의 역할". 결정의 소스는 followupH-159절.H-162Voidexport(사용자 발의). 교훈: 리뷰 권고 (a)가 "옛 메커니즘 복원"일 때는 사용자가 더 단순한 새 모양을 갖고 있을 가능성이 높다 —Refresh(두 번째 갱신 경로) 대신 홀드 플래그(갱신 경로는 하나, 실행만 미룸). 이번 세션에서_installed가 사라진 것처럼 통합 기회도 같이 온다.