fix(cli): honor --config flag in kb ask (P4-3 follow-up)
#24
Reference in New Issue
Block a user
Delete Branch "fix/cli-ask-honor-config-flag"
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?
변경 요약
P3-5 hotfix가
--configflag를 ingest / search / list / inspect / doctor에 wire했지만 P4-3가 ask 본체를 추가할 때 kb-cli의Cmd::Askarm이 여전히kb_app::ask(query, opts)을 직접 호출하고 있었습니다. 같은 버그 패턴이 ask에서 silent하게 재현 —--config <path>을 패스해도~/.config/kb/config.toml로 fallback.발견 경위
P4-3 머지 후
/tmp/kb-smoke/을 192.168.0.47 Ollama (gemma4:26b)에 연결해서 ask 스모크 수행 중 발견:/tmp/kb-smoke/config.toml은gemma4:26b인데 응답에서는 사용자 XDG의qwen2.5:14b-instruct가 surface. score_gate, data_dir, embedding 모두 XDG default.--config자체가 무시되고 있었습니다.수정
P3-5 hotfix와 동일 패턴:
검증
수정 후 동일 query:
스모크 4개 시나리오 모두 통과:
[#2]rust/ownership.md[#1]arch/rag-architecture.md[#1]arch/embeddings.md워크스페이스 319 passed, clippy clean.
후속으로 발견된 별도 버그 (이 PR 밖)
config.rag.score_gatedefault0.05이 hybrid mode RRF 점수 범위와 incompatible. RRF top은(0, 2/k_rrf]즉 defaultk_rrf=60에서 ≤0.033bounded이라 default 0.05이면 모든 hybrid query에서 ScoreGate refusal. 워크어라운드는 사용자 config에서 0.005로 낮추는 것. 장기 수정은 (a) per-mode gate config 또는 (b) RRF 점수를 [0, 1]로 정규화. 별도 task로 분리.변경 파일
crates/kb-cli/src/main.rs(2줄: Config::load + ask_with_config)kb ask(P4-3 follow-up) ed8bf87c65P4-3 follow-up 핫픽스 코드 리뷰 — 셀프 머지 게이트로 인해 COMMENT only.
P3-5에서 닫았던 "--config 무시" 버그가 P4-3의 ask path에서 silent하게 재현되고 있었습니다. 한 줄 수정으로 같은 패턴 적용. 직접 워크스페이스 (192.168.0.47 Ollama + gemma4:26b)에서 4개 시나리오 모두 검증:
[#2][#1][#1]워크스페이스 319 tests pass, clippy clean.
후속으로 별도 버그 발견:
config.rag.score_gatedefault가 hybrid RRF 점수 범위와 incompatible (0.05 vs ≤0.033). 워크어라운드 = 사용자 config에서 0.005로 낮추기. 별도 task로 분리.머지 진행해도 됩니다.
후속으로 발견된 별도 버그:
config.rag.score_gatedefault 0.05이 hybrid mode RRF 점수 범위 (0, 2/k_rrf ≈ 0.033]과 incompatible — 모든 hybrid query에서 ScoreGate refusal. 본 PR 범위 밖이지만 별도 task로 분리해야 함. 장기 fix는 per-mode gate 또는 RRF [0,1] 정규화.@@ -320,6 +320,7 @@ fn run(cli: &Cli) -> anyhow::Result<()> {temperature,seed,} => {let cfg = kb_config::Config::load(cli.config.as_deref())?;P3-5 hotfix와 동일 패턴 — Config::load(cli.config.as_deref())로 한 번 빌드 후 *_with_config 변형에 thread. P4-3 시점에 ask body가 추가되었지만 CLI가 여전히
kb_app::ask(no-config) 직접 호출하던 회귀를 닫음. 한 줄 수정인데 사용자 입장에서는 "왜 --config가 무시되지?" 디버깅 비용이 컸던 케이스.