Phase deltas across activation (boot → activate → present → first paint)
in app.rs, and per-query dispatch→IPC→paint timing in the keystroke search
path, to localise launcher latency in the field. Gated behind debug log
level via `log::debug!`; no cost in normal runs.
File search shelled out to `fd`/`locate` on every auto-mode keystroke,
walking $HOME and serialising behind a single daemon connection — observed
0.9–1.3s per keystroke, stalling every other provider's results. Gate it
behind explicit intent and bound the walk.
- DynamicProvider::runs_in_auto_mode() (default true); filesearch returns
false, so it only runs when its `:file` prefix is active — never on a
bare auto-mode query
- route `/` as a `:file` prefix alias in parse_query (identical ParsedQuery)
- drop the colon-less `file `/`find ` auto-triggers; `:file` / `/` cover it
(also fixes `:file find me` searching for "me")
- bound fd: --max-depth, --exclude .git/node_modules/target/.cache,
20 results, 750ms kill-timeout (spawn + drained stdout + reap)
- configurable providers.filesearch_roots (TOML + owlry.set; `~/` expanded,
non-existent entries dropped); empty searches $HOME
Auto-mode typing drops from up to 1.3s to ~2–20ms; file search stays one
keystroke away.