Commit Graph

1213 Commits

Author SHA1 Message Date
5e6d977281 docs: CLAUDE 3구역 정책 + DOCS.md 지도 + component README task-spec 링크 정리
doc-reorg(C) Phase 4b+5:
- CLAUDE.md: doc-list 에 DOCS.md/CHANGELOG 추가 + zones(living/계약/증거) 정책 +
  "새 plan/handoff/per-feature spec 누적 금지(결정→HOTFIXES, 구조→ARCHITECTURE,
  릴리스→CHANGELOG)" 명문화. §Spec contract 재작성(task spec 삭제 반영: 유일
  frozen 계약 = 설계 doc, 구현 진실 = 코드). stale per-task-spec 참조 정정.
- docs/components/*/README.md (12): 삭제될 tasks/p*/ task-spec markdown 링크
  제거/plain-text 화 + 흡수된 crate(kebab-normalize→parse-md::normalize,
  kebab-parse-types→parse-md::types) 참조 정정.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 12:46:29 +00:00
5527e195da docs: HANDOFF/INDEX 를 현재(v0.32.0) phase·component 대시보드로 슬림
doc-reorg(C) Phase 4a: 둘 다 심하게 stale(HANDOFF "한 줄 요약" v0.18.0 ·
이미 ship 된 fb-41 을 "미구현"으로 · v0.20 priorities 장기 closed; INDEX 는
삭제될 task spec 으로 82 markdown 링크 + 옛 버전 스탬프).

- HANDOFF 181→45줄: 현재 phase 표(흡수된 crate 반영) + 최근 마일스톤 포인터
  (dated 로그는 HOTFIXES/CHANGELOG/git) + 현재 다음-task 후보(P8/P9-5).
- INDEX 185→40줄: per-component 상태 표(spec 링크 제거) + HOTFIXES/CHANGELOG/
  설계계약 포인터. 옛 task spec 은 git history 안내.

durable 정보 손실 0(전부 HOTFIXES/CHANGELOG/ARCHITECTURE/code/git 에 있음).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 12:43:59 +00:00
993fae79d0 docs: DOCS.md (SoT 지도) + CHANGELOG.md 신설 + README 포인터
doc-reorg(C) Phase 2:
- DOCS.md (root): "알고 싶은 것 → SoT" 표 + 구역(living/계약/증거) 맵 +
  "삭제된 historical = git history, durable 은 living 흡수" 선언 + 재발방지 원칙.
  → 사용자 1순위 pain("뭐가 최신/진실인지") 직접 해소.
- CHANGELOG.md (root): release-notes 9개 역순 인덱스 + gitea 링크,
  미문서화 구간(v0.1~v0.19/v0.21~v0.27)은 Gitea releases 참조 명시.
- README 상단에 DOCS.md 포인터 1줄.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 12:37:29 +00:00
13bb30e9ef docs(arch): 삭제 전 durable 보존 — task-spec invariant 4건 + 의존성 경계표
doc-reorg(C) Phase 1: 삭제 예정 task spec 의 비자명 durable invariant 를
현재 코드 대조 검증 후 living 문서로 흡수(안전망).

ARCHITECTURE §핵심 구현 불변식 신설:
- VectorStore upsert 순서/원자성 (SQLite-first 3-state → Lance, committed 필터)
- RAG score-gate + context/completion budget (독립 계산, provenance 헤더 drift)
- md-heading-v2 청킹 우선순위 (Phase1 v1-동등 + Phase2 oversize 후처리)
- chunk_id 충돌 회피 split-key variant (pdf #c / code #L / md #seg)
- PDF OCR 엔진 PoC 근거 (single-binary → qwen2.5vl, 측정표는 git history)

CLAUDE.md §Allowed/forbidden deps: 86 task spec 에 흩어진 경계를 crate-group
표 1개로 통합(Cargo.toml 대조 검증), task-spec 참조 제거.

stale 경로(/build/dogfood) dogfood 스케일·latency 측정은 resurrect 안 함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 12:35:41 +00:00
19fce9df0b docs(spec): 문서 재정리 설계 C(max-compress) 로 개정 — 이동→삭제/압축
초안의 archive-이동 안은 폐기(frozen 끼리 결합도 높아 이동이 무결성 깸).
사용자 지침("stale 최대한 줄이기, diverged 과거 문서 destructive 허용,
durable 은 삭제 전 living 흡수")을 반영.

5-에이전트 전수 분석 근거로 확정 범위(C):
- 삭제(~220, git 보존): plans 64 + handoffs 8 + 스텁 7 + tasks/p* 86 + feature specs 55
- 유지: 설계 계약(2026-04-27) + 본 spec + 모든 living + release-notes + 증거
- 추출(안전망): durable 4건(LanceDB upsert/RAG score-gate/PDF chunk_id 충돌/
  heading 우선순위) → ARCHITECTURE, 의존성 경계표 → CLAUDE.md
- DOCS.md(SoT 지도)·CHANGELOG.md 신설, HANDOFF/INDEX/HOTFIXES/components 슬림

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 12:26:42 +00:00
d220aa4e44 docs(spec): 문서 재정리 설계 — living/frozen/archive 3구역 + DOCS.md SoT 지도
여러 세션 누적으로 ~268개로 불어난 문서를 3 병렬 explorer 로 전수 특성화한 뒤
재정리 설계. 코어(living+frozen)는 건강하고 SoT 도 territory 별로 정의돼 있으나
단일 지도 부재 + historical 아티팩트(plans 64·handoffs 8) 가 트리에 섞임.

설계(방안 B): 3구역 분리(living/frozen/archive) + root DOCS.md SoT 지도 신설 +
오펀 stub 7 삭제 + release-notes 9→CHANGELOG.md 통합 + historical 을
docs/archive/ 로 git mv + stale 컴포넌트 README 2건 수정 + CLAUDE.md §docs 갱신.
frozen specs/tasks 는 거버넌스 앵커라 무변경(이동 전 frozen→대상 링크 grep gate).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 11:50:12 +00:00
745ac6e589 docs: README/ARCHITECTURE v0.32.0 동기화 + CLAUDE.md README 최신성 규칙
최신 코드베이스 기준으로 사용자/아키텍처 문서 갱신:

README (사용자 설명서 수준):
- 버전 스탬프 v0.21.0 → v0.32.0 (2곳)
- 파생물 캐시 설명에 OCR/caption 캐싱 반영 (embedding 만 → embedding+vision)

ARCHITECTURE (구조 상세):
- migrations V001..V014 → V015 (drop chat_sessions, v0.31.0)
- derivation_cache kind: "embedding 만 남음" → embedding + ocr + caption (#217)
- 9개 code_*_ast_v1.rs → 단일 code_ast_v1.rs / CodeAstV1Chunker (v0.32.0 #220) — dir tree + 결정표
- MCP 도구 목록 4개 → 8개 (schema/doctor/search/bulk_search/ask/fetch/ingest_file/ingest_stdin)
- stale /build/dogfood 경로 → 실 경로/HOTFIXES 참조

CLAUDE.md:
- "README 최신성 hard requirement" 명문화 — 기능 추가/변경/삭제·사용자 표면 변경 시
  그 PR 에서 README 동기화, 제거된 surface 는 README 에서도 제거. 단 깊이는
  "사용자 설명서" 수준이고 아키텍처는 docs/ARCHITECTURE.md 에 — altitude 경계 명시.
- stale TUI bullet 정정 (kebab tui 는 v0.31.0 제거 → CLI 가 유일 UI surface)

code: derivation.rs 모듈 주석의 kind 목록 {embedding,alias,korean_tokens} →
{embedding,ocr,caption} (source-of-truth 주석 정정).

독립 doc-accuracy 감사로 config 기본값(llm/embedding/rag/chunker/ocr)·CLI 표면·
crate 목록·migration·cache kind 전수 대조 — 위 2건 외 잔여 staleness 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 11:31:27 +00:00
484eb14a2c Merge pull request 'chore: bump version 0.31.0 → 0.32.0 + v0.32.0 release notes' (#223) from chore/release-v0-32-0 into main
Reviewed-on: #223
v0.32.0
2026-06-27 03:25:45 +00:00
34672e82cc chore: PR #223 회차 1 리뷰 반영 — release notes 사실 정정 (unsafe-libyaml / crate count / 줄수)
리뷰어가 잡은 release-doc 사실 오류 정정:
- dep −2 → dep −1: serde_yaml_ng 0.10 도 unsafe-libyaml 0.2.11 을 transitive 로
  의존(Cargo.lock 확인). 제거된 건 archived serde_yaml 하나뿐. "unsafe-libyaml
  까지 제거" 는 거짓 → 4곳(release notes ×2, Cargo.toml, HOTFIXES) 정정.
- crate 24→20 → 22→20: 이 arc(#219–#222)는 #221 에서 2 crate(kebab-embed/llm)만
  제거. 24→22 는 직전 v0.31.0 spine. cumulative 표기는 명시적 주석으로 분리.
- 누적 줄수 약 −3200 → 약 −3400(실측 git diff fd3b4ae..main = 643 ins/4057 del).

코드 변경 없음(release-facing 문서 + 버전 주석). Cargo.toml 파싱 OK.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 03:22:30 +00:00
cf773ad56c chore: bump version 0.31.0 → 0.32.0 + v0.32.0 release notes
ponytail-audit over-engineering 정리 arc(#219–#222) 릴리스. 능력 불변,
누적 −3200줄 / crate 24→20 / dep −2(serde_yaml + unsafe-libyaml).

- workspace version 0.31.0 → 0.32.0 (minor — #219 의 CLI 플래그/config 키
  제거가 인터페이스 변경 트리거). 전 kebab-* crate 자동 cascade.
- docs/release-notes/v0.32.0-draft.md: 4 surface(죽은 cache scaffold 제거 /
  chunker 통합 / shim crate 흡수 / FusionPolicy·YAML·NLI) 별 설명 + 도그푸딩.
- tasks/HOTFIXES.md 2026-06-27: chunker A/B byte-identical(pre/post-arc 실코퍼스
  120==120 diff-empty) + GPU r9700 arctic ingest + CLI 표면 evidence.
- kebab eval stale 주석 정정(PR5-A: "placeholder; lands in P9" → 실제 배선된
  검색/RAG 품질 측정 suite). 게이팅 안 함(live subcommand 유지).

도그푸딩 evidence 가 bump commit 이전에 HOTFIXES + release notes 에 명시됨
(CLAUDE.md §Dogfood trigger).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 03:15:34 +00:00
fef06e246f Merge pull request 'refactor: audit-tail 정리 — FusionPolicy inline + dual-YAML 통일 + NLI required' (#222) from refactor/audit-tail-micro-cleanups into main
Reviewed-on: #222
2026-06-27 02:53:16 +00:00
bac541ba90 chore: PR #222 회차 1 리뷰 반영 — serde_yaml_ng workspace pin 복원
리뷰 nit: dropped serde_yaml 은 workspace-pinned 였는데 대체 serde_yaml_ng 가
3 crate 에 개별 "0.10" 하드코딩이라 single-version-pin invariant 깨짐.
`[workspace.dependencies]` 에 serde_yaml_ng = "0.10" 추가 + kebab-chunk/eval/
parse-md(사전존재 하드코딩 포함) 를 { workspace = true } 로 통일 — 워크스페이스의
다른 공유 dep 과 동일 컨벤션. 빌드 dep resolution 불변(0.10.0 단일).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 02:50:43 +00:00
3ac3e91421 refactor: audit-tail 정리 — FusionPolicy inline + dual-YAML 통일 + NLI required
ponytail-audit 의 작은 over-engineering 잔여 3건 (output/동작 불변):

1. FusionPolicy 1-arm enum 제거 — kebab-search 내부 전용(외부 importer 0)이던
   `enum FusionPolicy { Rrf { k_rrf } }` 를 `HybridRetriever.k_rrf: u32` 로 inline.
   parse_fusion 은 u32 반환. RRF 수식 `Σ 1/(k_rrf+rank)` byte-identical.
2. dual YAML 통일 — serde_yaml(0.9) 를 maintained fork serde_yaml_ng(0.10) 로 일원화.
   k8s manifest chunker + eval golden loader 2 site 마이그레이션(API drop-in),
   workspace dep 에서 serde_yaml 제거. parse 결과 불변.
3. NliVerifier::hypothesis_token_count 의 `Ok(0)` default 제거 → required.
   prod OnnxNliVerifier 가 이미 override 라 동작 불변, MockNliVerifier 에 explicit 추가.

문서 동기화: search/eval/parse component README + ARCHITECTURE 의 FusionPolicy/
serde_yaml 참조를 현 상태로 갱신. net −37줄. 적대적 검증 2렌즈(output-identity +
completeness-build) 통과, 영향 crate 테스트 + clippy -D warnings 클린.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 02:44:03 +00:00
2f02058f63 Merge pull request 'refactor(core): 빈 re-export shim crate kebab-embed/kebab-llm → kebab-core 흡수' (#221) from refactor/fold-trait-shim-crates into main
Reviewed-on: #221
2026-06-27 02:16:09 +00:00
2d68827cf5 refactor(core): 빈 re-export shim crate kebab-embed/kebab-llm → kebab-core 흡수
kebab-embed/kebab-llm 은 "새 type 없음"을 자처한 순수 re-export 셸이었다
(trait 은 이미 kebab-core 소유, mock + test helper 만 보유). "kebab-core
재구성 시 안정 surface" 라는 명분은 1인 RAG 엔 speculative YAGNI. 흡수:

- kebab-core 에 default-OFF `mock` feature + src/mock.rs (MockEmbedder,
  MockLanguageModel, assert_vector_shape/assert_unit_norm/assert_finish_chunk
  을 kebab_core:: → crate:: import 만 바꿔 verbatim 이동).
- production import 2곳(kebab-embed-local, kebab-llm-local) +
  test import 다수(search/rag/parse-image/embed-local) 를 kebab_core 로 repoint.
  mock 쓰는 crate 는 dev-dep 에 features=["mock"] (default 빌드 무영향).
- shim 자체 테스트: mock 동작 테스트는 kebab-core/tests/ 로 이동,
  reexports.rs(셸 재수출 테스트)는 폐기.
- crates/kebab-embed, crates/kebab-llm 삭제 + workspace member/deps 정리.
- ARCHITECTURE/HANDOFF/component README 의 crate 그래프·표·rationale 갱신
  (22 → 20 crates). llm-local 의 broken intra-doc link 2건도 정리.

trait surface·동작 불변 (test-only + import-rename). workspace build 는 mock
default-OFF 라 mock 코드 미컴파일. 적대적 검증 3렌즈(build-test-integrity +
behavior-identity[mock byte-identical] + dead-crate-completeness) 통과,
clippy --workspace -D warnings 클린.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 01:06:14 +00:00
9dc7e14434 Merge pull request 'refactor(chunk): 9개 동일 code AST chunker → CodeAstV1Chunker 통합' (#220) from refactor/code-ast-chunker-consolidation into main
Reviewed-on: #220
2026-06-27 00:22:05 +00:00
cc17873d08 chore(chunk): PR #220 회차 1 리뷰 반영 — .context → .with_context (lazy alloc)
리뷰 nit: collapsed AST chunk arm 의 .context(format!(...)) 는 성공 경로에서도
String 을 매번 할당. .with_context(|| format!(...)) 로 에러 경로에만 alloc.
(나머지 nit — 일반화된 error-text "CodeAstV1Chunker" — 은 리뷰어가 no-action:
테스트가 새 substring 으로 맞춰져 있고 7개 arm 과 .context prefix 통일됨.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-27 00:05:20 +00:00
7665272aa5 refactor(chunk): 9개 동일 code AST chunker → CodeAstV1Chunker 통합
code_{c,cpp,go,java,js,kotlin,python,rust,ts}_ast_v1.rs 9개는 struct 이름과
const VERSION_LABEL 문자열만 다른 byte-identical 복붙이었다 (chunker 는
tree-sitter 를 안 쓰고 lang 은 SourceSpan::Code 데이터에서 흘러나옴). 하나로
통합:

- 신규 CodeAstV1Chunker { version_label: &'static str } + for_lang(lang) 생성자.
  9개 lang → 기존 VERSION_LABEL 문자열을 verbatim 매핑 (rust→code-rust-ast-v1,
  typescript→code-ts-ast-v1, javascript→code-js-ast-v1, ...). chunker_version()
  이 라벨을 그대로 반환 → chunk_id (id_for_chunk) byte-identical → 재인덱싱·
  버전 캐스케이드 0.
- chunk/policy_hash/make_chunk/split_oversize 는 code_rust_ast_v1.rs 에서 verbatim
  이식. 인라인 유닛 테스트 1세트 + 9-lang 라벨 매핑 테스트 추가.
- 9개 src 파일 삭제, lib.rs 9 mod+pub use → 1.
- ingest.rs 의 두 디스패치(chunker_version 스탬프 ~2700 + .chunk() ~3298)에서
  9개 AST arm 을 단일 arm 으로 collapse, for_lang(code_lang) 사용. 비-AST
  chunker(K8s/Dockerfile/Manifest/TextParagraph) arm 은 무손상.

byte-identical 증명: 9개 골든 스냅샷 테스트(tests/code_*_ast_snapshot.rs)가
assertion/expected-data 수정 0으로 통과 — construction/import 줄만 변경.
net −3030줄 (20파일 +143/−3173). 적대적 검증 3렌즈(byte-identical-proof +
version-string-integrity[9 라벨 old==new] + completeness) 통과, clippy -D warnings 클린.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-26 23:59:10 +00:00
9e8dafd4a6 Merge pull request 'refactor(search): 죽은 search-cache + search --explain scaffold 제거' (#219) from refactor/dead-search-cache-scaffold into main
Reviewed-on: #219
2026-06-26 23:35:41 +00:00
8dfeb007e0 chore(search): PR #219 회차 1 리뷰 반영 — 잔존 dead-cache 주석/help text 정리
리뷰어 지적 6건 + 전체-트리 grep 으로 추가 발견한 동일 부류 4건:
- search --trace help text(CLI main.rs + MCP search tool) "Bypasses cache"
  → "always a fresh retriever run" (없는 캐시 광고 제거)
- corpus_revision 의 실제 소비자는 incremental ingest 가 아니라 cursor
  pagination(stale_cursor) 임을 반영 — HANDOFF 노트 사실 정정 + ingest.rs
  bump 주석/warn 로그 + corpus_revision/search_lexical 테스트 주석 재서술
  (검증: cursor.rs + app.rs:327/333/498 가 유일 소비자, ingest 는 bump 만)
- bulk.rs "LRU cache amortize" → embedder cold-start 만 amortize
- app.rs lexical_index_version "search cache 무효화" 제거
- app-facade README 의 search cache bullet 을 "(제거됨 — 이력)" 표시

잔여 dead-cache 개념 참조 0건(active tree), clippy -D warnings 클린.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-26 17:25:03 +00:00
db9090c87b refactor(search): 죽은 search-cache + search --explain scaffold 제거
in-process LRU search cache 는 spine 재작성(#214)에서 이미 삭제됐는데
그 비계(scaffold)만 남아 있었다. 잔존물 제거:

- App::search/search_uncached 붕괴 (search() 는 1줄 위임자였음)
- search_uncached_with_config facade + 그 테스트 삭제
- 죽은 `search --no-cache` / `search --explain` CLI 플래그 제거
  (ask --explain 은 live — 건드리지 않음)
- 안 읽히던 RagCfg.explain_default config 필드 + fixture 제거
- 제거된 표면을 가리키던 stale 주석/문서(citation_helper/hybrid/
  search·app-facade README/DOGFOOD/HANDOFF) 정정

코어 검색 출력은 byte-identical (search_uncached 본문이 search() 로
verbatim 이동). `search_cache: false` wire capability 는 유지 — 제거 시
schema.v1 breaking bump 이라 손해. 적대적 검증 2렌즈(correctness-preserved
+ wire/config-safe) 통과, dead-symbol-complete 가 잡은 5건 주석/문서 정정 완료.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Mc6W1fgsrbFKTsqA6P8La
2026-06-26 17:12:55 +00:00
fd3b4ae3d2 Merge pull request 'test(app): caption 캐시 검증 보강 — mock-LLM CI 가드 + GPU 도그푸딩 evidence' (#218) from test/caption-cache-mock into main
Reviewed-on: #218
2026-06-25 04:46:35 +00:00
602d752d37 test(app): caption 캐시 b2 헬퍼 추출 + mock-LLM 결정적 게이트 (재실행=LLM 미호출) 2026-06-25 04:43:38 +00:00
c48021c332 docs(hotfix): caption 캐시 GPU 도그푸딩 evidence — b2 실엔진 검증 (22× + 비결정성 박제) 2026-06-25 02:30:28 +00:00
ed03e71a1c chore: bump version 0.30.1 → 0.31.0 + v0.31.0 release notes
척추 단순화(#214) + 임베딩 캐시 전면화(#216) + OCR/caption 캐시(#217) 누적 릴리스.
minor 트리거 = 척추의 V015 drop chat_sessions + config v4→v5 breaking 마이그레이션.
도그푸딩 evidence(HOTFIXES 2026-06-25): OCR 캐시 17 jira PNG 재인덱싱 7× + 캐시 히트
created_at 17/17 고정 / 실 v3 KB 마이그레이션(config v5 + V14/V15 자동, chat_sessions 드롭).
v0.31.0
2026-06-25 02:07:23 +00:00
cfffbf60ad Merge pull request 'feat(app): OCR/caption derivation 캐시 — 비전 산출물을 버전-캐스케이드에서 분리' (#217) from feat/ocr-caption-cache into main
Reviewed-on: #217
2026-06-25 01:47:29 +00:00
141dfbfd3e refactor(app): PDF per-page OCR 캐시 GET 에러 debug 로그 — b1/b2 와 관측성 대칭 (PR #217 회차 1) 2026-06-25 01:34:27 +00:00
68138049ad test(app): paddle 실엔진 이미지 OCR 캐시 #[ignore] 게이트 — 재인덱싱=히트 (b1 e2e) 2026-06-25 01:23:17 +00:00
f375b694b6 test(app): OCR 캐시 mock-engine 결정적 검증 — 재실행=엔진 미호출 + byte-identical + 버전 무효화 2026-06-25 01:13:02 +00:00
e64a56a321 feat(app): PDF 페이지 OCR 캐시 — PdfOcrOpts 캐시 핸들 (b3, parse-crate 의존 무변경) 2026-06-25 01:06:47 +00:00
578e78c83f feat(app): 이미지 caption 결과 캐시 — 바이트 키 caption 네임스페이스 (b2) 2026-06-25 00:56:45 +00:00
6ab503e27f feat(app): 이미지 OCR 결과 캐시 — 바이트 키 ocr 네임스페이스 (b1) 2026-06-25 00:54:20 +00:00
5ed80acf38 feat(app): ocr/caption derivation payload — full-struct serde encode/decode 2026-06-25 00:44:19 +00:00
7ed0151b81 feat(core): derivation_cache_key_bytes — 바이트 키 변형 (OCR/caption 입력용, NFC 없음) 2026-06-25 00:38:03 +00:00
62bb31053b docs(plan): PR2 OCR/caption derivation 캐시 구현 계획 — 7 task (core키+payload+b1/b2/b3+mock게이트+paddle레인) 2026-06-25 00:32:15 +00:00
3d9715b623 Merge pull request 'feat(app): 임베딩 캐시 전면화 — image/pdf/code 를 embed_with_cache 경유로' (#216) from feat/embed-cache-handlers into main
Reviewed-on: #216
2026-06-25 00:24:57 +00:00
ec2ee25a89 test(app): 캐시-히트 테스트에 단일-자산 격리 단언 추가 (report.new==1) — PR #216 회차 1 2026-06-24 23:53:38 +00:00
7310a8a30a test(app): code 재인덱싱 임베딩 캐시 히트 + byte-identical 검증 (AVX-gated) 2026-06-24 23:38:03 +00:00
ff4f9b782d feat(app): image/pdf/code 임베딩 캐시 hit/miss 로그 — markdown 과 관측성 대칭 2026-06-24 23:25:13 +00:00
2517776b4a feat(app): image/pdf/code 임베딩을 embed_with_cache 경유로 (markdown 패턴 통일) 2026-06-24 23:19:19 +00:00
348e56d8fc docs(plan): PR1 임베딩 캐시 전면화 구현 계획 — 3 핸들러 embed_with_cache 배선 + 결정적 재인덱싱 캐시-히트 테스트 2026-06-24 16:23:26 +00:00
448471dd0e docs(spec): 임베딩 캐시 전면화 + OCR/caption derivation 캐시 설계
(a) embed_with_cache 를 image/pdf/code 핸들러에 배선(markdown 전용→전미디어) — PR1.
(b) ocr/caption derivation_cache 네임스페이스로 OCR/caption 중간 산출물 캐싱 —
    버전-캐스케이드 분리 + ollama-vision 비결정성 박제 — PR2.

리서치로 해소: provenance 는 wire/게이트에 없어 캐시 히트 시 재현 불필요(byte-identical
유지) · payload 는 full 구조체 serde(block 레벨까지 byte-identical) · derivation_cache_key_bytes
신설 · paddle ONNX 자산은 이미 레포 번들(다운로드 불필요) → 결정적 게이트 가능.
열린 항목: paddle 게이트용 text-bearing OCR 코퍼스 생성(R2, plan 에서 해소).
2026-06-24 16:15:47 +00:00
963430ecc3 Merge pull request 'docs: full-suite 테스트 -j1 강제 제거 — 보수적 잡 수 안내로 완화' (#215) from docs/test-job-count into main
Reviewed-on: #215
2026-06-24 16:02:13 +00:00
0589f0190a docs: full-suite 테스트 -j1 강제 제거 — 보수적 잡 수 안내로 완화 2026-06-24 16:00:34 +00:00
4ae305b396 Merge pull request 'refactor: 척추 재작성 — 표면·동작·내부 단순화 (cuts + config 재편 + ingest 스파인)' (#214) from refactor/spine-cuts into main
Reviewed-on: #214
2026-06-24 15:59:00 +00:00
cebfc893ad refactor: 제거 기능 stale surface 정리 — 세션/wire 필드/rag_multi_turn/crate수 (PR #214 회차 1)
cut 으로 제거된 기능이 diff 밖 contract surface 에 남긴 잔재 정리:
- integrations/claude-code/kebab/SKILL.md: 제거된 --session/session_id 안내,
  answer.v1 의 conversation_id/turn_index 필드 목록, rag-v2 기본 pin, kebab tui
  언급 제거. 기본 템플릿 rag-v4(대체 rag-v3)로 갱신.
- docs/mcp-usage.md: ask 입력 스키마의 session_id, 'Session 관리(multi-turn)'
  섹션 전체(chat_sessions/chat_turns 포함), 예시의 conversation_id/turn_index 제거.
- docs/wire-schema/v1/answer.schema.json + answer_event.schema.json: Answer 가
  더는 방출 않는 conversation_id/turn_index 속성 제거(producer/doc 괴리 해소).
- schema.rs + wire.rs: capabilities.rag_multi_turn true→false(search_cache 와
  동일 처리; frozen v1 맵이라 키는 유지, 값만 flip).
- CLAUDE.md: 24→22 crates(tui+candle crate 제거 반영).
2026-06-24 15:53:50 +00:00
0ae739eeaf fix(config): v4→v5 마이그레이션이 image-only Option OCR 키를 pdf 로 누출 (PR #214 회차 1)
endpoint/det_model/rec_model/dict 는 default None 이라 reconcile 가 pdf 블록에
채우지 않는다(None 은 annotated-default 에서 누락). image 만 설정한 이 키를 공유
[ingest.ocr] 로 끌어올리면 resolve_ocr overlay 가 (medium_has(pdf,key)=false 라)
pdf 로 누출돼, pdf OCR endpoint/asset 경로가 v4 와 달라지고 det/rec/dict 는
ingest_config_signature 에 들어가 강제 재색인까지 유발했다. step_4_to_5 에서
Option 키는 pdf 도 명시한 경우에만 hoist 하도록 OPTION_OCR_KEYS 가드 추가.

기존 round-trip 테스트는 before=Config::from_file(v4) 가 이미 마이그레이션+resolve
를 거친 오염값이라 after==before tautology 였음 — pdf.det_model==None 명시 검증
추가 + 비대칭 image-only-endpoint 회귀 테스트 신설.
2026-06-24 15:46:20 +00:00
54d361637b docs(hotfix): Phase 3 module split 기록 (lib.rs 4331→493) 2026-06-24 14:24:01 +00:00
00ead29720 refactor(app): ingest 코드를 src/ingest 모듈로 분리 — lib.rs 4331→493줄, API 무변, 재인덱싱 게이트 IDENTICAL 2026-06-24 14:23:32 +00:00
26bc095418 docs(hotfix): spine Phase 3 — ingest stage 추출(API 6→2 + store/fingerprint/extract/chunk), 전부 재인덱싱 게이트 IDENTICAL 2026-06-24 13:59:56 +00:00