refactor(rename): kb → kebab — binary, env vars, XDG paths, file renames
두 번째 commit. 사용자 facing surface (CLI binary, env vars, XDG paths) + 코드 안 single-letter token (`KB_`, `kb.sqlite`, `/kb/`, tracing target) 일괄 rename. 그리고 3 개 file rename: - 디자인 doc `2026-04-27-kb-final-form-design.md` → `2026-04-27-kebab-final-form-design.md` - 최초 보고서 `kb_local_rust_report.md` → `kebab_local_rust_report.md` - workspace ignore `.kbignore` → `.kebabignore` ## 변경 - `crates/kebab-cli/Cargo.toml`: `[[bin]] name = "kb"` → `"kebab"`. - `crates/kebab-cli/src/main.rs`: `#[command(name = "kb", …)]` → `name = "kebab"`. - 모든 `KB_*` env var (코드 + doc + 테스트) → `KEBAB_*`. apply_env prefix 매칭 + 30+ 개 setting 키 모두. - XDG paths: `~/.config/kb` / `~/.local/share/kb` / `~/.cache/kb` / `~/.local/state/kb` → `~/.config/kebab` 등. config defaults + expand_path tests + paths.rs 의 hardcode 모두. - SQLite filename: `kb.sqlite` → `kebab.sqlite` (`SQLITE_FILE` const + 테스트 hardcode 모두). - tracing target: `target: "kb-*"` → `"kebab-*"` (10+ 곳). - snapshot fixture: `.kbignore` → `.kebabignore` (`fixtures/source-fs/ tree-1.snapshot.json` 갱신). ## 검증 - `cargo test --workspace -j 1` clean (linker OOM 회피 위해 직렬). - `cargo clippy --workspace --all-targets -- -D warnings` clean. 다음 commit 에서 docs sweep. 🤖 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:
@@ -61,7 +61,7 @@ pub use app::App;
|
||||
/// Kept in lock-step with the literal used in the `kb-store-sqlite`
|
||||
/// idempotency / round-trip tests so the version label written by the
|
||||
/// app and the one used in cross-crate fixtures match.
|
||||
const KB_PARSE_MD_VERSION: &str = "pulldown-cmark-0.x";
|
||||
const KEBAB_PARSE_MD_VERSION: &str = "pulldown-cmark-0.x";
|
||||
|
||||
/// Caller-supplied knobs for one [`ask`] invocation.
|
||||
///
|
||||
@@ -187,7 +187,7 @@ pub fn ingest_with_config(
|
||||
.context("kb-app::ingest: ensure Lance table")?;
|
||||
}
|
||||
|
||||
let parser_version = ParserVersion(KB_PARSE_MD_VERSION.to_string());
|
||||
let parser_version = ParserVersion(KEBAB_PARSE_MD_VERSION.to_string());
|
||||
let chunk_policy = chunk_policy_from_config(&app.config);
|
||||
|
||||
// Pre-load every existing doc_id so we can label `IngestItem.kind`
|
||||
@@ -236,7 +236,7 @@ pub fn ingest_with_config(
|
||||
Ok(i) => i,
|
||||
Err(e) => {
|
||||
tracing::error!(
|
||||
target: "kb-app",
|
||||
target: "kebab-app",
|
||||
path = %asset.workspace_path.0,
|
||||
error = %e,
|
||||
"kb-app::ingest: per-file fatal"
|
||||
@@ -318,7 +318,7 @@ pub fn ingest_with_config(
|
||||
progress,
|
||||
) {
|
||||
tracing::warn!(
|
||||
target: "kb-app",
|
||||
target: "kebab-app",
|
||||
error = %e,
|
||||
"kb-app::ingest: JobRepo::update_progress failed"
|
||||
);
|
||||
@@ -330,7 +330,7 @@ pub fn ingest_with_config(
|
||||
None,
|
||||
) {
|
||||
tracing::warn!(
|
||||
target: "kb-app",
|
||||
target: "kebab-app",
|
||||
error = %e,
|
||||
"kb-app::ingest: JobRepo::finish failed"
|
||||
);
|
||||
@@ -338,7 +338,7 @@ pub fn ingest_with_config(
|
||||
}
|
||||
Err(e) => {
|
||||
tracing::warn!(
|
||||
target: "kb-app",
|
||||
target: "kebab-app",
|
||||
error = %e,
|
||||
"kb-app::ingest: JobRepo::create failed; run not recorded in `jobs`"
|
||||
);
|
||||
@@ -361,7 +361,7 @@ pub fn ingest_with_config(
|
||||
Ok(s) => Some(s),
|
||||
Err(e) => {
|
||||
tracing::warn!(
|
||||
target: "kb-app",
|
||||
target: "kebab-app",
|
||||
error = %e,
|
||||
"kb-app::ingest: failed to serialize items_json; storing NULL"
|
||||
);
|
||||
@@ -385,14 +385,14 @@ pub fn ingest_with_config(
|
||||
};
|
||||
if let Err(e) = app.sqlite.record_ingest_run(&row) {
|
||||
tracing::warn!(
|
||||
target: "kb-app",
|
||||
target: "kebab-app",
|
||||
error = %e,
|
||||
"kb-app::ingest: record_ingest_run failed"
|
||||
);
|
||||
}
|
||||
|
||||
tracing::info!(
|
||||
target: "kb-app",
|
||||
target: "kebab-app",
|
||||
scanned = scanned_count,
|
||||
new = new_count,
|
||||
updated = updated_count,
|
||||
@@ -448,7 +448,7 @@ fn ingest_one_asset(
|
||||
existing_doc_ids: &std::collections::HashSet<String>,
|
||||
) -> anyhow::Result<kebab_core::IngestItem> {
|
||||
tracing::debug!(
|
||||
target: "kb-app::ingest",
|
||||
target: "kebab-app::ingest",
|
||||
path = %asset.workspace_path.0,
|
||||
"processing asset"
|
||||
);
|
||||
@@ -795,7 +795,7 @@ pub fn doctor_with_config_path(config_path: Option<&std::path::Path>) -> anyhow:
|
||||
|
||||
// data_dir_writable — probe the resolved storage.data_dir from the
|
||||
// loaded config when present, else the XDG default. Apply env
|
||||
// overrides so KB_STORAGE_DATA_DIR is respected too.
|
||||
// overrides so KEBAB_STORAGE_DATA_DIR is respected too.
|
||||
let data_dir = match loaded_cfg.as_ref() {
|
||||
Some(c) => {
|
||||
// Re-apply env overrides on top so the same precedence as
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//! Tracing initialization helper for `kb-cli`.
|
||||
//!
|
||||
//! Daily-rolling file appender at `~/.local/state/kb/logs/` per task spec.
|
||||
//! Daily-rolling file appender at `~/.local/state/kebab/logs/` per task spec.
|
||||
//! Returns a `WorkerGuard` that the caller must keep alive until program
|
||||
//! exit (so buffered log lines flush).
|
||||
|
||||
|
||||
@@ -87,8 +87,8 @@ fn ingest_records_ingest_runs_row_with_aggregate_counts() {
|
||||
assert_eq!(report.scanned, 3);
|
||||
|
||||
let db_path = std::path::PathBuf::from(&env.config.storage.data_dir)
|
||||
.join("kb.sqlite");
|
||||
let conn = rusqlite::Connection::open(&db_path).expect("open kb.sqlite");
|
||||
.join("kebab.sqlite");
|
||||
let conn = rusqlite::Connection::open(&db_path).expect("open kebab.sqlite");
|
||||
let (scanned, new_c, updated, skipped, errors, items_json): (
|
||||
i64,
|
||||
i64,
|
||||
|
||||
Reference in New Issue
Block a user