yafm v0.9.1 — Audit pass (perf · security · UX · design)
A sweep through a five-dimension audit — everything actionable, fixed.
Performance
- Per-row work made cheap (cached plugin values / UTType kind / one shared formatter) so cursor moves and sorts don't stutter on big folders.
- O(1) cursor ops (URL→index map) instead of an O(n) scan per keystroke.
Security
- Closed a mid-path symlink escape in the plugin scope; xattr ops use XATTR_NOFOLLOW; Spotlight predicate fully sanitized; archives validate a real local .zip + cap entries; rename rejects path separators / NUL.
UX
- Keyboard multi-select (Insert toggle+advance, ⌘A select-all, Invert) and ⌘-click / ⇧-click mouse multi-select.
- Move to Trash is now the default (F8, recoverable); permanent delete is ⇧F8 / a separate menu item.
- Home / End / PageUp / PageDown cursor jumps; palette lists plugin commands.
Design
- Row icon is density-sized (fixes columns drifting between density modes); columns now line up with the header.
- Removed the stray accent bar that cut across the tab strip; tokenized tag dots, radii, control colors; tag chips wrap.
DMG is unnotarized — first launch: right-click ▸ Open ▸ Open Anyway. 80 Core tests green.