feat: v0.17.0 PR-C — code_lang_chunk_breakdown additive wire field #161

Merged
altair823 merged 2 commits from feat/code-lang-chunk-breakdown into main 2026-05-24 20:35:31 +00:00
Owner

요약

v0.17.0 release 의 세 번째 PR (PR-A = 한국어 trigram tokenizer / PR-B = C typedef alias unit 과 동행). HOTFIXES 2026-05-22 의 "code_lang_breakdown chunk granularity" LOW 항목 closure.

schema.v1.stats 에 chunk 수 집계 code_lang_chunk_breakdown 신규 필드 추가 — 기존 code_lang_breakdown (doc 수) 와 sister metric. 한 PDF spec → 200 chunks, 한 Rust file → 5 chunks 둘 다 1 doc 로만 보이던 한계 해소. additive 변경 — wire breaking 아님, schema_version bump 불필요.

설계: docs/superpowers/specs/2026-05-22-korean-trigram-tokenizer-design.md §4
계획: docs/superpowers/plans/2026-05-22-korean-trigram-tokenizer.md PR-C

변경 요약

  • store: crates/kebab-store-sqlite/src/store.rs::code_lang_chunk_breakdown()chunks INNER JOIN documentsjson_extract(d.metadata_json, '$.code_lang') GROUP BY, COUNT(c.chunk_id). NULL 키 skip. BTreeMap<String, u32> 반환 (기존 code_lang_breakdown 와 동일 shape).
  • schema: crates/kebab-app/src/schema.rs::Stats.code_lang_chunk_breakdown additive 필드 + collect_stats builder 에서 신규 store 호출.
  • JSON schema: docs/wire-schema/v1/schema.schema.json 에 신규 필드 명세 추가 + Gemini round 2 권고 반영 — 기존 code_lang_breakdown / repo_breakdown description 의 "code chunk count" 오기재를 "doc count" 로 정정 (실제 구현은 doc 수). 신규 필드만 "chunk count" 로 명시 → 사용자가 두 metric 의 의미 차이를 schema 만 보고도 구분 가능.
  • docs: HOTFIXES 2026-05-24 PR-C closure entry.

사용자 가시 영향

  • kebab schema --json 출력에 신규 키 code_lang_chunk_breakdown 등장.
  • MCP schema tool 도 동일.
  • 옛 v0.16.x 가 보낸 호출은 그대로 동작 (additive, breaking 없음).

검증

  • 신규 unit test: code_lang_chunk_breakdown_counts_chunks_not_docs (1 rust doc + 3 chunks → rust=3 chunks; 동일 fixture 의 doc-count helper 는 rust=1 그대로 — 두 metric 차이 명확).
  • stats_includes_code_lang_and_repo_breakdown_fields 확장 — 신규 필드 존재 + 빈 BTreeMap → {} object 검증.
  • cargo test --workspace --no-fail-fast -j 1 + cargo clippy --workspace --all-targets -- -D warnings 통과.

시험 항목 (Test Plan)

  • 도그푸딩 KB (rust + python + js 등 다양한 code) 에서 kebab schema --json | jq '.stats | {code_lang_breakdown, code_lang_chunk_breakdown}' → doc count 와 chunk count 가 명확히 다른 값.
  • 빈 KB / markdown-only KB 에서 두 필드 모두 {} 인지.
  • JSON schema validator (e.g. ajv-cli) 로 schema.v1 응답 검증 — 신규 필드 통과.

Assisted-by: Claude Code

## 요약 v0.17.0 release 의 세 번째 PR (PR-A = 한국어 trigram tokenizer / PR-B = C typedef alias unit 과 동행). HOTFIXES 2026-05-22 의 "`code_lang_breakdown` chunk granularity" LOW 항목 closure. `schema.v1.stats` 에 chunk 수 집계 `code_lang_chunk_breakdown` 신규 필드 추가 — 기존 `code_lang_breakdown` (doc 수) 와 sister metric. 한 PDF spec → 200 chunks, 한 Rust file → 5 chunks 둘 다 `1 doc` 로만 보이던 한계 해소. **additive 변경 — wire breaking 아님, `schema_version` bump 불필요**. 설계: docs/superpowers/specs/2026-05-22-korean-trigram-tokenizer-design.md §4 계획: docs/superpowers/plans/2026-05-22-korean-trigram-tokenizer.md PR-C ## 변경 요약 - **store**: `crates/kebab-store-sqlite/src/store.rs::code_lang_chunk_breakdown()` — `chunks INNER JOIN documents` 후 `json_extract(d.metadata_json, '$.code_lang')` GROUP BY, `COUNT(c.chunk_id)`. NULL 키 skip. `BTreeMap<String, u32>` 반환 (기존 `code_lang_breakdown` 와 동일 shape). - **schema**: `crates/kebab-app/src/schema.rs::Stats.code_lang_chunk_breakdown` additive 필드 + `collect_stats` builder 에서 신규 store 호출. - **JSON schema**: `docs/wire-schema/v1/schema.schema.json` 에 신규 필드 명세 추가 + **Gemini round 2 권고 반영** — 기존 `code_lang_breakdown` / `repo_breakdown` description 의 "code chunk count" 오기재를 "doc count" 로 정정 (실제 구현은 doc 수). 신규 필드만 "chunk count" 로 명시 → 사용자가 두 metric 의 의미 차이를 schema 만 보고도 구분 가능. - **docs**: HOTFIXES 2026-05-24 PR-C closure entry. ## 사용자 가시 영향 - `kebab schema --json` 출력에 신규 키 `code_lang_chunk_breakdown` 등장. - MCP `schema` tool 도 동일. - 옛 v0.16.x 가 보낸 호출은 그대로 동작 (additive, breaking 없음). ## 검증 - 신규 unit test: `code_lang_chunk_breakdown_counts_chunks_not_docs` (1 rust doc + 3 chunks → `rust=3` chunks; 동일 fixture 의 doc-count helper 는 `rust=1` 그대로 — 두 metric 차이 명확). - `stats_includes_code_lang_and_repo_breakdown_fields` 확장 — 신규 필드 존재 + 빈 BTreeMap → `{}` object 검증. - `cargo test --workspace --no-fail-fast -j 1` + `cargo clippy --workspace --all-targets -- -D warnings` 통과. ## 시험 항목 (Test Plan) - [ ] 도그푸딩 KB (rust + python + js 등 다양한 code) 에서 `kebab schema --json | jq '.stats | {code_lang_breakdown, code_lang_chunk_breakdown}'` → doc count 와 chunk count 가 명확히 다른 값. - [ ] 빈 KB / markdown-only KB 에서 두 필드 모두 `{}` 인지. - [ ] JSON schema validator (e.g. `ajv-cli`) 로 `schema.v1` 응답 검증 — 신규 필드 통과. Assisted-by: Claude Code
altair823 added 2 commits 2026-05-24 20:35:06 +00:00
closure of HOTFIXES 2026-05-22 "code_lang_breakdown chunk granularity"
LOW. Chunk-level companion of the existing doc-count metric.

- crates/kebab-store-sqlite/src/store.rs: code_lang_chunk_breakdown()
  method. chunks INNER JOIN documents → COUNT(c.chunk_id) GROUP BY
  metadata_json.code_lang, NULL skipped. BTreeMap<String, u32>.
  + lib unit test code_lang_chunk_breakdown_counts_chunks_not_docs
  (1 rust doc + 3 chunks → rust=3 chunks vs rust=1 doc).
- crates/kebab-app/src/schema.rs: Stats.code_lang_chunk_breakdown
  additive field + collect_stats builder. tests_stats_ext 의
  stats_includes_code_lang_and_repo_breakdown_fields 가 신규 필드도
  검증.
- docs/wire-schema/v1/schema.schema.json: 신규 additive 필드
  명세 + 기존 code_lang_breakdown / repo_breakdown description
  정정 ("code chunk count" → "doc count", Gemini round 2 권고).
- tasks/HOTFIXES.md: 2026-05-24 PR-C closure entry.

wire additive, schema_version bump 불필요. v0.16.x 호출 호환.
cargo test --workspace --no-fail-fast -j 1 + clippy 통과.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
실제로 doc count 임을 명시 (PR #161 워커 리뷰 MEDIUM 반영)

JSON schema description 은 PR-C 본체에서 'code chunk count' →
'doc count' 로 정정했으나 Rust struct field 의 rustdoc 은 같은
오기재를 그대로 carry — Gemini round 2 가 JSON schema 만 봤고
rustdoc 은 miss. 워커 둘 다 동일 finding (MEDIUM).

implementation 변경 없음 — 의미가 doc count 였던 사실이 처음부터
일관. wording 만 맞춤.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
altair823 force-pushed feat/code-lang-chunk-breakdown from 8cfb8f9d87 to 13a3361ba2 2026-05-24 20:35:06 +00:00 Compare
altair823 merged commit 9ee89c2a94 into main 2026-05-24 20:35:31 +00:00
altair823 deleted branch feat/code-lang-chunk-breakdown 2026-05-24 20:35:32 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: altair823-org/kebab#161