Embedder.create() now caches the initialized embedder per model: the pipeline
was cached but each create() re-ran a dimension-probe inference, so every
code_search / semantic-search call paid two inferences. Repeated searches in a
session now skip the probe (calls 2..N are free). Behaviour unchanged.
Index freshness is no longer invisible: `haive index code --status` reports a
stale/fresh verdict for both the code-map (vs source mtimes) and the code-search
index (vs the code-map generation), in human + --json output. The code_search
MCP tool returns `stale: true` + an actionable notice when its index was built
from an older code-map, so agents stop silently trusting stale hits. New pure,
tested helper isCodeIndexStale.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>