Phase 2: Tabs, search, resizable columns, WSL browsing, and thumbnails
Overview
Phase 2 builds out Librarian from a single-folder viewer into a multi-tab file explorer with recursive search, a details view with resizable/auto-fitting columns,
WSL filesystem browsing, and an icon/thumbnail grid view. It also adds CI/release automation, a ripgrep provisioning script, and a round of correctness hardening.
~6,800 lines across 38 files.
Features
Tabs — Multiple folder tabs with independent navigation history, view mode, scroll position, column layout, and search state. Per-tab state is parked/restored on
tab switch.
Recursive search — Backed by an external ripgrep process (files-only), with two modes (Name / Contents), streaming results into the list as they arrive, debounced
input, and a cancellable subscription. ripgrep is invoked via an argv array (no shell) with -e/-- sentinels so queries can never be interpreted as flags. New
scripts/install-ripgrep.ps1 provisions rg.exe as a pre-install step; crates/librarian-core/src/matcher.rs handles match logic.
Resizable details columns — Exact text-measurement-based auto-fit, draggable dividers, and per-folder persisted column widths. New columns.rs, metrics.rs, and
ellipsis.rs (tooltip-on-truncation).
WSL browsing — A "Linux" navigation group enumerating installed distros via the Lxss registry and browsing them over \wsl.localhost<distro> UNC paths. New wsl.rs
in both librarian-win and the app tree.
Icons & thumbnails view — Grid view with shell-extracted icons/thumbnails loaded off-thread on a dedicated worker, with a modal spinner overlay that draws over
existing content (no blanking/reflow). New thumbs.rs, icons.rs, expanded icon.rs.
Folder tree — Left-pane expandable navigation tree (tree.rs).
App icon & packaging — Embedded librarian.ico via build.rs/winresource; CI workflow (unit tests on windows-2025) and a workflow_dispatch release workflow that
builds, generates a SHA256, and publishes. All GitHub Actions pinned by commit SHA.
Hardening & correctness fixes
The later commits in this branch carry fixes from a code review, a /simplify quality pass, and a crash-class review (see docs/):
Row identity across re-sorts — inline rename and mid-stream search selection now carry the file path, not a positional row index, so a background recompute_rows()
re-sort can't rename or act on the wrong file.
Stale producer guards — background drive/WSL enumeration and disk-change reloads now carry a load token and refuse to clobber a newer view or an active search.
Unified loading overlay — folder loads use the same modal spinner as thumbnail loading (no column "pinch", previous folder stays visible under the scrim).
Window arithmetic hardening — saturating_* in grid/virtualized window math guards against overflow/inverted ranges from stale scroll offsets (the crash-class
window_for fix).
docs/crash_class_review_filepilot.md — defensive review vs. an external NULL-write crash class
docs/debug_log.md — fix log
Phase 2: Tabs, search, resizable columns, WSL browsing, and thumbnails
Overview
Phase 2 builds out Librarian from a single-folder viewer into a multi-tab file explorer with recursive search, a details view with resizable/auto-fitting columns,
WSL filesystem browsing, and an icon/thumbnail grid view. It also adds CI/release automation, a ripgrep provisioning script, and a round of correctness hardening.
~6,800 lines across 38 files.
Features
Tabs — Multiple folder tabs with independent navigation history, view mode, scroll position, column layout, and search state. Per-tab state is parked/restored on
tab switch.
Recursive search — Backed by an external ripgrep process (files-only), with two modes (Name / Contents), streaming results into the list as they arrive, debounced
input, and a cancellable subscription. ripgrep is invoked via an argv array (no shell) with -e/-- sentinels so queries can never be interpreted as flags. New
scripts/install-ripgrep.ps1 provisions rg.exe as a pre-install step; crates/librarian-core/src/matcher.rs handles match logic.
Resizable details columns — Exact text-measurement-based auto-fit, draggable dividers, and per-folder persisted column widths. New columns.rs, metrics.rs, and
ellipsis.rs (tooltip-on-truncation).
WSL browsing — A "Linux" navigation group enumerating installed distros via the Lxss registry and browsing them over \\wsl.localhost\<distro> UNC paths. New wsl.rs
in both librarian-win and the app tree.
Icons & thumbnails view — Grid view with shell-extracted icons/thumbnails loaded off-thread on a dedicated worker, with a modal spinner overlay that draws over
existing content (no blanking/reflow). New thumbs.rs, icons.rs, expanded icon.rs.
Folder tree — Left-pane expandable navigation tree (tree.rs).
App icon & packaging — Embedded librarian.ico via build.rs/winresource; CI workflow (unit tests on windows-2025) and a workflow_dispatch release workflow that
builds, generates a SHA256, and publishes. All GitHub Actions pinned by commit SHA.
Hardening & correctness fixes
The later commits in this branch carry fixes from a code review, a /simplify quality pass, and a crash-class review (see docs/):
- Row identity across re-sorts — inline rename and mid-stream search selection now carry the file path, not a positional row index, so a background recompute_rows()
re-sort can't rename or act on the wrong file.
- Stale producer guards — background drive/WSL enumeration and disk-change reloads now carry a load token and refuse to clobber a newer view or an active search.
- Unified loading overlay — folder loads use the same modal spinner as thumbnail loading (no column "pinch", previous folder stays visible under the scrim).
- Window arithmetic hardening — saturating_* in grid/virtualized window math guards against overflow/inverted ranges from stale scroll offsets (the crash-class
window_for fix).
- Config validation — rejects non-finite persisted column widths.
- Dedup/altitude cleanups — shared cmp_name_str, extension_of, and is_wsl_host helpers hoisted into librarian-core; dead name_filter filtering seam removed.
Testing
cargo check, clippy, and fmt --check clean across the workspace; 86 tests pass (23 core, 13 win, 50 app).
Docs
- docs/phase2_simplify_review.md — quality pass writeup
- docs/crash_class_review_filepilot.md — defensive review vs. an external NULL-write crash class
- docs/debug_log.md — fix log
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Phase 2: Tabs, search, resizable columns, WSL browsing, and thumbnails
Overview
Phase 2 builds out Librarian from a single-folder viewer into a multi-tab file explorer with recursive search, a details view with resizable/auto-fitting columns,
WSL filesystem browsing, and an icon/thumbnail grid view. It also adds CI/release automation, a ripgrep provisioning script, and a round of correctness hardening.
~6,800 lines across 38 files.
Features
Tabs — Multiple folder tabs with independent navigation history, view mode, scroll position, column layout, and search state. Per-tab state is parked/restored on
tab switch.
Recursive search — Backed by an external ripgrep process (files-only), with two modes (Name / Contents), streaming results into the list as they arrive, debounced
input, and a cancellable subscription. ripgrep is invoked via an argv array (no shell) with -e/-- sentinels so queries can never be interpreted as flags. New
scripts/install-ripgrep.ps1 provisions rg.exe as a pre-install step; crates/librarian-core/src/matcher.rs handles match logic.
Resizable details columns — Exact text-measurement-based auto-fit, draggable dividers, and per-folder persisted column widths. New columns.rs, metrics.rs, and
ellipsis.rs (tooltip-on-truncation).
WSL browsing — A "Linux" navigation group enumerating installed distros via the Lxss registry and browsing them over \wsl.localhost<distro> UNC paths. New wsl.rs
in both librarian-win and the app tree.
Icons & thumbnails view — Grid view with shell-extracted icons/thumbnails loaded off-thread on a dedicated worker, with a modal spinner overlay that draws over
existing content (no blanking/reflow). New thumbs.rs, icons.rs, expanded icon.rs.
Folder tree — Left-pane expandable navigation tree (tree.rs).
App icon & packaging — Embedded librarian.ico via build.rs/winresource; CI workflow (unit tests on windows-2025) and a workflow_dispatch release workflow that
builds, generates a SHA256, and publishes. All GitHub Actions pinned by commit SHA.
Hardening & correctness fixes
The later commits in this branch carry fixes from a code review, a /simplify quality pass, and a crash-class review (see docs/):
re-sort can't rename or act on the wrong file.
window_for fix).
Testing
cargo check, clippy, and fmt --check clean across the workspace; 86 tests pass (23 core, 13 win, 50 app).
Docs