## What's new
### `config --check` now detects CLAUDE.md and hook-script drift (fixes #200)
Two new sections in `jcodemunch-mcp config --check`:
**CLAUDE.md check** — reads `~/.claude/CLAUDE.md` and reports any of the 45 canonical tool names that are absent:
```
CLAUDE.md chec
## Features
### Add config file hot reloading - @DaleSeo #709
The MCP server now automatically detects changes to its YAML configuration file and reloads without requiring a restart. When a configuration change is detected, the server re-reads the file, applies the updated sett
## Bug fix
**`index_folder` full re-index crash: `'dict' object has no attribute 'summary'`** (closes #198)
`CodeIndex.symbols` is `list[dict]` (serialized symbol dicts from SQLite), but the summary-preservation dict comprehension in the full-index path used dot notation (`s.fi
## What's new
### Added
- **`workflow` MCP prompt** — surfaces as `/mcp__jcodemunch-mcp__workflow` in Claude Code. Injects step-by-step usage guidance (list_repos → search_symbols → get_symbol_source) directly into context. Works even when CLAUDE.md is absent or the model skips
## Fixes
- **X1 / C4-B** — `invalidate_cache` now clears `_REPO_PATH_CACHE`, `_bare_name_cache`, `_alias_map_cache`, and `_PROJECT_CONFIGS`/`_PROJECT_CONFIG_HASHES` in addition to the SQLite index. Previously all four persisted indefinitely after invalidation.
- **C6-A** — `inde
### Fixed
- **`search_symbols` no longer returns centrality-only results for out-of-corpus queries (C3)** — `_bm25_score` now guards the centrality bonus with `score > 0`, so it is only applied when at least one query term contributed BM25 relevance (or an exact name match fired)
### Fixed
- **`_REPO_PATH_CACHE` negative entries no longer permanently suppress project config (C2)** — `_resolve_repo_key` previously wrote `None` into `_REPO_PATH_CACHE` for any identifier that couldn't be resolved at call time (e.g. during watcher startup before the first ind
### Fixed
- **Deferred summarization no longer doubles `CodeIndex.symbols` in memory (C1)** — `_patch_index_from_delta` now builds a set of symbol IDs present in `new_sym_dicts` and skips any retained symbol whose ID is already being replaced. Previously, when `_run_deferred_summ
## What's new
### JSON support (follow-up to #197)
- `.json` files are now indexed and text-searchable — `search_text` with `file_pattern: "**/*.json"` now returns results
- Top-level object keys extracted as `constant` symbols: `name`, `dependencies`, `scripts` in `package.jso
## Bug Fix
- Fix missing PDF/DOCX/PPTX/XLSX converter dependencies after upstream `markitdown` moved them to optional extras in v0.1.0. All install paths (`setup.sh`, `setup.bat`, `Dockerfile`, `pyproject.toml`) now use `markitdown[all]`. (thanks @rubzo — #92)
## What's new
**Summary preservation during full reindex** — when a full reindex runs over a repo that already has an index (e.g. after a schema version bump or explicit `incremental=False`), symbols whose file content hash is unchanged now reuse their stored AI summaries instea
## Bug Fix
**`summarizer_concurrency` config key now respected by OpenAI-compatible provider**
`OpenAIBatchSummarizer` was reading concurrency from `OPENAI_CONCURRENCY` env var with a hardcoded default of 1, silently ignoring the `summarizer_concurrency` key in `config.jsonc`.
## What's new
**CSS symbol extraction** — CSS files now produce real symbols instead of zero.
Previously CSS files were indexed for text search but `get_file_outline` always returned nothing, leading users to believe CSS was not supported. This release adds a full custom parser
## Performance: Lazy tool imports
All 45 tool module imports in `server.py` are now deferred to the first `call_tool()` dispatch for each tool. Previously, importing `server.py` loaded every tool module (and their transitive deps: tree-sitter, httpx, pathspec, subprocess wrapper
## Changes
**assessment field on get_hotspots entries**
Each hotspot entry now includes an assessment field: 'low' | 'medium' | 'high'
based on hotspot_score thresholds (low <= 3, medium <= 10, high > 10).
Allows an LLM to relay findings without interpreting the raw score.
Compl
## What's new
### Session LRU result cache
get_blast_radius and find_references (single-identifier mode) now cache their results for the duration of the MCP session. Repeated calls with the same arguments return instantly from the in-process cache instead of re-running expensiv