feat(tui): Phase 4 completion + Phase 5 session/lock/text-width

Phase 4 (bd-1df9) — all 5 acceptance criteria met:
- Sync screen with delta ledger (bd-2x2h, bd-y095)
- Doctor screen with health checks (bd-2iqk)
- Stats screen with document counts (bd-2iqk)
- CLI integration: lore tui subcommand (bd-26lp)
- CLI integration: lore sync --tui flag (bd-3l56)

Phase 5 (bd-3h00) — session persistence + instance lock + text width:
- text_width.rs: Unicode-aware measurement, truncation, padding (16 tests)
- instance_lock.rs: Advisory PID lock with stale recovery (6 tests)
- session.rs: Atomic write + CRC32 checksum + quarantine (9 tests)

Closes: bd-26lp, bd-3h00, bd-3l56, bd-1df9, bd-y095
This commit is contained in:
teernisse
2026-02-18 23:40:30 -05:00
parent 418417b0f4
commit 146eb61623
45 changed files with 5216 additions and 207 deletions

View File

@@ -112,7 +112,7 @@ mod tests {
let cmd = reg.complete_sequence(
&KeyCode::Char('g'),
&Modifiers::NONE,
&KeyCode::Char('x'),
&KeyCode::Char('z'),
&Modifiers::NONE,
&Screen::Dashboard,
);

View File

@@ -213,6 +213,16 @@ pub fn build_registry() -> CommandRegistry {
available_in: ScreenFilter::Global,
available_in_text_mode: false,
},
CommandDef {
id: "toggle_scope",
label: "Project Scope",
keybinding: Some(KeyCombo::key(KeyCode::Char('P'))),
cli_equivalent: None,
help_text: "Toggle project scope filter",
status_hint: "P:scope",
available_in: ScreenFilter::Global,
available_in_text_mode: false,
},
// --- Navigation: g-prefix sequences ---
CommandDef {
id: "go_home",
@@ -284,6 +294,46 @@ pub fn build_registry() -> CommandRegistry {
available_in: ScreenFilter::Global,
available_in_text_mode: false,
},
CommandDef {
id: "go_file_history",
label: "Go to File History",
keybinding: Some(KeyCombo::g_then('f')),
cli_equivalent: Some("lore file-history"),
help_text: "Jump to file history",
status_hint: "gf:files",
available_in: ScreenFilter::Global,
available_in_text_mode: false,
},
CommandDef {
id: "go_trace",
label: "Go to Trace",
keybinding: Some(KeyCombo::g_then('r')),
cli_equivalent: Some("lore trace"),
help_text: "Jump to trace",
status_hint: "gr:trace",
available_in: ScreenFilter::Global,
available_in_text_mode: false,
},
CommandDef {
id: "go_doctor",
label: "Go to Doctor",
keybinding: Some(KeyCombo::g_then('d')),
cli_equivalent: Some("lore doctor"),
help_text: "Jump to environment health checks",
status_hint: "gd:doctor",
available_in: ScreenFilter::Global,
available_in_text_mode: false,
},
CommandDef {
id: "go_stats",
label: "Go to Stats",
keybinding: Some(KeyCombo::g_then('x')),
cli_equivalent: Some("lore stats"),
help_text: "Jump to database statistics",
status_hint: "gx:stats",
available_in: ScreenFilter::Global,
available_in_text_mode: false,
},
// --- Vim-style jump list ---
CommandDef {
id: "jump_back",