chore(test): cache local test HOME across runs instead of using mktemp (#44)
## Summary - `scripts/test.fish` already guards fisher/clownfish installs with `type -q fisher || ...` and `type -q mock || ...`, but the local (non-CI) branch handed those guards a brand-new `mktemp -d` `$HOME` on every run, so they never actually short-circuited — every local `mise run test` re-fetched fisher and clownfish over the network. - Swap the ephemeral tmpdir for a persistent `${XDG_CACHE_HOME:-$HOME/.cache}/tide-test-home`. It's shared across worktrees of this repo (fisher/clownfish don't vary per checkout), while `fisher install .` still runs unconditionally every time so local edits to `functions/` are always picked up. - CI is untouched — GitHub Actions already runs each job in a clean container, so the `GITHUB_ACTIONS = true` branch of the script is unchanged. - Added `mise run test-clean` (backed by `scripts/test_clean.fish`, not an inline `rm -rf` in `mise.toml`) as an escape hatch if the cache ever needs a full reset — it checks existence first and uses `rm -r` rather than `-f`. Verified locally: - Cold cache: first `mise run test` bootstraps fisher + clownfish as before, full suite passes. - Warm cache: second run has zero `Fetching https://api.github.com/...` lines and still passes all 29 test files. - `mise run test-clean` removes a populated cache, and is a no-op (exit 0) when the cache doesn't exist. ## Test plan - [ ] `mise run test-clean && mise run test` — confirm cold bootstrap still works - [ ] `mise run test` again — confirm no fisher/clownfish network fetch and suite still passes - [ ] `mise run test-clean` twice in a row — confirm second run doesn't error 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>