Files
kebab/tasks/INDEX.md
altair823 294b1ed00c fix(kebab-tui): p9-fb-22 — mid-string cursor editing + Ask follow-tail auto-scroll
도그푸딩 중 발견된 두 건 (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>
2026-05-04 15:29:09 +00:00

6.7 KiB
Raw Blame History

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.

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 데모 통과.