182ec5c28d
Three caches that read config.yaml still keyed change detection on st_mtime (or st_mtime_ns + st_size), so a same-size replacement that keeps the old timestamp (cp -p, rsync -t, a timestamp-pinning writer) was never noticed: - model_tools._tool_defs_cache_key: get_tool_definitions kept serving stale dynamic tool schemas / mcp_servers for the process lifetime. - CLI mcp_servers auto-reload watcher (cli_tui_mixin seed + cli_info_mixin._check_config_mcp_changes): the replaced mcp_servers section was never reloaded. The seed is now _config_sig. - tui_gateway/server._load_cfg_raw / _save_cfg (_cfg_mtime -> _cfg_sig): the raw-config cache served the stale document and the next _save_cfg would write it back over the on-disk file. All three now use utils.file_signature like the rest of the PR. Tests that reset the renamed module/instance attributes follow the rename; one pinned-mtime replacement test per cache, red on the previous head. Also corrects two stale type/comment annotations in hermes_cli/config.py (_env_cache key shape, _RAW_CONFIG_CACHE record shape). Review finding: three sibling config.yaml caches (tool-defs memo, CLI mcp watcher, TUI-gateway raw cfg) still compared mtime/size only.