B절(설명 보강 재질문) 전부 확인됨. 확인 과정에서 나온 보강: - B-1: (A) 분기는 "교체"라 stack-down이 아니고 retractFrom만 스택을 역순으로 푼다는 구분을 명시. "자기 아래는 이미 정리된 뒤" 보장도 retractFrom 한정이고, (A)에서 아래가 살아 있는 게 깜빡임 없는 갈아끼우기의 근거. - B-3: 고아 체인이 실제로 어떻게 생기는지 가상 위반 예시(MaybeWrapHandler) 추가. - B-4: "Brand는 데이터 타입에 부작용 없이 런타임 명시 타이핑을 하기 위한 것"을 존재 이유로 명시하고, duck-typing 기각 근거를 정확성/안전성 둘로 분리. C절 결정 반영: - C-3: flatten의 정확한 형태 확정 — in-place 뮤테이션(클론 안 함), ProcessedModifier로 소진, 인라인 우선이 `~= nil` 하나로 성립. 단 주신 코드의 반복 방향은 역순이어야 "나중 modifier가 우선"이 성립해서 그것만 정정(F-4-2). - C-4: destroySlotTree의 명시적 releaseOwner 제거. 파괴된 걸 재사용하는 코드는 그 자체로 버그이므로 "비결정적으로 실패"보다 "항상 실패"가 낫다. - C-6: recompute의 sourceList[i] == nil을 skip에서 즉시 error로 승격. 재추적 결과 도달 경로가 없으므로 관측되면 부기가 깨진 것. - C-7: "부기가 물리 트리 조작보다 항상 먼저"를 일반 계약으로 승격. 빼기는 물리 먼저/넣기는 부기 먼저가 같은 원칙(좁은 쪽이 먼저)의 두 얼굴이라는 것과, yield 금지 덕에 프레임 경계가 안 끼므로 진짜 근거는 "백엔드가 전제할 수 있게 하나로 고정"이라는 것까지. followup F절에 남은 것: KeyGone 홀드 + Owned 설치 플래그 설계 제안(F-3), 단일 일반화 for 전환 여부/flatten 반복 방향/setLength 위치(F-4). Co-authored-by: qwreey <me@qwreey.moe> |
||
|---|---|---|
| .. | ||
| .gitkeep | ||
| pre-implementation-qa-round1.md | ||
| pre-implementation-qa-round2.md | ||
| pre-implementation-qa-round3.md | ||
| pre-implementation-qa-round4-followup.md | ||
| pre-implementation-qa-round4-response.md | ||
| pre-implementation-qa-round4.md | ||