---
phase: P9
component: kebab-cli + kebab-tui
task_id: p9-fb-20
title: "Citation full path + scrollable pane (CLI block + TUI pane + jump)"
status: completed
depends_on: [p9-fb-09, p9-fb-16]
unblocks: []
contract_source: ../../docs/superpowers/specs/2026-04-27-kebab-final-form-design.md
contract_sections: [§7 RAG, §10 UX]
source_feedback: p9-dogfooding-feedback.md item 16
---

# p9-fb-20 — Citation surface

## Goal

ask 답변의 citation 을 사용자가 풀 경로로 보고, scroll 하고, 원본으로 점프 가능. CLI / TUI 둘 다.

## Allowed dependencies

- 기존 deps. p9-fb-09 의 editor restore helper 재사용.

## Public surface

CLI:
- `kebab ask "Q" [--show-citations | --hide-citations]` (default: show).
- 출력 형식 (사람-친화):
  ```
  답변:
  ...

  근거:
  [1] crates/kebab-app/src/lib.rs#L120-L140  (score=0.78, doc_id=abc123)
  [2] notes/foo.md#L12-L34                    (score=0.71, doc_id=def456)
  ```
- `--json` 은 항상 citations 포함 (`answer.v1.citations`, 변경 X).

TUI ask pane (p9-fb-16 conversation 위에):
- 화면 분할: 위 transcript / 아래 input. 추가로 옵션 우측 1/3 citation pane (`c` 키 toggle).
- citation pane 내부:
  - 각 항목 한 줄 (full path + line range + score). truncate 안 함 — long path 는 wrap.
  - turn 별로 group (`▾ Turn 2 (3)`). fold/unfold.
  - 선택 + Enter 또는 `o` → 외부 editor 로 path 점프 (p9-fb-09 helper).
  - 선택 + `i` → P9-4 inspect pane 으로 (Doc 또는 Chunk).

## Behavior contract

- TUI citation pane 의 `c` toggle 은 NORMAL 모드 (p9-fb-12 에 등록).
- citation pane 자체 scroll (`j/k`, PageUp/Down) — focus 가 citation pane 일 때.
- focus 이동: `Tab` 으로 transcript / citation 사이.
- editor jump 시 line range 의 시작 line 으로 (`+L120` 옵션 vim/code).

## Test plan

| kind | description |
|------|-------------|
| unit | CLI 출력 형식 snapshot (full path 포함) |
| unit | TUI citation pane fold/unfold |
| unit | `o` 키 → editor spawn (mock) |
| unit | `i` 키 → InspectTarget::Chunk 진입 |

## DoD

- [ ] `cargo test -p kebab-cli -p kebab-tui` 통과
- [ ] README ask 절에 citation 동작 안내
- [ ] HOTFIXES X (신규)

## Out of scope

- citation 의 inline preview (path 위에 마우스 hover 같은) — 터미널 한계
- citation 의 PDF page render (P9-5 desktop 용)
