v1.7.0
herdr-file-viewer v1.7.0
The audit-driven Optimisations release: accessibility, UX papercuts, test-suite hardening, and a
large internal refactor — all behavior-compatible with v1.6.0.
Added
- Keyboard tree horizontal scroll —
H/L(Shift+h/l): scroll the tree pane sideways for
long or deeply-nested rows, mirroring the content pane's←/→. Closes the last mouse-only gap
(AC-18, keyboard-first). Lowercaseh/lstill collapse/expand. - A
? helphint on the content pane's bottom border, so the help overlay is discoverable
without guessing. - Empty-state guidance for blank panes (
Directory — select a file to view,No files) instead
of a blank void.
Changed
- Non-color accessibility cues alongside color-only signals (survive a colorblind palette or a
non-default theme): a●glyph on dirty directories, a▶marker on the active help tab, a
(current)label on the current worktree, and aREVERSED|BOLDcurrent-search-match. - Cleaner failure messages: renderer-fallback notices name the missing tool and point to
docs/renderers.mdinstead of leaking a raw OS error; editor hand-off now distinguishes a launch
failure from a non-zero editor exit. - Docs:
gitdocumented as a runtime requirement;docs/renderers.mdcorrected (bundled glow
palette; onlydelta/batare cargo-installable);ARCHITECTURE.mdupdated for the newproc
module and thecontroller/package layout. - Internal: shared
proc::wait_boundedsubprocess reaper;controller.rssplit from one
3,256-line god-module into acontroller/package (core +mouse/help/finder/picker/
infile/git_applysubmodules), with the open overlay collapsed into a singleModalenum so
"at most one modal open" is type-enforced. Behavior-preserving.
Fixed
- No stale content under a new title while an off-thread render is in flight — the pane shows a
Rendering…placeholder and the title + body switch to the new file together.
Test/CI hardening
- Perf-budget stopwatch tests gated behind a
perfcargo feature;search_perf/index_perf
rewritten as relative-scaling asserts that catch O(n²) without flaking on a loaded runner; pty e2e
tests switched to wait-for-content. A real read-only-invariant test routing every intent through
the handler, a modal×intent guard matrix, table-driven git-parser tests, and an OSC-52 ingestion
test.
Full changelog: see CHANGELOG.md.
No breaking changes; same install path.