혼합 출처 KB(위키+jira 등)에서 색인은 전부 하되 질의 시 출처로 좁히는 provenance 레버. 전역 trust 곱셈가중(weighted-RRF)은 A/B 에서 반증(θ=0.85 만으로 incident MRR 0.918→0.340 절벽, 점수 압축) — 필터가 see-saw 없는 올바른 레버. - config [[workspace.sources]] (각 id/root/exclude/trust_level/source_type); 단일 root 는 implicit `default` source 로 정규화. validate: id 유일·비어있지 않음. - config schema v3→v4 (step_3_to_4, root→[[workspace.sources]] id=default 미러, 멱등) - V014 documents.source_id 컬럼+인덱스 (additive, DEFAULT 'default', 재색인 0) - Metadata.source_id + BodyHints trust precedence(frontmatter > source 기본값 > Primary) - ingest: --root 미지정 시 resolved_sources() 순회 + doc 마다 source_id/trust stamp - 검색 SearchFilters.source_type/source_id → lexical + vector 두 site (IN, OR) - CLI kebab search --source <id> / --source-type <type> (repeatable/comma-sep) 도그푸딩(620 doc, jira400+wiki220): --source wiki 로 개념 질의 MRR 0.780→0.810, --source jira 로 incident 0.918→0.975. trust precedence 실측(jira=secondary 기본값). version bump 0.28.0 → 0.29.0 (신규 CLI flag + config 키 + V014 migration → minor). follow-up: MCP search 필터 미노출 · kebab list source_id 미표시 · RAG provenance 라벨. 자세한 내용: tasks/HOTFIXES.md (2026-06-21), docs/release-notes/v0.29.0-draft.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
5.6 KiB
title, created, status, release_trigger
| title | created | status | release_trigger | |||
|---|---|---|---|---|---|---|
| kebab v0.29.0 release notes (draft) | 2026-06-21 | draft |
|
kebab v0.29.0 — provenance 출처 필터: 멀티소스 + --source
v0.28.0(config 스키마 재편) 후속 minor release. 혼합 출처 KB — 예컨대 위키
문서와 jira 이슈를 한 KB 에 같이 넣은 경우 — 에서 색인은 전부 하되 질의 시
출처로 좁히는 provenance 레버를 추가한다. 기존 단일-폴더 사용자는 아무것도
손대지 않아도 된다 — 단일 workspace.root 는 자동으로 default 라는 하나의
source 로 정규화되고, 새 DB 컬럼은 기존 문서에 default 를 자동 채우는 additive
마이그레이션이라 재색인이 발생하지 않는다.
변경 사실
1) 검색 출처 필터 2종. kebab search 에 두 필터가 생겼다.
| flag | 의미 |
|---|---|
--source <id> |
[[workspace.sources]] 에 선언한 source 의 id 로 필터 (예: --source jira) |
--source-type <type> |
markdown / note / paper / reference / inbox 로 필터 |
둘 다 반복(--source a --source b) 또는 콤마(--source a,b)로 여러 값을 줄 수
있고 OR 로 묶인다. 빈 값 = 무필터. lexical · vector · hybrid 모든 검색 모드에
동일하게 적용된다(직접 인덱스 컬럼 — 추가 비용 거의 없음).
2) [[workspace.sources]] 멀티소스 config. 단일 [workspace] root 대신
여러 폴더를 명명 source 로 선언할 수 있다.
[[workspace.sources]]
id = "notes"
root = "~/KnowledgeBase/notes"
[[workspace.sources]]
id = "jira"
root = "~/exports/jira"
trust_level = "secondary" # frontmatter 가 없을 때의 출처 기본 신뢰도
source_type = "reference" # frontmatter 가 없을 때의 출처 기본 타입
각 source 의 id 는 그 폴더에서 색인된 모든 문서에 stamp 되고
(documents.source_id 컬럼), --source <id> 필터의 대상이 된다.
trust_level / source_type 은 출처 기본값으로, 문서 frontmatter 가 해당
필드를 지정하지 않을 때만 적용된다 (우선순위: frontmatter > source 기본값 >
하드코딩 Primary/Markdown). kebab ingest 는 --root 를 주지 않으면 선언된
모든 source 를 각자의 root + exclude 로 순회한다.
Trade-off — 왜 필터인가 (전역 trust 가중은 반증됨)
"출처가 섞이면 신뢰도로 가중하면 되지 않나?" 를 통제 실험으로 검증했고, 전역 trust 곱셈가중은 반증됐다. jira 를 docs KB 에 섞으면 개념 질의는 약하게 오염(top-3 정답은 유지, rank1→2 강등)되지만 운영/이슈 질의는 크게 개선된다 (jira_only hit@10 0/10 → 10/10). 그런데 jira 점수에 θ=0.85 만 곱해도 RAG 점수 압축 때문에 incident MRR 이 0.918→0.340 으로 절벽 하락한다 — 작은 오염을 잡으려다 큰 개선을 버리는 see-saw. 그래서 전역 가중은 빌드하지 않았다.
올바른 레버는 질의 시 출처 필터링이다: 색인은 전부 해 두고(운영 질의는
jira 가 답하게), 개념 질의에서만 --source wiki 로 좁힌다. see-saw 없이 양쪽을
다 얻는다.
Mitigation — 기존 사용자 무영향 (재색인 0)
- 단일 root 그대로 동작:
[[workspace.sources]]를 선언하지 않으면 기존workspace.root가 implicitdefaultsource 로 정규화된다. 모든 문서가source_id = "default". - V014 는 additive:
documents.source_id컬럼은DEFAULT 'default'라 기존 row 가 자동으로 채워진다. 데이터 재작성·재색인·corpus_revisionbump 없음. - config v3→v4 자동 변환: load 시 메모리에서 자동 변환(디스크 미변경),
kebab config migrate로 파일 갱신 시 값·주석 보존 + 멱등. 단일root는[[workspace.sources]]id=default 로 미러되며 기존root키도 그대로 남는다.
도그푸딩(v0.29.0 release 빌드, 실험 corpus): 620 문서 / 0 error 색인,
source_id = {jira: 400, wiki: 220}. trust precedence 실측 — jira 는 source
기본값 secondary 라 --trust-min primary 시 0/6 노출, wiki 는 primary 유지.
출처 필터 실측 — --source wiki 로 개념 질의 MRR 0.780→0.810(오염 회복),
--source jira 로 incident 0.918→0.975.
Upgrade 절차
- 아무것도 안 해도 된다 — 기존
config.toml과 KB 는 그대로 동작한다(단일 root =defaultsource, V014 자동 backfill). - 출처를 나누고 싶으면
kebab config migrate로 config 를 v4 로 갱신한 뒤[[workspace.sources]]블록을 손으로 추가하고kebab ingest --force-reingest로 각 문서에 새source_id를 stamp 한다. (단순ingest는 내용이 안 바뀐 문서를 skip 하므로, 기존 문서의 source_id 를default외 값으로 바꾸려면--force-reingest필요.) - 검색에서
--source <id>/--source-type <type>로 출처를 좁힌다.
Known limitations / 다음
- MCP search 도구는 아직
--source/--source-type를 노출하지 않는다 (CLI 전용). agent 용 MCP 필터 노출은 다음 additive 후보. kebab list출력(doc_summary.v1)에source_id가 아직 안 실린다.kebab askcitation 에 provenance 라벨이 아직 없다 — 검색 필터는 되지만 답변 근거의 출처 표기는 다음 단계.