• v0.13.0 Stable

    altair823 released this 2026-05-20 11:58:11 +00:00 | 382 commits to main since this release

    Minor release — Java + Kotlin AST 색인 활성화 (p10-1C phase 완성).

    사용자-가시 변경

    • .java 파일 색인 활성. tree-sitter-java AST chunker (code-java-ast-v1). 5 type declarations (class / interface / enum / record / annotation_type) + method + constructor + nested class. Symbol: com.foo.Foo.bar (package.Class.method, design §3.4).
    • .kt / .kts 파일 색인 활성. tree-sitter-kotlin-ng AST chunker (code-kotlin-ast-v1). Class / data class / sealed class / enum class / interface (one class_declaration node) + object_declaration + companion_object + top-level function_declaration (Kotlin-specific) + secondary_constructor. Symbol: same package.Class.method 또는 package.<top-level-fn>.
    • kebab search --code-lang java --json / --code-lang kotlin --jsonCitation::Code { kind: "code", lang, symbol, ... } 반환.
    • kebab schema --json | jq .stats.code_lang_breakdown"java" + "kotlin" 카운트.

    동결된 설계 결정

    • Symbol prefix = 소스의 package 선언 (1C-Go 모델 동일):
      • Java: package_declarationscoped_identifier / identifier.
      • Kotlin: package_headerqualified_identifier.
    • tree-sitter-kotlin-ng 선택 (bare tree-sitter-kotlin = "0.3.8" 는 tree-sitter 0.21-0.23 만 지원 → 0.26 incompatible; -ng fork 가 tree-sitter-language = "0.1" shim 으로 0.24+ 호환).

    검증

    • cargo test --workspace --no-fail-fast -j 1 exit 0
    • cargo clippy --workspace --all-targets -- -D warnings clean
    • Manual SMOKE: Java com.foo.Foo.bar, Kotlin class com.foo.Bar.baz, Kotlin top-level fn com.foo.freeFn

    1C phase 완성

    Sub-PR Lang Release
    1C-Go (#151) Go v0.12.0
    1C-JK (#152) Java + Kotlin v0.13.0

    다음 phase: p10-1D (C + C++).

    영향

    • wire schema additive (1A-2 Citation::Code 그대로, lang values 확장).
    • frozen design 변경 없음.
    • 기존 색인 데이터 invalidation 없음.

    누적 코드 색인 활성화

    Phase Languages Release
    1A-2 Rust v0.7.0
    1B Python + TypeScript + JavaScript v0.8.0
    1C-Go Go v0.12.0
    1C-JK Java + Kotlin v0.13.0
    1D C + C++ next
    Downloads
  • v0.12.0 Stable

    altair823 released this 2026-05-20 10:16:39 +00:00 | 395 commits to main since this release

    Minor release — Go AST 색인 활성화 (p10-1C 의 첫 절반).

    사용자-가시 변경

    • .go 파일 색인 활성. tree-sitter-go AST chunker (code-go-ast-v1) 가 function / method / type (struct/interface/type alias) / glue (import/const/var) 단위로 chunk. parser_version code-go-v1.
    • Symbol path: design §3.4 그대로 — <pkg>.<Func> / <pkg>.(*Receiver).<Method> (포인터) / <pkg>.(Receiver).<Method> (value). 예: chunk.ParseDoc, chunk.(*MdHeadingV1Chunker).ChunkDoc. pkg 은 소스의 package <name> 선언에서 추출 (1B 의 workspace-path 변환과 다른 모델).
    • kebab search --code-lang go --jsoncitation.kind = "code", citation.lang = "go", citation.symbol (위 형식), repo 반환.
    • kebab schema --json | jq .stats.code_lang_breakdown"go" 카운트.

    변경 위치

    • tree-sitter-go = "0.25" workspace dep.
    • crates/kebab-parse-code/src/go.rs: GoAstExtractor (source-side package_clause 추출 + method receiver pointer detection).
    • crates/kebab-chunk/src/code_go_ast_v1.rs: 1A-2 code-rust-ast-v1 near-duplicate.
    • crates/kebab-source-fs/src/media.rs: .go 라우팅.
    • crates/kebab-app/src/lib.rs: dispatch allowlist + 4 match arm 활성화.
    • 회귀 통합 테스트 (go_file_ingests_and_searches_as_code_citation) + extractor 단위 테스트 (3) + chunker 단위 테스트 (6) + snapshot (2).
    • README + HANDOFF + ARCHITECTURE + SMOKE + tasks/INDEX + tasks/p10/INDEX + design §10.1.

    안전 보장 (이전 PR invariants 유지)

    • twin-file idempotent (PR #146)
    • file deletion auto-purge (PR #148)
    • reset --orphans-only (PR #149)
    • assets.workspace_path semantic (PR #150)

    영향

    • wire schema additive (code_lang = "go" 값 추가, 1A-2 wire shape 동일).
    • frozen design 변경 없음 (§3.4 Go row 가 이미 본 구현과 일치, §10.1 dated note 만 추가).
    • 기존 색인 데이터 invalidation 없음.

    다음 PR

    p10-1C-JavaKotlin — Java + Kotlin AST chunkers (code-java-ast-v1, code-kotlin-ast-v1). JVM family 공통 (package com.foo.bar 형식), 별 PR 진행 예정.

    Downloads
  • v0.11.1 Stable

    altair823 released this 2026-05-20 08:09:48 +00:00 | 405 commits to main since this release

    Patch release — dogfood semantic cleanup (PR #150).

    사용자-가시 변경

    • (rare) twin file (동일 content / 다른 path) 의 kebab fetch span <doc_id> <start> <end> 가 잘못된 asset row 의 media_type 으로 PDF/audio 분기 판단할 가능성 fix.
    • 외부 wire / CLI / config surface 변경 없음 — internal lookup 만 document-centric 으로 일관화.

    변경

    • 새 internal trait method DocumentStore::get_asset(asset_id) -> Option<RawAsset> — asset_id PK 직접 조회, flip-flop immune.
    • fetch.rs::fetch_span: get_asset_by_workspace_path(&doc.workspace_path)get_asset(&doc.source_asset_id) 2-step lookup.
    • assets.workspace_path 의 "last-registered path" semantic 을 UPSERT doc-comment 에 명시 (미래 reader 가 flip-flop 을 "fix" 하려고 시도하지 않도록).
    • get_asset_by_workspace_path trait method 는 보존 (back-compat — production caller 0 이나 store-sqlite round-trip test 유지).
    • 회귀 통합 테스트 twin_files_fetch_span_uses_correct_asset 추가.

    영향

    • wire schema 변경 없음.
    • frozen design 변경 없음 (semantic doc 만 명시).
    • 기존 색인 데이터 invalidation 없음.

    Dogfood 사이클 사실상 종료

    본 PR 로 multi-root dogfooding 의 모든 bug + 우선순위 1, 3 issue 처리 완료.

    남은 후보:

    • Ranking 편향 (본문 vs 테스트 code 우선) — design brainstorm 필요한 별도 큰 task
    • get_asset_by_workspace_path #[deprecated] annotation — PR #150 review 제안, 선택적 cleanup
    Downloads
  • v0.11.0 Stable

    altair823 released this 2026-05-20 07:53:57 +00:00 | 408 commits to main since this release

    Minor release — kebab reset --orphans-only (dogfooding follow-up to v0.10.0).

    사용자-가시 변경

    • 새 CLI flag kebab reset --orphans-only: walker scope 외 stored doc 들을 명시 reconcile. PR #148 (v0.10.0) sweep 의 explicit complement — sweep 은 fs 에 살아있는 file 은 건드리지 않지만, 사용자가 include 좁히거나 sub-dir 옮긴 후 명시 정리 원할 때 이 명령 사용.
    • 동작: 현재 config 로 walker scan → stored - scanned 의 모든 path purge (fs existence 검사 없음). Twin-file 보호 + vector store delete_by_chunk_ids 동시 처리.
    • Confirm UI (TTY): orphan count + sample 5 paths + [y/N]. non-TTY 는 --yes 필수.
    • 새 wire 필드 (additive): ResetReport.orphans_purged: u32 + purged_paths: Vec<WorkspacePath> (#[serde(default)] 로 back-compat).
    • README + docs/wire-schema/v1/reset_report.schema.json 동시 갱신.

    안전 보장

    • Twin-file 보호: purge_deleted_workspace_path 의 COUNT-check (PR #146 invariant) 유지 — 동일 content 다른 path 의 asset row 가 다른 doc 에 의해 참조되면 보존.
    • Vector store None (lexical-only) 케이스: vector delete 단계 skip.
    • 사용자 데이터 안전: confirm prompt (TTY) 또는 explicit --yes (non-TTY) 필수.
    • fs file 은 절대 안 건드림 — store-internal purge only.

    영향

    • wire schema additive (back-compat).
    • frozen design 변경 없음.
    • 기존 색인 데이터 invalidation 없음.

    다음 dogfood 후보

    • Asset table workspace_path flip-flop (PR #146 이후 user-impact 0, semantic cleanup).
    • Ranking 편향 (본문 vs 테스트 코드 우선) — design brainstorm 필요.
    Downloads
  • v0.10.0 Stable

    altair823 released this 2026-05-20 07:13:00 +00:00 | 412 commits to main since this release

    Minor release — filesystem deletion 자동 reconcile (dogfooding follow-up).

    사용자-가시 변경

    • rm a.mdkebab ingest 시 stored doc/chunks/embeddings 가 자동 purge. 이전: 그대로 남아 search 에 ghost citation. 이후: walker scan 직후 sweep 단계에서 fs::try_exists() 확인 → file 부재 시 SQLite cascade delete + (copied 모드면) on-disk storage 파일 best-effort 정리 + vector store delete_by_chunk_ids.
    • IngestReport.purged_deleted_files: u32 새 wire 필드 (#[serde(default)], additive minor).
    • CLI summarypurged N 표기 (count > 0 일 때만).

    안전 보장 (사용자 데이터 보호)

    • config.workspace.include 좁아짐으로 walker scope 가 좁아진 경우 → purge 안 함 (file 이 fs 에 살아있으므로). 사용자 명시 kebab reset 명령 필요.
    • transient FS error (EACCES / NFS hiccup / 권한 변경) 시 → 보수적으로 "file 존재" 가정 → purge 안 함.
    • Twin-file 보호: 동일 content 다른 path 의 두 파일 중 하나 삭제 시 → 해당 doc 만 purge, 공유 assets row 는 다른 doc 이 참조하면 보존 (PR #146 invariant 유지).

    변경 위치

    • crates/kebab-core::DocumentStore::all_workspace_paths trait method.
    • crates/kebab-store-sqlite::SqliteStore::all_workspace_paths 구현.
    • crates/kebab-store-sqlite::purge_deleted_workspace_path 새 fn (twin-file COUNT-check 포함).
    • crates/kebab-app::sweep_deleted_files (walker scan 직후 호출).
    • crates/kebab-core::IngestReport.purged_deleted_files 필드.
    • crates/kebab-cli::main.rs summary 출력.
    • 2 회귀 통합 테스트 (file_deletion_auto_purge + include_scope_narrowing_does_not_purge).
    • snapshot baseline 갱신.

    영향

    • wire schema additive (back-compat).
    • frozen design 변경 없음.
    • 기존 색인 데이터 invalidation 없음.

    남은 dogfood 후보

    • Ranking 편향 (본문 vs 테스트 코드 우선) — design brainstorm 필요.
    • Asset table workspace_path flip-flop (semantic minor, user-impact 없음).
    • Config scope 좁아짐 시 stored orphan reconcile (kebab reset --orphans 같은 explicit 명령) — 후속.
    Downloads
  • v0.9.0 acf8cf3be2

    v0.9.0 Stable

    altair823 released this 2026-05-20 06:29:29 +00:00 | 417 commits to main since this release

    Minor release — 확장자 routing 확장 (dogfooding issue #6).

    사용자-가시 변경

    • .mts (ESM TypeScript) / .cts (CommonJS TypeScript) 가 색인됨. LANGUAGE_TYPESCRIPT grammar 가 처리. code-ts-ast-v1 chunker, symbol path 도 normal TS와 동일 (예: src/Foo.Foo.bar).
    • .mdx (Markdown + JSX) 가 색인됨. md parser 가 JSX islands 를 raw passthrough 로 처리 (pulldown-cmark 의 HTML event drop). chunker md-heading-v1.
    • kebab schema --json | jq .stats.code_lang_breakdown 에 typescript 카운트가 늘어남 (.ts/.tsx 와 합산).

    변경 위치

    • crates/kebab-source-fs/src/media.rs: mts/cts → typescript, mdx → markdown 라우팅 arms.
    • crates/kebab-parse-code/src/lang.rs: code_lang_for_path 매치 + module_path_for_tsjs ext strip 확장.
    • crates/kebab-parse-code/src/typescript.rs: select_grammar doc 갱신 (로직 변경 없음 — non-tsx 는 이미 LANGUAGE_TYPESCRIPT 로 라우팅).
    • 회귀 테스트 2건 추가, 기존 테스트 케이스 2개 확장.

    영향 없음

    • wire schema / frozen design 변경 없음.
    • 기존 색인 데이터 invalidation 없음 — 다음 ingest 시 새 파일만 추가됨.

    남은 dogfood 후보

    • Ranking 편향 (본문 vs 테스트 코드 우선): BM25 + path weighting 검토 필요 — 별도 후속.
    • Asset table workspace_path flip-flop (semantic minor, user-impact 없음).
    Downloads
  • v0.8.3 5a90940f1c

    v0.8.3 Stable

    altair823 released this 2026-05-20 06:20:37 +00:00 | 420 commits to main since this release

    Bug fix release — multi-root dogfooding 의 3번째 발견 production bug fix.

    사용자-가시 변경

    • Idempotent re-ingest 가 twin files (동일 content / 다른 path — 예: 빈 __init__.py ×3, AGENTS.mdCLAUDE.md 동일 content, 중복 로고 PDF/JPG) 에 대해 정확히 Unchanged 반환. 이전: 매 ingest 마다 Updated 로 잘못 분류.

    진단 요약

    assets.asset_id (= blake3 content hash) 가 PRIMARY KEY 라 동일 content 두 파일이 한 asset row 공유. UPSERT ON CONFLICT(asset_id) DO UPDATE SET workspace_path = excluded.workspace_path 가 매번 path 를 덮어씀 → get_asset_by_workspace_path(path) 가 잘못된/None 반환.

    Fix

    try_skip_unchanged 를 document-centric lookup 으로 전환. documents.workspace_path 는 V001 부터 이미 UNIQUE, id_for_doc(path, asset_id, parser_version) 이 path 포함이라 twin files 각자 별도 doc row 안정. Schema migration 불필요.

    변경 위치

    • crates/kebab-core/src/traits.rs: DocumentStore::get_document_by_workspace_path trait method 추가
    • crates/kebab-store-sqlite/src/documents.rs: 구현 (기존 get_document 의 SELECT + row 변환 재사용)
    • crates/kebab-app/src/lib.rs::try_skip_unchanged: document-side lookup + explicit parser_version 비교
    • crates/kebab-app/tests/twin_files_idempotent.rs: 회귀 통합 테스트

    영향 없음

    • wire schema 변경 없음.
    • frozen design 변경 없음.
    • 데이터 invalidation 없음.

    남은 minor issue

    • assets.workspace_path 가 twin files 사이 flip-flop — try_skip_unchanged 는 이제 무관하지만 asset row 의 path semantic 모호. 별도 follow-up cleanup PR 가치 (선택).
    Downloads
  • v0.8.2 08fb743598

    v0.8.2 Stable

    altair823 released this 2026-05-20 05:20:50 +00:00 | 424 commits to main since this release

    Bug fix release — multi-root dogfooding (kebab-docs + httpx + zod + lodash) 으로 발견된 1A-1/1A-2 origin 누락 surface 복원.

    사용자-가시 변경

    • kebab schema --json | jq .stats.repo_breakdown 가 실제 채워짐. 이전: 항상 {}. 이후: metadata.repo set 된 doc 들의 repo→count 매핑 (e.g. {"httpx": 60, "zod": 401, "lodash": 50}).
    • workspace.include config glob 이 walker 에서 실제 enforce. 이전: 무시 → 모든 파일 색인. 이후: allow-list (empty=모두, non-empty=매치 필요) + exclude AND.

    변경 위치

    • crates/kebab-store-sqlite/src/store.rs: repo_breakdown() query (Task 9 의 code_lang_breakdown 패턴 mirror).
    • crates/kebab-app/src/schema.rs: BTreeMap::new() placeholder → store.repo_breakdown()?.
    • crates/kebab-source-fs/src/walker.rs: WalkOverrides.include + build_include_globset() + per-file allow-list 검사.
    • crates/kebab-source-fs/src/connector.rs: 잘못된 안내 log_scope_include_warning 삭제 + &scope.include 전달.
    • 회귀 테스트 4건 추가.

    영향 없음

    • wire schema 변경 없음.
    • frozen design 변경 없음.
    • 데이터 invalidation 없음.

    남은 dogfood 항목

    asset deduplication ⊥ workspace_path uniqueness — 동일 content twin files (e.g. 빈 __init__.py) 에서 idempotent re-ingest 깨짐. V005 schema migration 필요한 별도 후속 PR 예정.

    Downloads
  • v0.8.1 16dc02cfa2

    v0.8.1 Stable

    altair823 released this 2026-05-20 03:35:38 +00:00 | 428 commits to main since this release

    Bug fix release — p10-1A-1 (PR #139) 이후 잠복했던 --code-lang / --repo filter 무시 버그 수정. p10-1B (PR #142) 머지 후 httpx + zod + lodash dogfooding 으로 표면화.

    사용자-가시 변경

    • kebab search --code-lang LANG / --repo NAME실제로 filter 적용. 이전: filter 무시 → 모든 doc (markdown / pdf / image 섞임). 이후: 지정된 code_lang / repo 의 chunk 만 반환.
    • SearchHit.code_langSearchHit.repo 가 filter-only-code-hits 일 때 정상 populated (이전엔 markdown hit 포함되며 backfill 미스로 None).
    • citation.lang / citation.symbol 이 design §3.4 형식 (Python dotted / TS·JS slash-style) 그대로 반환.

    변경 위치

    • crates/kebab-search/src/lexical.rs — FTS SQL 에 json_extract(d.metadata_json, '$.code_lang') / '$.repo' IN-list filter 추가.
    • crates/kebab-store-sqlite/src/filters.rsfilter_chunks 에 동일 filter 추가 (vector retriever 가 post-filter 로 사용).
    • 회귀 테스트 4건 추가.

    영향 없음

    • wire schema 변경 없음.
    • frozen design 변경 없음.
    • 기존 데이터 invalidation 없음 — 동일 doc / chunk / metadata, SQL filter 만 정상화.
    Downloads
  • v0.8.0 68ada396f3

    v0.8.0 Stable

    altair823 released this 2026-05-20 02:31:53 +00:00 | 431 commits to main since this release

    변경사항 (since v0.6.0)

    • #143 fix(p10-1b): apply round-1 lang.rs doc + tests/ test case missed in 4503b5b
    • #142 feat(p10-1B): Python + TS/JS AST chunkers — tree-sitter-{python,typescript,javascript} 코드 색인 활성화
    • #141 test(eval): normalize elapsed_ms before determinism comparison (flake fix)
    • #140 feat(p10-1A-2): Rust AST chunker — tree-sitter-rust 코드 색인 활성화
    • #139 feat(p10-1a-1): code ingest framework — wire schema + parse-code crate + filter flags
      Python / TypeScript / JavaScript 코드 색인 활성화 — 1A-2 가 깐 Rust 인프라 위에 3 언어 AST extractor + chunker 추가. 머지 commit 부터 Python / TS / JS 프로젝트도 dogfooding 가능.

    사용자-가시 surface 변경

    • kebab ingest: .py / .pyi / .ts / .tsx / .js / .mjs / .cjs / .jsx 파일이 새로 지원. 언어별 tree-sitter AST chunker (code-python-ast-v1 / code-ts-ast-v1 / code-js-ast-v1) 가 함수 / 클래스 / 메서드 / interface / type alias / decorator-folded unit 단위로 chunk. parser_version code-{python,ts,js}-v1.
    • kebab search --json: code chunk hit 의 citation.lang"python" / "typescript" / "javascript" 일 수 있음. SearchHit top-level code_lang + repo 자동 채움. --code-lang python / --code-lang typescript / --code-lang javascript filter (1A-1 도입) 가 이제 실효.
    • kebab schema --json: stats.code_lang_breakdownpython / typescript / javascript 카운트 등장. stats.media_breakdown"code" 카테고리에 합산.
    • Symbol path 규약: workspace 경로 → module path 변환 (design §3.4 충실):
      • Python: kebab_eval/metrics.pydef compute_mrr()kebab_eval.metrics.compute_mrr. pkg/__init__.pypkg. 자동 strip prefix: src/, lib/, crates/<name>/src/. tests/ / examples/ / benches/ 는 의도적으로 보존 (테스트/예제 namespace 유지).
      • TS/JS: src/Foo.ts 의 method barsrc/Foo.Foo.bar. export default function ()<prefix>.default. TSX 는 LANGUAGE_TSX grammar 자동 선택.
    • wire schema: 모두 additive minor — 기존 consumer 무영향. wire 의 Citation::Code variant 는 1A-1 부터 존재. SearchHit code_lang / repo 는 1A-1 추가 + 1A-2 (Rust) / 1B (Python/TS/JS) 부터 실제 채워짐.

    동결된 설계 결정

    • tree-sitter 위치 = parser (kebab-parse-code), chunker 아님 (design §6.3).
    • TypeScript: LANGUAGE_TYPESCRIPT (.ts) / LANGUAGE_TSX (.tsx) 두 grammar, 단일 chunker.
    • JavaScript: 단일 LANGUAGE grammar 로 .js / .mjs / .cjs / .jsx 모두 처리.
    • App dispatch 일반화: ingest_one_code_asset(code_lang: &str) 가 4-arm match 로 lang 별 Extractor + Chunker 선택. Rust 동작 byte-identical 보존.

    알려진 동��� (HOTFIXES 2026-05-20, 3 항목)

    • module_path_for_python / module_path_for_tsjs 가 path-sanitize 안 함 (특수문자 / 공백 그대로 prefix 에 포함). 후속 phase 에서 NFKC + 사용금지 문자 변환 검토.
    • TS/JS expression-level 함수 (arrow fn, function expression assigned to const) 는 <top-level> glue 로 처리. 후속 phase 에서 lexical_declaration unwrap 검토.
    • Rust 1A-2 의 symbol path 는 file-scope nesting 만 (workspace prefix 없음) — 1B 와 비일관. 1A retrofit 은 사용자 명시 요청 시 (chunker_version bump + reindex cascade).

    검증 절차

    docs/SMOKE.md 의 P10-1B 절 — 격리된 TempDir 워크스페이스에 .py / .ts / .js 파일 1개씩 두고 ingest / search / schema 로 wiring 확인.

    Downloads