feat(tui): Phase 2 Issue List + MR List screens

Implement state, action, and view layers for both list screens:
- Issue List: keyset pagination, snapshot fence, filter DSL, label aggregation
- MR List: mirrors Issue pattern with draft/reviewer/target branch filters
- Migration 027: covering indexes for TUI list screen queries
- Updated Msg types to use typed Page structs instead of raw Vec<Row>
- 303 tests passing, clippy clean

Beads: bd-3ei1, bd-2kr0, bd-3pm2
This commit is contained in:
teernisse
2026-02-18 13:06:06 -05:00
parent c5b7f4c864
commit 90c8b43267
33 changed files with 7850 additions and 483 deletions

View File

@@ -168,6 +168,13 @@ impl CrashContext {
///
/// Captures the current events via a snapshot. The hook chains with
/// the default panic handler so backtraces are still printed.
///
/// FIXME: This snapshots events at install time, which is typically
/// during init() when the buffer is empty. The crash dump will only
/// contain the panic itself, not the preceding key presses and state
/// transitions. Fix requires CrashContext to use interior mutability
/// (Arc<Mutex<VecDeque<CrashEvent>>>) so the panic hook reads live
/// state instead of a stale snapshot.
pub fn install_panic_hook(ctx: &Self) {
let snapshot: Vec<CrashEvent> = ctx.events.iter().cloned().collect();
let prev_hook = std::panic::take_hook();