도그푸딩 중 발견된 두 건 (Gitea #94, #95) 동시 수정. #94 — `InputBuffer` 가 append-only 라 Ask/Search/Filter overlay 에서 타이핑한 텍스트의 중간을 편집할 수 없었음. cursor 모델을 byte-position 기반으로 재구성 (cursor_col 은 prefix slice 의 unicode-width 합으로 derive). 신규 메서드: `move_left / move_right / move_home / move_end / delete_after`. 기존 `push_char` / `pop_char` 는 cursor 위치에서 동작 (cursor 가 끝일 때 backwards-compatible). Ask / Search / Library filter overlay 세 곳에 `← / → / Home / End / Delete` key handler 추가. Search 는 cursor 이동만으로는 input_dirty_at 을 reset 하지 않음 (커서 이동 ≠ 쿼리 변경 → debounce 타이머 유지). #95 — Ask 트랜스크립트의 `Paragraph::scroll((s.scroll, 0))` 가 위에서 부터 카운트라, 새 답변 도착 시 `s.scroll = 0` 으로 리셋하면 viewport 가 위쪽 고정 → 트랜스크립트가 길어지면 새 응답이 시야 밖으로 밀림. `AskState` 에 `follow_tail: bool` (default true) 추가. `render_answer` 가 follow_tail 동안 매 프레임 `Paragraph::line_count(width)` 로 wrapped row 수 계산해 스크롤을 `line_count - inner_height` 에 pin. `j` / `k` 가 follow_tail 끄고 `Shift-G` 가 다시 켬. 새 submission, `Ctrl-L` 도 follow-tail 재활성화. `kebab-tui` 의 ratatui dep 에 `unstable-rendered-line-info` feature 활성화 — `Paragraph::line_count` 가 ratatui 0.28 에서 unstable. 0.28 에 pin 되어있는 동안 안정. 향후 ratatui bump 시 본 feature 의 stable 여부 재확인 필요. cheatsheet popup Search/Ask section 에 화살표 + Home/End + Delete row 추가, Ask 에 `Shift-G` row 추가. README + HANDOFF + HOTFIXES + INDEX 동기. Tests: 12 신규 InputBuffer unit + 6 신규 Ask integration. 기존 699 워크 스페이스 테스트 모두 통과 (cursor 가 끝일 때 backwards-compat). Spec: `tasks/p9/p9-fb-22-tui-cursor-and-autoscroll.md` (status `completed`). Live deviation 기록: `tasks/HOTFIXES.md` `2026-05-04 — p9-fb-22`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.7 KiB
6.7 KiB
title, source, date
| title | source | date |
|---|---|---|
| KB 작업 단위 인덱스 | kebab_local_rust_report.md | 2026-04-27 |
KB 작업 단위 인덱스
kebab_local_rust_report.md 의 Phase 로드맵을 아키텍처 수준 작업 단위로 분해. 각 task 문서는 독립적으로 착수/검수 가능한 단위.
의존 그래프
P0 ── P1 ── P2 ── P3 ── P4 ── P5
│
├─ P6 (image)
├─ P7 (pdf)
├─ P8 (audio)
└─ P9 (TUI/desktop)
P0P5 는 직렬. P6P9 는 P5 이후 병렬 가능.
작업 단위
| # | 코드 | 제목 | 핵심 산출 crate | 선행 |
|---|---|---|---|---|
| P0 | phase-0-skeleton.md | Workspace 뼈대 + 도메인 계약 | kebab-core, kebab-parse-types, kebab-config, kebab-app, kebab-cli | – |
| P1 | phase-1-markdown-ingestion.md | Markdown ingestion 파이프라인 | kebab-source-fs, kebab-parse-md, kebab-normalize, kebab-chunk, kebab-store-sqlite | P0 |
| P2 | phase-2-lexical-search.md | SQLite FTS5 lexical 검색 + citation | kebab-search (lexical) | P1 |
| P3 | phase-3-vector-hybrid.md | Local embedding + LanceDB + hybrid | kebab-embed, kebab-embed-local, kebab-store-vector, kebab-search | P2 |
| P4 | phase-4-local-llm-rag.md | Local LLM + RAG + grounded answer | kebab-llm, kebab-llm-local, kebab-rag | P3 |
| P5 | phase-5-evaluation.md | Golden query / regression eval | kebab-eval | P4 |
| P6 | phase-6-image.md | 이미지 ingestion (OCR + caption) | kebab-parse-image | P5 |
| P7 | phase-7-pdf.md | PDF text + page citation | kebab-parse-pdf | P5 |
| P8 | phase-8-audio.md | 음성 transcription + timestamp citation | kebab-parse-audio | P5 |
| P9 | phase-9-ui.md | TUI + desktop app | kebab-tui, kebab-desktop | P5 |
Component task decomposition (per phase)
각 phase 의 component-level 분해. AI sub-agent 1세션 = 1 task 가 sweet spot.
- P0 — p0/ — 1 component
- P1 — p1/ — 6 components
- P2 — p2/ — 2 components
- P3 — p3/ — 5 components
- P4 — p4/ — 3 components
- P5 — p5/ — 2 components
- P6 — p6/ — 4 components
- P7 — p7/ — 3 components
- P8 — p8/ — 2 components
- P9 — p9/ — 5 components + 도그푸딩 피드백
- p9-1 tui-library
- p9-2 tui-search
- p9-3 tui-ask
- p9-4 tui-inspect
- p9-5 desktop-tauri
- p9-dogfooding 피드백 인덱스 — 사용자가 직접 돌려보며 수집한 UX 잡음 → p9-fb-01 ~ 20 으로 분해 + 구현 20/20 ✅ (2026-05-03 완료)
- p9-fb-01 ingest progress callback
- p9-fb-02 CLI progress display
- p9-fb-03 TUI ingest background
- p9-fb-04 ingest cancellation
- p9-fb-05 config path policy
- p9-fb-06 kebab reset
- p9-fb-07 MD title fallback
- p9-fb-08 search debounce
- p9-fb-09 editor restore
- p9-fb-10 CJK input
- p9-fb-11 ask markdown render
- p9-fb-12 mode machine
- p9-fb-13 cheatsheet
- p9-fb-14 color theme
- p9-fb-15 RAG multi-turn core
- p9-fb-16 TUI ask conversation
- p9-fb-17 chat session storage (V004)
- p9-fb-18 CLI ask session/repl
- p9-fb-19 search cache
- p9-fb-20 citation surface
- p9-fb-21 Insert-key + F1 visibility (post-도그푸딩)
- p9-fb-22 cursor mid-string editing + Ask follow-tail (post-도그푸딩)
Post-merge 핫픽스
머지 후 발견된 버그들과 그 follow-up PR들은 HOTFIXES.md에 dated 로그로 기록한다. 원래 task spec은 frozen 상태로 두고, post-merge 동작 변경은 HOTFIXES.md를 source of truth로 본다.
모든 task 공통 규약
- 의존성 경계 (
Allowed/Forbidden) 위반 금지. report §19 참조. - citation 없는 검색 결과 / RAG 응답 금지.
- 원본 파일 파괴 금지. 파생물만 재생성.
- 모든 record 에 version (parser/chunker/embedding/index/prompt) 기록.
- 각 phase 완료 =
cargo check --workspace && cargo test --workspace통과 + 해당 phase 의 완료 조건 CLI 데모 통과.