feat: TUI Phase 1 common widgets + scoring/path beads

bd-26f2: Common widgets (render_breadcrumb, render_status_bar,
render_loading, render_error_toast, render_help_overlay) + render_screen
top-level dispatch wired to LoreApp::view(). 27 widget tests.

bd-2w1p: Add half-life fields to ScoringConfig with validation.
bd-1soz: Add half_life_decay() pure function.
bd-18dn: Add normalize_query_path() for path canonicalization.

Phase 1 modules: CommandRegistry, NavigationStack, CrashContext,
TaskSupervisor, AppState with per-screen states.

172 lore-tui tests passing, clippy clean, fmt clean.
This commit is contained in:
teernisse
2026-02-12 15:28:53 -05:00
parent d224a88738
commit eb98595251
27 changed files with 4893 additions and 305 deletions

View File

@@ -9,8 +9,8 @@
//! - [`InputMode`] — controls key dispatch routing.
use std::fmt;
use std::time::Instant;
use chrono::{DateTime, Utc};
use ftui::Event;
// ---------------------------------------------------------------------------
@@ -74,7 +74,7 @@ impl fmt::Display for EntityKey {
// ---------------------------------------------------------------------------
/// Navigation targets within the TUI.
#[derive(Debug, Clone, PartialEq, Eq)]
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum Screen {
Dashboard,
IssueList,
@@ -174,7 +174,7 @@ pub enum InputMode {
/// Command palette is open.
Palette,
/// "g" prefix pressed — waiting for second key (500ms timeout).
GoPrefix { started_at: Instant },
GoPrefix { started_at: DateTime<Utc> },
}
// ---------------------------------------------------------------------------