quad/.claude/session/2026-08-31-01-unit2-code-review.md
qwreey-agent-selene dc81dd26db
feat: 단위 2 /code-review high 반영 — ① 여섯(H-199/H-201/H-202/H-204/H-206/H-207) + ② 넷(H-198/H-200/H-203/H-205) §4 합류
체크포인트 재개 첫 항목. 8각도 후보 22 → 검증 생존 10(정확성 8건 실측 재현).

- H-199: With/Compute nil dep 조용한 탈락 → collectDeps + "dep #N is nil"(level 3)
- H-201: store:Of 이름 문자열 검증(할당 전, level 2)
- H-202: Compute fn 함수 검증(형제 표면과 같은 급)
- H-204: Store defaults 평범한 테이블 검증(clone 전)
- H-206: implsOf 세 벌 → ImplRegistry.luau 신설(잎, 내부 전용)
- H-207: Source.Set이 Impl.Emit 직접 호출로 위임(꼬리 한 벌)
- ② 넷은 코드에 TODO 마커만, 문항은 round11.md §4(마커 10 = 문항 10, 1:1)
- H-198(🔴 닫힌 게이트 너머 fn 도중 Set → 영구 stale)은 state-epoch-plan §4
  확정 의사코드 자체의 구멍 — 그 절에 ⚠️ 결정 대기 배너, README 색인 갱신
- architecture.md: ImplRegistry 소스 트리 등재, error 계약 "도착지가 계약" 명료화
- spec.state 13절·spec.store 2·3절 신설/확장, 감사 2라운드(6건 → 니트 2) 반영

Co-authored-by: qwreey <me@qwreey.moe>
Claude-Session: https://claude.ai/code/session_01LF78pXeFGD1ZSVD3ifteYG
2026-08-31 11:39:42 +09:00

3.6 KiB

2026-08-31-01 — 체크포인트 재개: 단위 2 /code-review high 완주와 반영

맥락

2026-08-29 아침 체크포인트(session/2026-08-28-03-m2-unit1-common-base.md 마지막 절)의 재개 지점 둘 중, 사용자가 *"미완인 것 먼저 처리해줘"*로 (2) 단위 2 파일 리뷰를 먼저 지시했다. §4 문항 여섯(H-182~H-187)의 회신은 이 세션 시작 시점에 아직 없음.

부수 결정 하나 — 사용자: "이건 pre-implementation 은 아닌듯 하네, 이름은 나중에 바꾸자". pre-implementation-handtrace-round11*.md는 구현 발견 문서라 이름이 안 맞는다는 것. 이름 변경은 §4 회신 처리 뒤로 미룸(문항지·brief와 인용처를 한꺼번에 옮겨야 해서) — 아직 안 했고, 잊지 말 것.

포크 조기 반환과 재개

/code-review high + 경로 넷(EpochMap/Source/State/Store)으로 실행. 체크포인트가 기록한 실패 모드(하위 탐색자 완료 전 포크 조기 반환)가 이번에도 재현됐다 — 첫 notification 시점에 파인더 4개가 미완인 채 멈춤. 이번엔 opus 대체가 아니라 SendMessage로 포크를 재개(나머지 파인더 수거 → dedup → 검증 → ReportFindings까지 끝내고 턴을 닫으라고 명시)했고, 그걸로 완주했다. 다음에 같은 패턴이 나오면 이 방법을 먼저 쓸 것 — 재실행보다 싸고(이미 돈 파인더 결과를 버리지 않음) 잘 듣는다.

결과 — 8각도, 후보 22 → 검증 생존 10

정확성 8건 전부 실제 코드에 재현 스크립트로 확인. 효율 배치는 리뷰 스스로 "관측된 병목에만 구조" 원칙 위반으로 기각, 약한 정리 항목들은 심각도 미달 기각. 발견 상세와 처리의 소스는 qa-request/pre-implementation-handtrace-round11.md(요약 표 H-198~H-207, 상세 절 "단위 2 — /code-review high") — 여기선 갈래만:

  • ① 여섯(같은 커밋에서 반영): H-199(nil dep 조용한 탈락 — collectDeps + error), H-201(Of 이름 문자열 검증), H-202(Compute fn 검증), H-204(defaults 평범한 테이블 검증), H-206(implsOf 세 벌 → ImplRegistry.luau 신설), H-207(Source.SetEmit 꼬리 위임). 검증 셋은 H-190·단위 3 fn 검사와 같은 급(형제 검증과 동급), 중복 제거 둘은 conventions 설계 원칙의 공유 허용 범위(데이터/순수 접근, 같은 타입).
  • ② 넷(§4 문항 + TODO 마커): H-198 🔴(닫힌 게이트 너머 fn 도중 Set → 영구 stale 캐시 — state-epoch-plan.md §4 확정 의사코드 자체의 구멍, H-85와 같은 실패 계열의 게이트 경유 변형), H-200(Gate setup throw 좀비 노드 — 예외 계약 UB냐 H-188 연장이냐), H-203(Blocker:Off 순회 중 재차단 무시 — 탐사자는 §5에서 미지원 연장으로 봤고 리뷰는 IsOn 불변식 위반으로 봄), H-205(Modifier 가드 level — lazy 체인이라 어떤 고정 level도 항상은 유저 코드에 못 닿음).

리뷰가 확인한 "이상 없음" 목록과 기각 중 기록할 것 하나(Effect Ref dep의 생성 중 onRefFire 즉시 발화 — 신선한 Effect는 canExecute 거짓이라 실패 불가)는 round11.md의 "단위 2 리뷰가 이상 없다고 확인한 것" 절로.

이 시점 상태

./scripts/test.sh 전부 통과(spec.state 13절·spec.store 2·3절에 새 가드 테스트 추가), luau-analyze 진단 0, 코드 마커 TODO(H-) 열 개 = §4 문항 열 개와 1:1. 재개 지점은 §4 배치 회신 하나로 줄었다(여섯 + 이번 넷). M2 종료 보고는 그 회신 처리 뒤.