docs(rename): kb → kebab — README, tasks/, docs/, design doc, report
마지막 commit. 모든 .md 안의 `kb` 단어 일괄 갱신. - 19 개 crate 이름 (`kb-core`, `kb-app`, …) → `kebab-*` (Rust 모듈 path 표기 `kb_*` → `kebab_*` 포함). - 미래 component (`kb-tui`, `kb-desktop`, `kb-asr-whisper`, `kb-ocr`, `kb-mcp`, `kb-vlm`, `kb-rerank`, `kb-vision-ocr`, `kb-index`, `kb-smoke`, `kb-architecture`) → `kebab-*` (P6+ 가 시작될 때 같은 prefix 사용). - CLI 명령 예제: `kb ingest` / `kb search` / `kb ask` / `kb init` / `kb doctor` / `kb inspect` / `kb list` / `kb eval` → `kebab <verb>`. fenced code block + 인라인 backtick 모두. - XDG paths + env vars + binary 경로 (`target/release/kb` → `target/release/kebab`) 동기화. - design doc / 최초 보고서 / SMOKE / HOTFIXES / phase epic / task spec 모든 reference 통일. - task-decomposition.md 의 `git -c user.name=kb` 는 과거 git history 기록용 author 정보라 그대로 유지 (실제 git history 의 author 는 변경 불가). - `tasks/phase-5-evaluation.md` 의 `status: planned` → `completed` 도 같이 (P5-1 + P5-2 PR 머지 후 미반영분). ## 검증 - `grep -rEn "\bkb-[a-z]|\bkb_[a-z]|\.config/kb\b|kb\.sqlite|\bKB_[A-Z]" --include="*.md"` 0 hits (task-decomposition.md 의 git author 제외). - 모든 file path reference 살아있음 (renamed file 들 모두 새 path 로 update). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
---
|
||||
phase: P2
|
||||
component: kb-store-sqlite (FTS5 migration)
|
||||
component: kebab-store-sqlite (FTS5 migration)
|
||||
task_id: p2-1
|
||||
title: "FTS5 virtual table + triggers (V002 migration)"
|
||||
status: completed
|
||||
depends_on: [p1-6]
|
||||
unblocks: [p2-2]
|
||||
contract_source: ../../docs/superpowers/specs/2026-04-27-kb-final-form-design.md
|
||||
contract_source: ../../docs/superpowers/specs/2026-04-27-kebab-final-form-design.md
|
||||
contract_sections: [§5.5 chunks_fts + triggers, §9 versioning]
|
||||
---
|
||||
|
||||
@@ -18,19 +18,19 @@ Add `chunks_fts` virtual table and three sync triggers via migration `V002__fts.
|
||||
|
||||
## Why now / why this size
|
||||
|
||||
`chunks_fts` is the lexical index for `kb-search`. Splitting it from p1-6 keeps P1 focused on relational data; bringing it as `V002` lets users upgrade an existing P1 DB without re-ingesting.
|
||||
`chunks_fts` is the lexical index for `kebab-search`. Splitting it from p1-6 keeps P1 focused on relational data; bringing it as `V002` lets users upgrade an existing P1 DB without re-ingesting.
|
||||
|
||||
## Allowed dependencies
|
||||
|
||||
- `kb-core`
|
||||
- `kb-config`
|
||||
- `kb-store-sqlite` (extends migrations)
|
||||
- `kebab-core`
|
||||
- `kebab-config`
|
||||
- `kebab-store-sqlite` (extends migrations)
|
||||
- `rusqlite`
|
||||
- `refinery`
|
||||
|
||||
## Forbidden dependencies
|
||||
|
||||
- `kb-source-fs`, `kb-parse-md`, `kb-normalize`, `kb-chunk`, `kb-store-vector`, `kb-embed*`, `kb-search` (consumer is p2-2), `kb-llm*`, `kb-rag`, `kb-tui`, `kb-desktop`
|
||||
- `kebab-source-fs`, `kebab-parse-md`, `kebab-normalize`, `kebab-chunk`, `kebab-store-vector`, `kebab-embed*`, `kebab-search` (consumer is p2-2), `kebab-llm*`, `kebab-rag`, `kebab-tui`, `kebab-desktop`
|
||||
|
||||
## Inputs
|
||||
|
||||
@@ -52,7 +52,7 @@ Add `chunks_fts` virtual table and three sync triggers via migration `V002__fts.
|
||||
pub fn rebuild_chunks_fts(conn: &rusqlite::Connection) -> anyhow::Result<()>;
|
||||
```
|
||||
|
||||
(Used by `kb index --rebuild-fts`. Re-runs `INSERT INTO chunks_fts SELECT ... FROM chunks` after `DELETE FROM chunks_fts;`.)
|
||||
(Used by `kebab index --rebuild-fts`. Re-runs `INSERT INTO chunks_fts SELECT ... FROM chunks` after `DELETE FROM chunks_fts;`.)
|
||||
|
||||
## Behavior contract
|
||||
|
||||
@@ -64,7 +64,7 @@ pub fn rebuild_chunks_fts(conn: &rusqlite::Connection) -> anyhow::Result<()>;
|
||||
|
||||
## Storage / wire effects
|
||||
|
||||
- Writes: `chunks_fts` virtual table inside `kb.sqlite`.
|
||||
- Writes: `chunks_fts` virtual table inside `kebab.sqlite`.
|
||||
- Reads: existing `chunks` rows for backfill.
|
||||
|
||||
## Test plan
|
||||
@@ -78,12 +78,12 @@ pub fn rebuild_chunks_fts(conn: &rusqlite::Connection) -> anyhow::Result<()>;
|
||||
| function | `rebuild_chunks_fts` produces deterministic content equal to fresh backfill | tmp DB |
|
||||
| migration | running `V002` twice is a no-op (refinery handles idempotency) | tmp DB |
|
||||
|
||||
All tests under `cargo test -p kb-store-sqlite fts`.
|
||||
All tests under `cargo test -p kebab-store-sqlite fts`.
|
||||
|
||||
## Definition of Done
|
||||
|
||||
- [ ] `cargo check -p kb-store-sqlite` passes
|
||||
- [ ] `cargo test -p kb-store-sqlite fts` passes
|
||||
- [ ] `cargo check -p kebab-store-sqlite` passes
|
||||
- [ ] `cargo test -p kebab-store-sqlite fts` passes
|
||||
- [ ] `migrations/V002__fts.sql` matches design §5.5 verbatim (CI diff check)
|
||||
- [ ] No imports outside Allowed dependencies
|
||||
- [ ] PR links design §5.5
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
phase: P2
|
||||
component: kb-search (lexical mode)
|
||||
component: kebab-search (lexical mode)
|
||||
task_id: p2-2
|
||||
title: "Lexical Retriever via SQLite FTS5 + bm25 + citation"
|
||||
status: completed
|
||||
depends_on: [p2-1]
|
||||
unblocks: [p3-4, p4-3]
|
||||
contract_source: ../../docs/superpowers/specs/2026-04-27-kb-final-form-design.md
|
||||
contract_source: ../../docs/superpowers/specs/2026-04-27-kebab-final-form-design.md
|
||||
contract_sections: [§3.7 SearchQuery/Hit, §0 Q3 citation (URI fragment), §1.5/1.6 search output, §2.2 wire schema, §6.4 search settings]
|
||||
---
|
||||
|
||||
@@ -14,38 +14,38 @@ contract_sections: [§3.7 SearchQuery/Hit, §0 Q3 citation (URI fragment), §1.5
|
||||
|
||||
## Goal
|
||||
|
||||
Implement `kb_core::Retriever` for `SearchMode::Lexical` using SQLite FTS5. Returns `SearchHit` with `bm25` ranking, `snippet()`-derived preview, and proper W3C-fragment citation.
|
||||
Implement `kebab_core::Retriever` for `SearchMode::Lexical` using SQLite FTS5. Returns `SearchHit` with `bm25` ranking, `snippet()`-derived preview, and proper W3C-fragment citation.
|
||||
|
||||
## Why now / why this size
|
||||
|
||||
First concrete `Retriever`. Lets `kb search --mode lexical` work without any embedding/LLM infrastructure. Establishes the SearchHit construction contract that hybrid (p3-4) reuses.
|
||||
First concrete `Retriever`. Lets `kebab search --mode lexical` work without any embedding/LLM infrastructure. Establishes the SearchHit construction contract that hybrid (p3-4) reuses.
|
||||
|
||||
## Allowed dependencies
|
||||
|
||||
- `kb-core`
|
||||
- `kb-config`
|
||||
- `kb-store-sqlite` (read access to `chunks_fts` + `chunks` + `documents`)
|
||||
- `kebab-core`
|
||||
- `kebab-config`
|
||||
- `kebab-store-sqlite` (read access to `chunks_fts` + `chunks` + `documents`)
|
||||
- `rusqlite`
|
||||
- `tracing`
|
||||
- `thiserror`
|
||||
|
||||
## Forbidden dependencies
|
||||
|
||||
- `kb-source-fs`, `kb-parse-md`, `kb-normalize`, `kb-chunk`, `kb-store-vector`, `kb-embed*`, `kb-llm*`, `kb-rag`, `kb-tui`, `kb-desktop`
|
||||
- `kebab-source-fs`, `kebab-parse-md`, `kebab-normalize`, `kebab-chunk`, `kebab-store-vector`, `kebab-embed*`, `kebab-llm*`, `kebab-rag`, `kebab-tui`, `kebab-desktop`
|
||||
|
||||
## Inputs
|
||||
|
||||
| input | type | source |
|
||||
|-------|------|--------|
|
||||
| `SearchQuery` (mode=Lexical) | `kb_core::SearchQuery` | `kb-app::search` |
|
||||
| `kb-config::search` settings (`default_k`, `snippet_chars`) | `kb_config::Config` | runtime |
|
||||
| SQLite connection (read) | `rusqlite::Connection` | `kb-store-sqlite` |
|
||||
| `SearchQuery` (mode=Lexical) | `kebab_core::SearchQuery` | `kebab-app::search` |
|
||||
| `kebab-config::search` settings (`default_k`, `snippet_chars`) | `kebab_config::Config` | runtime |
|
||||
| SQLite connection (read) | `rusqlite::Connection` | `kebab-store-sqlite` |
|
||||
|
||||
## Outputs
|
||||
|
||||
| output | type | downstream |
|
||||
|--------|------|------------|
|
||||
| `Vec<SearchHit>` | `kb_core::SearchHit` | `kb-cli` printer, `kb-rag` packer (P4), hybrid (p3-4) |
|
||||
| `Vec<SearchHit>` | `kebab_core::SearchHit` | `kebab-cli` printer, `kebab-rag` packer (P4), hybrid (p3-4) |
|
||||
|
||||
## Public surface (signatures only — no new types)
|
||||
|
||||
@@ -53,12 +53,12 @@ First concrete `Retriever`. Lets `kb search --mode lexical` work without any emb
|
||||
pub struct LexicalRetriever { /* internal: holds an Arc<rusqlite::Connection> + IndexVersion */ }
|
||||
|
||||
impl LexicalRetriever {
|
||||
pub fn new(store: std::sync::Arc<kb_store_sqlite::SqliteStore>, index_version: kb_core::IndexVersion) -> Self;
|
||||
pub fn new(store: std::sync::Arc<kebab_store_sqlite::SqliteStore>, index_version: kebab_core::IndexVersion) -> Self;
|
||||
}
|
||||
|
||||
impl kb_core::Retriever for LexicalRetriever {
|
||||
fn search(&self, query: &kb_core::SearchQuery) -> anyhow::Result<Vec<kb_core::SearchHit>>;
|
||||
fn index_version(&self) -> kb_core::IndexVersion;
|
||||
impl kebab_core::Retriever for LexicalRetriever {
|
||||
fn search(&self, query: &kebab_core::SearchQuery) -> anyhow::Result<Vec<kebab_core::SearchHit>>;
|
||||
fn index_version(&self) -> kebab_core::IndexVersion;
|
||||
}
|
||||
```
|
||||
|
||||
@@ -98,8 +98,8 @@ impl kb_core::Retriever for LexicalRetriever {
|
||||
|
||||
## Storage / wire effects
|
||||
|
||||
- Reads only. Never mutates `kb.sqlite`.
|
||||
- Wire: `Vec<SearchHit>` serialized via wire schema `search_hit.v1` when `kb-cli --json` is used.
|
||||
- Reads only. Never mutates `kebab.sqlite`.
|
||||
- Wire: `Vec<SearchHit>` serialized via wire schema `search_hit.v1` when `kebab-cli --json` is used.
|
||||
|
||||
## Test plan
|
||||
|
||||
@@ -114,13 +114,13 @@ impl kb_core::Retriever for LexicalRetriever {
|
||||
| determinism | identical query twice produces identical hit order and scores | tmp DB |
|
||||
| snapshot | `Vec<SearchHit>` JSON for fixed corpus stable | `fixtures/search/lexical/run-1.json` |
|
||||
|
||||
All tests under `cargo test -p kb-search lexical`.
|
||||
All tests under `cargo test -p kebab-search lexical`.
|
||||
|
||||
## Definition of Done
|
||||
|
||||
- [ ] `cargo check -p kb-search` passes
|
||||
- [ ] `cargo test -p kb-search lexical` passes
|
||||
- [ ] No imports outside Allowed dependencies (`cargo tree -p kb-search` audit)
|
||||
- [ ] `cargo check -p kebab-search` passes
|
||||
- [ ] `cargo test -p kebab-search lexical` passes
|
||||
- [ ] No imports outside Allowed dependencies (`cargo tree -p kebab-search` audit)
|
||||
- [ ] Output JSON conforms to `docs/wire-schema/v1/search_hit.schema.json`
|
||||
- [ ] PR links design §3.7, §0 Q3, §2.2
|
||||
|
||||
|
||||
Reference in New Issue
Block a user