feat(tui): TUI background ingest worker + status bar (p9-fb-03)
Library 의 `r` 키가 `kebab_app::ingest_with_config_progress` 를 spawned thread 에서 호출. run loop 가 매 frame 마다 progress channel drain → 화면 하단 status bar 1 줄 갱신. blocking 하지 않음. 신규: - crates/kebab-tui/src/app.rs: `IngestState` struct (rx + counts + current_path + started_at + terminal_at + aborted + thread + cancel_tx) + `App.ingest_state` slot + `TERMINAL_LINE_HOLD_SECS`. - crates/kebab-tui/src/ingest_progress.rs: `start_ingest` (worker spawn + channel allocation), `drain_progress` (try_recv loop), `apply_event` (per-kind counter accumulation + Completed/Aborted marking), `status_line` (사람-친화 텍스트), `ready_to_clear` (3 초 hold). - 키 cheatsheet: Library footer 에 `r=ingest` 추가. Run loop: - 매 tick `drain_progress` + `ready_to_clear` 체크 → terminal 후 3 초 경과 시 slot drop + worker 스레드 join + Library refresh 큐. - Layout: ingest_state Some 일 때 footer 위에 status line 1 줄 추가 (있을 때만, 평시 영향 0). - status line: scanning 중 / 진행 (idx/total %, current path, elapsed) / 완료 (✓) / abort (✗) 4 모드. Cancel wiring (p9-fb-04) 의 `IngestState.cancel_tx: Sender<()>` slot 은 정의만 — 본 PR 에서 sender 보유, send 호출 X. Test: - 10 lib unit (apply_event 분기 5 / status_line 4 / ready_to_clear 2). - 기존 15 tui test 회귀 0. Plan 갱신: - p9-fb-03: status `planned` → `in_progress`. 머지 후 한 줄 commit 으로 `completed` flip. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@ phase: P9
|
||||
component: kebab-tui
|
||||
task_id: p9-fb-03
|
||||
title: "TUI ingest as background worker + status bar"
|
||||
status: planned
|
||||
status: in_progress
|
||||
depends_on: [p9-fb-01]
|
||||
unblocks: []
|
||||
contract_source: ../../docs/superpowers/specs/2026-04-27-kebab-final-form-design.md
|
||||
|
||||
Reference in New Issue
Block a user