fix(kebab-tui): p9-fb-24 — TUI status/key bar + Library 컬럼 헤더 + Ask/Inspect PgUp/PgDn #97

Merged
altair823 merged 15 commits from fix/p9-fb-24-tui-affordances into main 2026-05-04 17:20:17 +00:00
Owner

요약

도그푸딩 피드백 3 건을 단일 PR 로 통합:

  • 모든 모드에��� 항상 떠 있는 상태바 + 키 안내바 (버전 정보 포함).
  • Library 의 doc list 위에 컬럼 헤더 행 (TITLE / TAGS / UPDATED / CHUNKS).
  • Ask 트랜스크립트와 Inspect 양쪽에 PgUp / PgDn 페이지 스크롤 (fixed PAGE_STEP = 10, Inspect 의 기존 동작과 통일).

주요 변경

bottom 영역 2-row 분할

  • 윗줄 = render_status_bar 신규: kebab v<version> │ <pane> │ <docs> docs │ [conv_<8hex>… │ ]<dynamic_status>.
  • 아랫줄 = render_key_hints (기존 render_footer rename, body 무수정).
  • 기존 render_ingest_status 의 dedicated row 가 status bar 의 dynamic slot 으로 흡수. priority cascade: streaming (Ask) → searching (Search) → indexing (Ingest) → idle.
  • Ask 진입 시 current_question.is_some() || !turns.is_empty() 일 때만 conversation id 8자 prefix 표시.

PAGE_STEP 상수 일원화

  • 신규 crates/kebab-tui/src/pager.rs::PAGE_STEP: u16 = 10 (pub(crate)).
  • Ask: KeyCode::PageUp / PageDown 신규 (mode 무관). j/k 와 동일하게 follow_tail = false 로 freeze.
  • Inspect: 기존 +/-10 literal 을 pager::PAGE_STEP 으로 교체. 동작 동일.

Library 헤더 행

  • format_doc_header(title_w) 신규 — format_doc_row 와 동일 width math (display-width 인지, Hangul/CJK 안전).
  • render_doc_list 가 block inner 영역을 Layout::Length(1) (헤더) + Min(0) (List) 로 분할.

cheatsheet popup

  • Ask section 에 `PgUp / PgDn` row 추가 (Inspect 는 이미 명시).

테스트

  • 신규 약 21 (status_bar 통합 10 + library 헤더 1 + Ask PgUp/PgDn 3 + Inspect PgUp/PgDn 회귀 2 + format_doc_header 단위 1 + cascade branch 변형 잔여).
  • 기존 695 워크스페이스 테스트 무수정 통과.
  • `cargo test --workspace -j 1` → 716 passed, 0 failed.
  • `cargo clippy --workspace --all-targets -- -D warnings` clean.

Spec contract impact

  • p9-fb-13 follow-up (footer 단행 row) frozen spec 텍스트와 layout 충돌. frozen 텍스트 보존, 본 PR + HOTFIXES `2026-05-04 — p9-fb-24` 항목이 live source of truth.
  • p9-fb-03 (TUI background ingest) 의 dedicated status row 가 status bar dynamic slot 으로 흡수 — 시각적 위치 변경, 콘텐츠 동등.
  • p9-fb-22 (cursor + follow-tail) Ask 키 매핑 보존 + PgUp/PgDn 추가 (충돌 없음).
  • p9-fb-21 (cheatsheet) popup Ask section 갱신.

참조 문서

  • Design spec: `docs/superpowers/specs/2026-05-04-p9-fb-24-tui-affordances-design.md`
  • Implementation plan: `docs/superpowers/plans/2026-05-04-p9-fb-24-tui-affordances.md` (11 task TDD)
  • Per-task spec: `tasks/p9/p9-fb-24-tui-affordances.md`
  • Live deviations: `tasks/HOTFIXES.md` `2026-05-04 — p9-fb-24`

Known limitation (deferred)

  • `PAGE_STEP = 10` 은 viewport-aware 가 아님. 작은 터미널 (24 row) 에서 한 페이지 > viewport, 큰 터미널 (80 row) 에서 한 페이지 < viewport. 후속 task 에서 viewport-aware 로 업그레이드 가능.
  • 60 컬럼 미만 환경은 status bar wrap → 1 row 추가 차지.
## 요약 도그푸딩 피드백 3 건을 단일 PR 로 통합: - 모든 모드에��� 항상 떠 있는 **상태바 + 키 안내바** (버전 정보 포함). - Library 의 doc list 위에 **컬럼 헤더 행** (TITLE / TAGS / UPDATED / CHUNKS). - Ask 트랜스크립트와 Inspect 양쪽에 **PgUp / PgDn 페이지 스크롤** (fixed `PAGE_STEP = 10`, Inspect 의 기존 동작과 통일). ## 주요 변경 ### bottom 영역 2-row 분할 - 윗줄 = `render_status_bar` 신규: `kebab v<version> │ <pane> │ <docs> docs │ [conv_<8hex>… │ ]<dynamic_status>`. - 아랫줄 = `render_key_hints` (기존 `render_footer` rename, body 무수정). - 기존 `render_ingest_status` 의 dedicated row 가 status bar 의 dynamic slot 으로 흡수. priority cascade: streaming (Ask) → searching (Search) → indexing (Ingest) → idle. - Ask 진입 시 `current_question.is_some() || !turns.is_empty()` 일 때만 conversation id 8자 prefix 표시. ### `PAGE_STEP` 상수 일원화 - 신규 `crates/kebab-tui/src/pager.rs::PAGE_STEP: u16 = 10` (`pub(crate)`). - Ask: `KeyCode::PageUp` / `PageDown` 신규 (mode 무관). `j`/`k` 와 동일하게 `follow_tail = false` 로 freeze. - Inspect: 기존 `+/-10` literal 을 `pager::PAGE_STEP` 으로 교체. 동작 동일. ### Library 헤더 행 - `format_doc_header(title_w)` 신규 — `format_doc_row` 와 동일 width math (display-width 인지, Hangul/CJK 안전). - `render_doc_list` 가 block inner 영역을 `Layout::Length(1)` (헤더) + `Min(0)` (List) 로 분할. ### cheatsheet popup - Ask section 에 \`PgUp / PgDn\` row 추가 (Inspect 는 이미 명시). ## 테스트 - 신규 약 21 (status_bar 통합 10 + library 헤더 1 + Ask PgUp/PgDn 3 + Inspect PgUp/PgDn 회귀 2 + format_doc_header 단위 1 + cascade branch 변형 잔여). - 기존 695 워크스페이스 테스트 무수정 통과. - \`cargo test --workspace -j 1\` → 716 passed, 0 failed. - \`cargo clippy --workspace --all-targets -- -D warnings\` clean. ## Spec contract impact - **p9-fb-13 follow-up** (footer 단행 row) frozen spec 텍스트와 layout 충돌. frozen 텍스트 보존, 본 PR + HOTFIXES \`2026-05-04 — p9-fb-24\` 항목이 live source of truth. - **p9-fb-03** (TUI background ingest) 의 dedicated status row 가 status bar dynamic slot 으로 흡수 — 시각적 위치 변경, 콘텐츠 동등. - **p9-fb-22** (cursor + follow-tail) Ask 키 매핑 보존 + PgUp/PgDn 추가 (충돌 없음). - **p9-fb-21** (cheatsheet) popup Ask section 갱신. ## 참조 문서 - Design spec: \`docs/superpowers/specs/2026-05-04-p9-fb-24-tui-affordances-design.md\` - Implementation plan: \`docs/superpowers/plans/2026-05-04-p9-fb-24-tui-affordances.md\` (11 task TDD) - Per-task spec: \`tasks/p9/p9-fb-24-tui-affordances.md\` - Live deviations: \`tasks/HOTFIXES.md\` \`2026-05-04 — p9-fb-24\` ## Known limitation (deferred) - \`PAGE_STEP = 10\` 은 viewport-aware 가 아님. 작은 터미널 (24 row) 에서 한 페이지 > viewport, 큰 터미널 (80 row) 에서 한 페이지 < viewport. 후속 task 에서 viewport-aware 로 업그레이드 가능. - 60 컬럼 미만 환경은 status bar wrap → 1 row 추가 차지.
altair823 added 14 commits 2026-05-04 17:05:15 +00:00
도그푸딩 피드백 3 건 (Library 컬럼 헤더 부재, PgUp/PgDn 페이지 스크롤,
모든 모드에서 항상 떠 있는 상태바 + 키 안내바 + 버전 정보) 을 단일
spec 으로 묶음.

설계 핵심:

- bottom 영역을 2 row 로 분할: 윗줄 = 상태바 (`kebab v0.1.0 │ pane │
  doc_count │ 동적 상태`), 아랫줄 = 기존 footer_hints 그대로 이전.
- ingest progress 의 dedicated row 를 status bar 의 동적 영역으로 흡수
  (시각적 source 단일화).
- Library `List` 위에 `format_doc_header` 헤더 row 추가 (TITLE / TAGS
  / UPDATED / CHUNKS, display-width 정렬, Role::Heading).
- Ask + Inspect 양쪽에 PgUp/PgDn (fixed step 10). Ask 는 j/k 와 동일
  하게 follow_tail = false 로 freeze.

p9-fb-13 (footer 단행 row) + p9-fb-03 (ingest dedicated row) frozen
spec 들과 layout 충돌. frozen 텍스트는 그대로 두고 본 spec + 머지 후
HOTFIXES `2026-05-04 — p9-fb-24` 항목이 live source of truth.

Spec status `planned`. 다음 단계: writing-plans skill 로 implementation
plan 작성.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Spec → 11-step plan, TDD per task (failing test → impl → pass → commit).

Tasks:
1. pager module + PAGE_STEP constant (single edit point)
2. Inspect refactor — replace literal 10 with PAGE_STEP (with regression
   tests pinning behavior)
3. Ask PgUp/PgDn (mode-agnostic, follow_tail freeze)
4. Library format_doc_header (column-width math reuses format_doc_row)
5. Library header wired into render_doc_list (Layout split)
6. render_status_bar — version + pane + docs + idle (cascade structure)
7. Status bar cascade — streaming / searching / Ask conv_id branches
8. Status bar — ingest progress absorb test
9. render_root layout — drop conditional ingest row, render status +
   keys (rename render_footer → render_key_hints, delete render_ingest_status)
10. cheatsheet Ask gains PgUp/PgDn row
11. Docs sync — README + HANDOFF + HOTFIXES + INDEX + per-task spec

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Refactor the Inspect pane's PageDown/PageUp handlers to consume the
PAGE_STEP constant from pager.rs instead of hard-coding 10. Adds
regression tests to pin the scroll delta (=10), ensuring future
viewport-aware refactors surface here rather than silently in
user-visible behaviour.

Test coverage: added page_down_scrolls_by_ten_in_inspect and
page_up_rewinds_by_ten_saturating_in_inspect (+ existing
page_keys_scroll_by_ten still passes).

Remove #[allow(dead_code)] from pager.rs now that PAGE_STEP is
consumed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wire `format_doc_header` into `render_doc_list`: render the block
independently, split block_inner into a 1-row header + list via
vertical Layout, and drop the `.block(block)` from the List widget.
Remove `#[allow(dead_code)]` from `format_doc_header` now that it
is consumed. Add `library_renders_column_header_row` integration test.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
claude-reviewer-01 requested changes 2026-05-04 17:16:10 +00:00
claude-reviewer-01 left a comment
Member

회차 1 — 11-task TDD 분해 깔끔하고 단계별 verify (test/clippy/build) 가 일관되게 통과. cursor 모델 byte-position (p9-fb-22) 위에 status bar + page scroll + Library 헤더 추가가 회귀 표면을 잘 분리해서 잡혀 있고, ingest dedicated row 의 status bar dynamic slot 흡수도 cascade priority 명확하게 풀려 있음.

actionable 4건:

  1. tests/inspect.rs — 신규 page_down_scrolls_by_ten_in_inspect + page_up_rewinds_by_ten_saturating_in_inspect 가 기존 page_keys_scroll_by_ten 와 중복 커버리지. plan 작성 시점에 기존 테스트를 못 본 듯. 33 줄 정리 필요.
  2. tasks/HOTFIXES.md 테스트 카운트 기존 720+기존 695 (실제 cargo --workspace 716 = 21 신규 + 695 기존).
  3. 같은 카운트 오류 tasks/p9/p9-fb-24-tui-affordances.md spec 파일에도 박혀 있음.
  4. render_status_bar 의 magic string " │ " (sep) — 상수 추출 권장 (선택).
회차 1 — 11-task TDD 분해 깔끔하고 단계별 verify (test/clippy/build) 가 일관되게 통과. cursor 모델 byte-position (p9-fb-22) 위에 status bar + page scroll + Library 헤더 추가가 회귀 표면을 잘 분리해서 잡혀 있고, ingest dedicated row 의 status bar dynamic slot 흡수도 cascade priority 명확하게 풀려 있음. actionable 4건: 1. `tests/inspect.rs` — 신규 `page_down_scrolls_by_ten_in_inspect` + `page_up_rewinds_by_ten_saturating_in_inspect` 가 기존 `page_keys_scroll_by_ten` 와 중복 커버리지. plan 작성 시점에 기존 테스트를 못 본 듯. 33 줄 정리 필요. 2. `tasks/HOTFIXES.md` 테스트 카운트 `기존 720+` → `기존 695` (실제 cargo --workspace 716 = 21 신규 + 695 기존). 3. 같은 카운트 오류 `tasks/p9/p9-fb-24-tui-affordances.md` spec 파일에도 박혀 있음. 4. `render_status_bar` 의 magic string `" │ "` (sep) — 상수 추출 권장 (선택).
@@ -331,0 +317,4 @@
let sep = "";
let mut line_text = format!(
"kebab v{}{sep}{}{sep}{} docs{sep}",

magic string " │ " (sep) 가 render_status_bar 본문에 inline. 한 곳뿐이라 critical 은 아니지만 후속 PR 에서 layout 손볼 때 grep 안 됨.

옵션:

  • const STATUS_SEPARATOR: &str = " │ "; 모듈 상단 ���출.
  • 또는 그대로 두고 docstring 의 kebab v0.1.0 │ <pane> 표기와 sync 보장 — 본문이 짧고 가독성 OK.

선택 사항. 회차 2 에서 추출해도 좋고 acceptable as-is 로 닫아도 무방.

magic string `" │ "` (sep) 가 `render_status_bar` 본문에 inline. 한 곳뿐이라 critical 은 아니지만 후속 PR 에서 layout 손볼 때 grep 안 됨. 옵션: - `const STATUS_SEPARATOR: &str = " │ ";` 모듈 상단 ���출. - 또는 그대로 두고 docstring 의 `kebab v0.1.0 │ <pane>` 표기와 sync 보장 — 본문이 짧고 가독성 OK. 선택 사항. 회차 2 에서 추출해도 좋고 acceptable as-is 로 닫아도 무방.
@@ -188,6 +188,39 @@ fn page_keys_scroll_by_ten() {
assert_eq!(app.inspect.as_ref().unwrap().scroll, 0);
}
/// p9-fb-24 task 2: PageDown advances scroll by `PAGE_STEP` (= 10).

중복 테스트. 기존 page_keys_scroll_by_ten (line 188 위) 이 이미 PgDn(+10) + PgUp(-10) + saturating-at-0 셋 다 검증. 신규 page_down_scrolls_by_ten_in_inspect + page_up_rewinds_by_ten_saturating_in_inspect 는 같은 동작을 한 번 더 어설션. 둘 중 하나만 남기는 게 깔끔 — plan 이 신규 작성을 명시했지만 pre-existing 테스트가 plan 작성 시점에 보이지 않았던 것으로 보임.

권장: 신규 두 테스트 삭제 + 기존 page_keys_scroll_by_ten 의 docstring 에 p9-fb-24: PAGE_STEP 상수 회귀 핀 한 줄 추가. 신규 테스트와 동일 의미가 됨. 또는 기존을 삭제하고 신규로 교체. 어느 쪽이든 33 줄 dead test 제거.

중복 테스트. 기존 `page_keys_scroll_by_ten` (line 188 위) 이 이미 PgDn(+10) + PgUp(-10) + saturating-at-0 셋 다 검증. 신규 `page_down_scrolls_by_ten_in_inspect` + `page_up_rewinds_by_ten_saturating_in_inspect` 는 같은 동작을 한 번 더 어설션. 둘 중 하나만 남기는 게 깔끔 — plan 이 신규 작성을 명시했지만 pre-existing 테스트가 plan 작성 시점에 보이지 않았던 것으로 보임. 권장: 신규 두 테스트 삭제 + 기존 `page_keys_scroll_by_ten` 의 docstring 에 `p9-fb-24: PAGE_STEP 상수 회귀 핀` 한 줄 추가. 신규 테스트와 동일 의미가 됨. 또는 기존을 삭제하고 신규로 교체. 어느 쪽이든 33 줄 dead test 제거.
@@ -17,0 +20,4 @@
**Live binding 변경**:
- bottom 영역을 2 row 로 분할. 윗줄 = status bar (`kebab v<version> │ <pane> │ <docs> docs │ <state>`), 아랫줄 = key hint bar (기존 `footer_hints` 그대로). p9-fb-13 follow-up 의 single-row footer 와 충돌 — frozen spec 텍스트 보존, 본 항목이 live source of truth.

테스트 카운트 부정확. 본문에 기존 720+ 워크스페이스 테스트 무수정 통과 인데 실제 cargo test --workspace -j 1 결과는 716 passed (= 신규 21 + 기존 695). plan 작성 시점의 추정치 720+ 가 그대로 박힘.

기존 695 워크스페이스 테스트 또는 기존 695개 워크스페이스 테스트 (cargo test --workspace -j 1 기준 716 passed) 로 정정 권장. 영속 기록이라 정확한 카운트가 의미 있음.

테스트 카운트 부정확. 본문에 `기존 720+ 워크스페이스 테스트 무수정 통과` 인데 실제 cargo test --workspace -j 1 결과는 716 passed (= 신규 21 + 기존 695). plan 작성 시점의 추정치 `720+` 가 그대로 박힘. `기존 695 워크스페이스 테스트` 또는 `기존 695개 워크스페이스 테스트 (cargo test --workspace -j 1 기준 716 passed)` 로 정정 권장. 영속 기록이라 정확한 카운트가 의미 있음.
@@ -0,0 +35,4 @@
## Tests
- status_bar 통합 10 (version / pane / docs / idle / streaming / searching / ingest absorb / Ask conv_id present / Ask conv_id absent / outside Ask).
- library 통합 1 (헤더 row visible).

spec frozen 으로 박히기 전 카운트 정정. 기존 720+ 테스트 무수정 통과기존 695개 테스트 무수정 통과. HOTFIXES 와 같은 출처 문제.

spec frozen 으로 박히기 전 카운트 정정. `기존 720+ 테스트 무수정 통과` → `기존 695개 테스트 무수정 통과`. HOTFIXES 와 같은 출처 문제.
altair823 added 1 commit 2026-05-04 17:17:54 +00:00
회차 1 review (PR #97 회차 1) 의 4 건 actionable nit 모두 수렴.

- `crates/kebab-tui/tests/inspect.rs`: pre-fb-24 의 `page_keys_scroll_by_ten`
  이 신규 `page_down_scrolls_by_ten_in_inspect` + `page_up_rewinds_by_ten_saturating_in_inspect`
  와 중복 커버리지였음. 신규 두 테스트가 더 정밀 (PgUp 의 25→15→ 그 다음
  3→0 saturating 명시) 이라 기존을 삭제하고 신규로 대체. inspect 테스트
  -1 (14 → 13).
- `tasks/HOTFIXES.md`, `tasks/p9/p9-fb-24-tui-affordances.md`: 테스트
  카운트 `기존 720+` → `기존 695개 (cargo test --workspace -j 1 기준
  716 passed)` 정확화. 영속 기록.
- `crates/kebab-tui/src/run.rs`: status bar 의 magic string `"  │  "`
  를 `const STATUS_SEPARATOR: &str` 로 추출. docstring 의 rendered shape
  과 sync 보장 코멘트 추가.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
claude-reviewer-01 approved these changes 2026-05-04 17:19:10 +00:00
claude-reviewer-01 left a comment
Member

회차 2 — 회차 1 의 4 건 모두 수렴.

  • inspect 중복 테스트 정리 + 신규 두 개 유지 (saturating boundary 더 정밀).
  • HOTFIXES + spec 카운트 기존 720+기존 695개 (716 passed) 정확.
  • STATUS_SEPARATOR 상수 추출 + docstring sync 코멘트.

11-task TDD 분해의 결과로 회귀 표면 잘 분리됨. cursor model byte-position (p9-fb-22) + follow_tail (p9-fb-22) 위에 status bar dynamic cascade + page scroll + Library 헤더가 깔끔하게 얹힘. ingest dedicated row 의 status bar 흡수도 priority cascade 로 단일 source.

716 워크스페이스 테스트 통과 + clippy clean + backwards-compat 695개 그대로 통과 — 회귀 위험 없음.

머지 동의.

회차 2 — 회차 1 의 4 건 모두 수렴. - inspect 중복 테스트 정리 + 신규 두 개 유지 (saturating boundary 더 정밀). - HOTFIXES + spec 카운트 `기존 720+` → `기존 695개 (716 passed)` 정확. - `STATUS_SEPARATOR` 상수 추출 + docstring sync 코멘트. 11-task TDD 분해의 결과로 회귀 표면 잘 분리됨. cursor model byte-position (p9-fb-22) + follow_tail (p9-fb-22) 위에 status bar dynamic cascade + page scroll + Library 헤더가 깔끔하게 얹힘. ingest dedicated row 의 status bar 흡수도 priority cascade 로 단일 source. 716 워크스페이스 테스트 통과 + clippy clean + backwards-compat 695개 그대로 통과 — 회귀 위험 없음. 머지 동의.
@@ -331,0 +291,4 @@
/// p9-fb-24: separator between status bar fragments. Two spaces +
/// box-drawings light vertical (U+2502) + two spaces. Single source
/// — the docstring of `render_status_bar` references the rendered
/// shape, so any change here MUST update that docstring too.

STATUS_SEPARATOR 추출 + docstring sync 코멘트 ("any change here MUST update that docstring too") 가 single-source 강제하는 좋은 패턴. magic string 이 grep 가능해지고 후속 PR 의 layout 손볼 때 single edit point 확보.

`STATUS_SEPARATOR` 추출 + docstring sync 코멘트 ("any change here MUST update that docstring too") 가 single-source 강제하는 좋은 패턴. magic string 이 grep 가능해지고 후속 PR 의 layout 손볼 때 single edit point 확보.
@@ -183,1 +188,4 @@
assert_eq!(app.inspect.as_ref().unwrap().scroll, 10);
}
/// p9-fb-24 task 2: PageUp rewinds scroll by `PAGE_STEP`, saturating

회차 1 의 "중복 page_keys_scroll_by_ten 삭제 + 신규 두 개 유지" 깔끔하게 수렴. 신규 page_up_rewinds_by_ten_saturating_in_inspect 가 25→15 이어서 3→0 두 saturating boundary 를 한 테스트에서 명시적으로 체크하는 게 기존보다 정밀도 ↑. PAGE_STEP regression 핀의 의도와 정확히 부합.

회차 1 의 "중복 page_keys_scroll_by_ten 삭제 + 신규 두 개 유지" 깔끔하게 수렴. 신규 `page_up_rewinds_by_ten_saturating_in_inspect` 가 25→15 이어서 3→0 두 saturating boundary 를 한 테스트에서 명시적으로 체크하는 게 기존보다 정밀도 ↑. PAGE_STEP regression 핀의 의도와 정확히 부합.
altair823 merged commit 84ee50d717 into main 2026-05-04 17:20:17 +00:00
altair823 deleted branch fix/p9-fb-24-tui-affordances 2026-05-04 17:20:18 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: altair823-org/kebab#97