refactor: audit-tail 정리 — FusionPolicy inline + dual-YAML 통일 + NLI required #222
Reference in New Issue
Block a user
Delete Branch "refactor/audit-tail-micro-cleanups"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
요약
ponytail-audit 의 작은 over-engineering 잔여 3건을 한 PR 로 마무리한다. 셋 다 output/동작 불변 (RRF 수식·YAML 파싱·prod NLI 동작 그대로).
audit cleanup arc 의 마지막 코드 PR. (tier2_shared 인라인은 3 callsite 의 정당한 DRY 라 over-engineering 아님 → 제외.)
변경
enum FusionPolicy { Rrf { k_rrf } }는 변종 하나뿐이고 kebab-search 외부 importer 0.HybridRetriever가k_rrf: u32를 직접 보유하도록 inline,parse_fusion은u32반환. RRF 점수Σ 1/(k_rrf+rank)byte-identical, 기존 fusion 테스트 무수정 통과.serde_yaml(0.9) +serde_yaml_ng(0.10, maintained fork) 둘을 끌던 걸 ng 하나로. k8s manifest chunker + eval golden loader 2 site 를 ng 로 마이그레이션(API drop-in),serde_yamlworkspace dep 제거. 파싱 결과 불변.Ok(0)default 제거 → required [kebab-nli] — prodOnnxNliVerifier가 이미 override 라 prod 동작 불변.MockNliVerifier에 explicitOk(0)추가(SpyNliVerifier는 이미 보유). backward-compat shim default 제거.비범위 / 가드레일
/(2/(k_rrf+1)))는 pre-existing — 본 PR 미변경(순위 보존).kebab-parse-md의serde_yamlfork-선택 rationale 주석(설명용)은 그대로 유지.검증
cargo test -p kebab-search -p kebab-chunk -p kebab-eval -p kebab-nli -p kebab-rag전부 녹색 (RRF formula·k8s manifest·golden loader·multi-hop NLI 테스트 포함).cargo build --workspace성공(serde_yaml 완전 제거, Cargo.lock 반영).cargo clippy -D warnings클린.시험 항목 (Test Plan)
kebab search --mode hybrid결과 순위가 이전과 동일 (RRF 수식 불변).kebab eval run(golden YAML 로드) 정상.kebab ask --multi-hop의 NLI 검증 동작 불변.Assisted-by: Claude Code
ponytail-audit 의 작은 over-engineering 잔여 3건 (output/동작 불변): 1. FusionPolicy 1-arm enum 제거 — kebab-search 내부 전용(외부 importer 0)이던 `enum FusionPolicy { Rrf { k_rrf } }` 를 `HybridRetriever.k_rrf: u32` 로 inline. parse_fusion 은 u32 반환. RRF 수식 `Σ 1/(k_rrf+rank)` byte-identical. 2. dual YAML 통일 — serde_yaml(0.9) 를 maintained fork serde_yaml_ng(0.10) 로 일원화. k8s manifest chunker + eval golden loader 2 site 마이그레이션(API drop-in), workspace dep 에서 serde_yaml 제거. parse 결과 불변. 3. NliVerifier::hypothesis_token_count 의 `Ok(0)` default 제거 → required. prod OnnxNliVerifier 가 이미 override 라 동작 불변, MockNliVerifier 에 explicit 추가. 문서 동기화: search/eval/parse component README + ARCHITECTURE 의 FusionPolicy/ serde_yaml 참조를 현 상태로 갱신. net −37줄. 적대적 검증 2렌즈(output-identity + completeness-build) 통과, 영향 crate 테스트 + clippy -D warnings 클린. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La리뷰 nit: dropped serde_yaml 은 workspace-pinned 였는데 대체 serde_yaml_ng 가 3 crate 에 개별 "0.10" 하드코딩이라 single-version-pin invariant 깨짐. `[workspace.dependencies]` 에 serde_yaml_ng = "0.10" 추가 + kebab-chunk/eval/ parse-md(사전존재 하드코딩 포함) 를 { workspace = true } 로 통일 — 워크스페이스의 다른 공유 dep 과 동일 컨벤션. 빌드 dep resolution 불변(0.10.0 단일). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La회차 2 — 회차 1 의 actionable nit(serde_yaml_ng workspace pin 복원) 반영 확인. info 항목(required method = trait-API break)은 단일 바이너리 monorepo 라 외부 구현자 0 → 무영향, non-actionable.
독립 검증 요지:
머지 동의합니다.