v1.108.56 — no-change freshness refresh, cache-hit hardening, subset-scoped pruning (#330, #331, #333)
Issue batch (#330, #331, #333), all reported by @mmashwani with source citations.
Fixed
#330 — index_folder no-change runs now advance the stored git_head.
FreshnessProbe flags a result stale_index when the stored index SHA differs from live HEAD. All three of index_folder's no-change return paths returned "No changes detected" without refreshing the stored SHA, so a commit that touched only non-indexed files left otherwise-current symbols stale-flagged right after a successful incremental run. A new _refresh_git_head_if_advanced() writes a metadata-only delta that advances git_head + indexed_at when live HEAD has moved; it is wired into all three paths.
#331 — search_symbols cache hits no longer raise a KeyError that masquerades as a missing argument.
A cached result without a _meta envelope (which _result_cache_get explicitly tolerates) raised KeyError("_meta") on the cache-hit return path, and the dispatcher rendered any KeyError as "Missing required argument". Cache hits now setdefault the _meta envelope, and the dispatcher reports missing-argument only for KeyErrors raised in its own argument-extraction frame, returning "Internal error processing <tool>" for ones raised inside tool code.
#333 — index_folder(paths=[...]) no longer prunes unlisted indexed files.
A subset refresh diffed the supplied paths against the entire stored index, so every unlisted indexed file was flagged deleted and pruned. resolve_explicit_paths now returns requested_rels and the incremental path rescopes deletions to only the listed subset; listing the root preserves full-corpus semantics, and a listed file that was deleted on disk is still pruned. Mirrors the jdocmunch #31 subset-diff contract.
9 tests in tests/test_v1_108_56.py; full suite 4564 passed / 10 skipped.
Install: pip install -U jcodemunch-mcp or uvx jcodemunch-mcp